【STM32】【STM32CubeMX】STM32CubeMX的使用之九:ADC
程序员文章站
2024-02-25 14:55:45
...
文章目录
下载工程文件:
https://gitee.com/Joseph_Cooper/stm32-cube-mx-stm32-l151-c8-t6
MCU:STM32L151C8T6-A
IDE:MDK-Keil5
固件库:STM32Cube FW_L1 V1.10.2
0、前言
本篇博文不再对ADC基本结构做赘述有想了解的戳这里。这里将侧重于CubeMX上的ADC配置过程及使用注意事项。
1、CubeMX配置
▲CubeMX RCC配置
▲CubeMX SYS配置
▲CubeMX 时钟树配置
▲CubeMX ADC配置
值得注意的是STM32L151的ADC频率在VREF += VDDA时频率不能超过16MHz
▲STM32L151DataSheet Table 53. ADC clock frequency
2、软件设计
关于串口配置在这里不做赘述有需求的同学戳这里。实验实现读取ADCIN21引脚即PB15引脚和GND之间的电压值。
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_ADC_Start(&hadc); //启动ADC单次转换
HAL_ADC_PollForConversion(&hadc, 50); //等待ADC转换完成,50ms超时时间
BATVal = HAL_ADC_GetValue(&hadc); //读取ADC转换数据
printf("BATVal = %.4fV\n", BATVal/4096*3.3*2);//因采用分压电阻和参考电阻阻值为1:1所以计算值乘以2
HAL_Delay(500);
}
/* USER CODE END 3 */
函数及宏定义介绍:HAL_StatusTypeDef HAL_ADC_PollForConversion
说明: ADC数据定期转换完成。
参数:
hadc
: 指向包含指定ADC配置信息的ADC_HandleTypeDef结构的指针。
Timeout
: 超时值为毫秒。
返回值:HAL status
注意事项:
此函数清除ADC转换标志EOS(序列结束)和EOC(转换结束。
此函数不能用于特定的设置:ADC配置为DMA模式,并轮询每个转换结束(ADC init参数“EOCS选择”设置为ADC_EOC_SINGLE_CONV)。 在这种情况下,DMA重置标志EOC,并且不能对每个转换执行轮询。 然而,轮询仍然可以在完整的序列上执行。