STM32F407 單通道ADC採樣,DMA傳輸

最近在研究STM32F4的ADC採樣功能,中間遇到了一些問題,寫下來以備後用。
F4和F1有很多庫函數是不一樣的,在參照F1的教程的時候,不能直接抄他的實驗代碼,否則會出錯。
因爲要用DMA將ADC轉換得到的值快速傳遞到SRAM中,所以就需要對ADC相關的DMA進行設置,這一步很重要。在寫ADC1的DMA初始化函數前,一定要查Reference Manual的DMA request mapping,搞清楚是某一個具體的peripheral對應的是DMA1還是DMA2,用到的是哪一個stream和channel。例如這次實驗要用到的外設ADC1,可以查到,ADC1歸DMA2 Stream0或者Stream4的Channel0管理,不能用其他的。
相關程序就是設置ADC相關的GPIO口,這裏提一下,F4裏面設置GPIO爲模擬輸入,用到的庫函數是GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN這與F1是不一樣的。
注意這一條語句
[objc] view plain copy
  1. DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t) (&ADC1->DR);  //ADC地址  
在教程中是這樣寫的
[objc] view plain copy
  1. #define ADC1_DR_Address ((uint32_t)0x4001204C)  
  2. DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address ;  //ADC地址  
這個 ADC1_DR_Address是宏定義的,其數值(基地址)是差參考手冊的memory map的register boundary addresses得到的(如下圖所示)


STM32F407 單通道ADC採樣,DMA傳輸 基地址+ADC_DR的偏置地址,直接用(uint32_t)(&ADC1->DR)這樣很簡潔,也不用去查手冊了,我覺得這樣比較好用
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章