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是不一樣的。
注意這一條語句
- DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t) (&ADC1->DR); //ADC地址
- #define ADC1_DR_Address ((uint32_t)0x4001204C)
- DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address ; //ADC地址
STM32F407 單通道ADC採樣,DMA傳輸 基地址+ADC_DR的偏置地址,直接用(uint32_t)(&ADC1->DR)這樣很簡潔,也不用去查手冊了,我覺得這樣比較好用