ADC新库
1.单次采集模式
1.在STM32CUBMX中设置为单次采集模式
2.在C文件中用HAL_ADC_START()函数启动ADC
3.用HAL_ADC_PollForConversion()延时等待采集完成,一般10MS即可
4.用HAL_IS_BIT_SET(HAL_ADC_STATE(),HAL_ADC_STATE_REG_EOC)判断ADC转换是否完成,如果完成置1
5.接收数据,在主程序中启动ADC自动校准程序HAL_ADCEx_Calibration_Start(&hadc);注意此程序再HAL_ADC_EX.H中
2.连续采集模式
1.在STM32CUBMX中设置为连续采集模式
2.在main函数中只需启动一次HAL_ADC_START()函数
3.在C文件中用do while函数反复循环,并需要延时以及判断标志位
#include "bsp_adc.h" void ADC_Demo(void) { uint16_t ADC_Temp1=0; uint32_t ADC_Tempsum=0; float ADC_Temp2=0; uint8_t i=0; do{ HAL_ADC_PollForConversion(&hadc,10); if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc),HAL_ADC_STATE_REG_EOC)) { ADC_Tempsum += HAL_ADC_GetValue(&hadc); i++; } }while(i<10); ADC_Temp1 =ADC_Tempsum/10; ADC_Temp2 = (float)ADC_Temp1*3.3/4096; printf("ADC采集电压值= %f V\r\n",ADC_Temp2); printf("ADC采集电压值= %d \r\n",ADC_Temp1); }
3.连续采集中断模式
1.在STM32CUBMX中ADC的选项内部NVIC下面配置中断打钩
2.在main函数中用HAL_ADC_Start_IT(&hadc)函数开启ADC采集以及ADC中断;
3.在pbdata.c中调用中断回调函数HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc);每次采集完成就会中断一次
//下面为公共文件 #include "pbdata.c" void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) { static uint8_t i=0; if(i<10) { ADC_try[i++]=HAL_ADC_GetValue(hadc); } else i=0; } //下面为bsp_adc.c文件 void ADC_Demo(void) { uint8_t i; uint16_t ADC_Temp1=0; float ADC_Temp2=0; uint16_t ADC_num=0; for(i=0;i<10;i++) { ADC_num+=ADC_try[i]; } ADC_Temp1=ADC_num/10; ADC_Temp2=ADC_Temp1*3.3/4096; printf("ADC采样平均值= %f V\r\n",ADC_Temp2); }