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); }