stm32CubeMx 實現單通道ADC DMA采集


 今天要做的是ADC單通道DMA采集實驗

MCU : STM32F429

開發工具:STM32CubeMx 版本號 5.0.0

實驗目的:實現ADC1 13通道 DMA采集

一 :簡介

  首先,我們來看一下STM32F4XX參考手冊里關於該芯片的ADC功能介紹

  

 

 

 

二:STM32CubeMx 配置

 

配置RCC 

 

 

 配置時鍾,硬件使用了25MHz無源晶振

配置ADC

 

數據對齊方式 為 右對齊

 

使能 連續轉換模式,DMA連續請求

 

設置采樣次數 為 3個周期

 

 

配置 DMA

Mode設置為Circular模式,數據寬度設置為Half Word  2個字節

 配置Project Manager

設置好之后,點擊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("ADC Value %d\r\n",ADC_Value);
printf("vol %f\r\n", ADC_Value * 3.3 / 4096);

 三 :實驗結果

 串口輸出結果

四: 實驗中遇到的問題

  1 

 

 

最后一個參數一開始的時候寫1,程序就出現了阻塞的現象。我分析可能是因為DMA選擇的是Circular模式,會一直產生中斷,從而使得CPU都被中斷搶占了,因此將數據傳輸長度改為了20,每次對20個數據進行求均值計算,然后測試沒有問題。

  2  關於采樣周期

     采樣周期 是否是越大越精准呢?  我把采樣周期改大了之后,再進行測試,實驗有待驗證

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM