stm32CubeMx 實現單通道ADC DMA采集
阿新 • • 發佈:2019-04-29
adc gen 工具 alt hal circular 傳輸 簡介 image
printf("ADC Value %d\r\n",ADC_Value);
printf("vol %f\r\n", ADC_Value * 3.3 / 4096);
今天要做的是ADC的實驗
平臺 : STM32F429
開發工具:STM32CubeMx 版本號 5.0.0
實驗目的:實現ADC1 13通道 DMA采集
一 :簡介
首先,我們來看一下STM32F44XX參考手冊裏關於該芯片的ADC功能介紹
二:STM32CubeMx 配置
數據對齊方式 為 右對齊
使能 連續轉換模式,DMA連續請求
設置采樣次數 為 3個周期
配置 DMA
Mode設置為Circular模式,數據寬度設置為Half Word 2個字節
設置好之後,點擊GENERATE CODE 生成代碼
定義變量
__IO uint16_t ADC_ConvertedValue[20];
__IO float ADC_Volt;
啟動DMA數據傳輸
HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&ADC_ConvertedValue[0], 20);
讀取ADC數據
unsigned int i = 0, ADC_Value = 0;
for(i = 0; i < 20; ++i)
{
ADC_Value += ADC_ConvertedValue[i];
}
ADC_Value = ADC_Value / 20;
printf("vol %f\r\n", ADC_Value * 3.3 / 4096);
三 :實驗結果
串口輸出結果
四: 實驗中遇到的問題
1
最後一個參數一開始的時候寫1,程序就出現了阻塞的現象。我分析可能是因為DMA選擇的是Circular模式,會一直產生中斷,從而使得CPU都被中斷搶占了,因此將數據傳輸長度改為了20,每次對20個數據進行求均值計算,然後測試沒有問題。
2 關於采樣周期
采樣周期 是否是越大越精準呢? 我把采樣周期改大了之後,再進行測試,實驗有待驗證
stm32CubeMx 實現單通道ADC DMA采集