整理CubeMX配置ADC实现几种方式AD转换
(注 : 以STM32F429为例)
1. 轮询方式
HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef* hadc); //轮询模式,需放在循环中不断开启
uint32_t HAL_ADC_GetValue(ADC_HandleTypeDef* hadc) //获取转换结果
HAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout) /* 此函数只用于轮询模式,用于等待转换完成 */
HAL_StatusTypeDef HAL_ADC_Stop(ADC_HandleTypeDef* hadc); //停止转换
(1)配置CumeMX,如下图,选择规则通道,设置好AD转换的模式,不扫描,连续转换。
(2)编程实现
** 2. 中断方式**
HAL_StatusTypeDef HAL_ADC_Start_IT(ADC_HandleTypeDef* hadc);//中断模式
HAL_StatusTypeDef HAL_ADC_Stop_IT(ADC_HandleTypeDef* hadc);
void HAL_ADC_IRQHandler(ADC_HandleTypeDef* hadc);//中断
(1)配置CubuMX,在轮询的基础上,把中断勾选中,如图:
(2)编程实现:
编写中断回调函数,在里面设置一个标志位。
主循环中判断此标志位,注意需要调用 HAL_ADC_Start_IT。
3、DMA方式多通道转换
HAL_StatusTypeDef HAL_ADC_Start_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, uint32_t Length);//DMA模式
HAL_StatusTypeDef HAL_ADC_Stop_DMA(ADC_HandleTypeDef* hadc);
(1)CubeMX配置,勾选多个通道,然后配置ADC,使能连续转换和扫描模式,使能DMA请求,配置Rank,如下图:
(2)编程实现:
注: 如果没有转换,要注意时钟问题。
- 定时器触发+ADC中断实现单通道AD采集
(1)首先要了解,ADC要好几种触发方式,如下,这里我采用TIM8的事件更新来触发AD转换。
#define ADC_EXTERNALTRIGCONV_T1_CC1 0x00000000U
#define ADC_EXTERNALTRIGCONV_T1_CC2 ((uint32_t)ADC_CR2_EXTSEL_0)
#define ADC_EXTERNALTRIGCONV_T1_CC3 ((uint32_t)ADC_CR2_EXTSEL_1)
#define ADC_EXTERNALTRIGCONV_T2_CC2 ((uint32_t)(ADC_CR2_EXTSEL_1 | ADC_CR2_EXTSEL_0))
#define ADC_EXTERNALTRIGCONV_T2_CC3 ((uint32_t)ADC_CR2_EXTSEL_2)
#define ADC_EXTERNALTRIGCONV_T2_CC4 ((uint32_t)(ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_0))
#define ADC_EXTERNALTRIGCONV_T2_TRGO ((uint32_t)(ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_1))
#define ADC_EXTERNALTRIGCONV_T3_CC1 ((uint32_t)(ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_1 | ADC_CR2_EXTSEL_0))
#define ADC_EXTERNALTRIGCONV_T3_TRGO ((uint32_t)ADC_CR2_EXTSEL_3)
#define ADC_EXTERNALTRIGCONV_T4_CC4 ((uint32_t)(ADC_CR2_EXTSEL_3 | ADC_CR2_EXTSEL_0))
#define ADC_EXTERNALTRIGCONV_T5_CC1 ((uint32_t)(ADC_CR2_EXTSEL_3 | ADC_CR2_EXTSEL_1))
#define ADC_EXTERNALTRIGCONV_T5_CC2 ((uint32_t)(ADC_CR2_EXTSEL_3 | ADC_CR2_EXTSEL_1 | ADC_CR2_EXTSEL_0))
#define ADC_EXTERNALTRIGCONV_T5_CC3 ((uint32_t)(ADC_CR2_EXTSEL_3 | ADC_CR2_EXTSEL_2))
#define ADC_EXTERNALTRIGCONV_T8_CC1 ((uint32_t)(ADC_CR2_EXTSEL_3 | ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_0))
#define ADC_EXTERNALTRIGCONV_T8_TRGO ((uint32_t)(ADC_CR2_EXTSEL_3 | ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_1))
#define ADC_EXTERNALTRIGCONV_Ext_IT11 ((uint32_t)ADC_CR2_EXTSEL)
#define ADC_SOFTWARE_START ((uint32_t)ADC_CR2_EXTSEL + 1U)
(2)CubeMX配置TIM8与ADC1:
TIM8配置为1Hz,即1S触发一次AD转换。
ADC1配置如下:别忘了开启中断
(3)代码实现:实现的效果是1S打印一次AD转换的结果
1 //首先调用
2 HAL_ADC_Start_IT(&hadc1);
3 HAL_TIM_Base_Start(&htim8);
4
5 //编写AD转换完成处理函数
6 void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* AdcHandle)
7 {
8 printf("%d\\r\\n",HAL_ADC_GetValue(&hadc1));
9 }
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
adc
+关注
关注
97文章
6291浏览量
542384 -
STM32
+关注
关注
2257文章
10822浏览量
352416 -
dma
+关注
关注
3文章
552浏览量
99916 -
AD转换
+关注
关注
3文章
166浏览量
45196 -
STM32F429
+关注
关注
0文章
40浏览量
10518
发布评论请先 登录
相关推荐
想在PWM的中点触发ADC采样,使用Cubemx配置一直实现不了,为什么?
您好!
我现在遇到个问题,就是想在PWM的中点触发ADC采样,使用Cubemx配置一直实现不了,还请大神指点
发表于 06-03 07:47
转:STM32CubeMX系列教程7:模数转换(ADC)
本章通过两个例程介绍STM32的模数转换器(ADC),第一个通过ADC采集内部温度传感器通道电压,然后得出MCU内部温度。第二个通过DMA的方式采集两个
发表于 07-02 17:03
STM32CubeMX配置ADC模拟看门狗实现掉电保存——基于(STM32G070+STM32CubeMX+HAL库+ADC模拟看门狗) 精选资料分享
实验目的:通过STM32CubeMX进行简单配置生成HAL库实现ADC模拟看门狗,以达到单片机掉电保存Flash。一、STM32CubeMX
发表于 08-02 06:05
通过CubeMx实现ADC多通道扫描采集DMA方式
项目简介任务:通过CubeMx实现ADC多通道扫描采集DMA方式(无中断)采集内部温度传感器的温度通道:采集A0、A1、A2、B0、B1端口电压,采集内部温度传感器通道16、内部电压通
发表于 08-11 08:14
STM32 HAL库 CUBEMX配置 ADC采集 精选资料分享
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录STM32 HAL库 CUBEMX配置 ADC采集软硬件型号1.单通道不定时任意时刻采集信号CUBEMX
发表于 08-11 07:46
在CubeMX中配置ADC出错请大神指教
将工作解决方案从 STM32L031 移植到 STM32G0B1 我尝试在 CubeMX 中配置 ADC。这是一个非常简单、典型的设置。3 个通道通过 DMA 以“一次性”模式转换,由
发表于 12-16 08:02
STM32CUBEMX配置教程(十二)STM32的定时器触发的固定频率ADC采样(使用DMA)
STM32CUBEMX配置教程(十二)STM32的定时器触发的固定频率ADC采样(使用DMA)
发表于 11-24 13:51
•84次下载
STM32CubeMX配置ADC模拟看门狗实现掉电保存——基于(STM32G070+STM32CubeMX+HAL库+ADC模拟看门狗)
实验目的:通过STM32CubeMX进行简单配置生成HAL库实现ADC模拟看门狗,以达到单片机掉电保存Flash。一、STM32CubeMX
发表于 12-03 09:36
•10次下载
2.使用cubemx配置stm32(二)__核心配置
文章目录使用cubemx配置stm32(二)__核心配置cubemx工程搭建实现单片机点灯程序CubeM
发表于 12-27 18:48
•0次下载
STM32 HAL库 CUBEMX配置 ADC采集
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录STM32 HAL库 CUBEMX配置 ADC采集软硬件型号1.单通道不定时任意时刻采集信号CUBEMX
发表于 12-27 18:57
•25次下载
STM32 HAL库 CubeMX教程(七)ADC电压采集串口输出
STM32 HAL库 CubeMX教程(七)ADC电压采集ADC简介CubeMX配置ADC初始化
发表于 01-12 20:24
•44次下载
评论