
導(dǎo)語“在本次教程中我們使用指南者開發(fā)板的ADC功能,實(shí)現(xiàn)ADC電壓采樣轉(zhuǎn)換。本項(xiàng)目在USART項(xiàng)目(參考USART章節(jié))的基礎(chǔ)上配置ADC,通過將采集到的數(shù)據(jù)轉(zhuǎn)化為電壓值在串口上打印出來。”
?硬件
(相關(guān)資料圖)
野火指南者開發(fā)板
?軟件
CubeMx &MDK & 串口調(diào)試助手
?原理圖
在CubeMx 中設(shè)置ADC,選擇PC1對應(yīng)的11通道,ADC1,參數(shù)根據(jù)下圖設(shè)置:
CubeMx 初始化代碼配置后使用MDK打開項(xiàng)目,主main.c 文件中添加電壓轉(zhuǎn)化函數(shù)和定義變量:
float adc_conv_value(uint16_t value);uint16_t adc_value; // 采集到的數(shù)據(jù)float adc_con_value; // 轉(zhuǎn)化后的實(shí)際電壓值在main.c 的自定義代碼段4編寫轉(zhuǎn)換函數(shù):/*電壓參考值為3.3V ADC 為12位,4096**/float adc_conv_value(uint16_t value){ return (float)value/4096*3.3; //ADC 轉(zhuǎn)換后的值轉(zhuǎn)換為實(shí)際的電壓值}
在main函數(shù)的主循環(huán)while中添加ADC采樣和打印采樣電壓值的函數(shù):
// 代碼開始從這兒寫:HAL_ADC_Start(&hadc1);HAL_ADC_PollForConversion(&hadc1, 10);adc_value=HAL_ADC_GetValue(&hadc1);printf("ADC1 channel 11 value=%4d\\r\\n",adc_value);adc_con_value=adc_conv_value(adc_value);printf("ADC1 channel 11 real V value=%4.3f\\r\\n",adc_con_value);HAL_Delay(500);
編譯項(xiàng)目后下載到開發(fā)板中。
現(xiàn)在我們通過串口打印采集的實(shí)際值和轉(zhuǎn)換后的電壓值:
可以通過調(diào)節(jié)滑動變阻器觀察采集到數(shù)據(jù)變化,value是12位的整數(shù)值,realVvalue是轉(zhuǎn)化后的實(shí)際電壓值。
代碼分析:
(1)HALADCStart(&hadc1); 是啟動ADC1轉(zhuǎn)換。
(2)HALADCPollForConversion(&hadc1, 10);是等待轉(zhuǎn)換結(jié)束。
(3)adcvalue=HALADC_GetValue(&hadc1);是獲取轉(zhuǎn)換結(jié)果。
(4)adcconvalue=adcconvvalue(adc_value);是自定義的轉(zhuǎn)換結(jié)果轉(zhuǎn)化為實(shí)際電壓值的函數(shù)。
標(biāo)簽: