STM32H743+CubeMX-ADC(16bit分辨率)+DMA采样三路模拟量(并行),没过采样。
文章目錄
- 一、前言
- 二、CubeMX
- 2.1、RCC,SYS,Clock Configuration
- 2.2、CORTEX_M7(cache與MPU)
- 2.3、ADC3 Mode and Configuration
- 2.4、DMA Settings
- 2.5、Parameter Settings
- 2.6、GPIO settings
- 三、Keil
- 3、1、Target
- 2.2、Linker
- 四、代碼
- 4.1、adc.c
- 4.2、main.c
- 五、硬件接線
- 六、DEBUG
- 6.1、Debug(printf)Viewer
- 6.2、觀察全局變量
- 七、細(xì)節(jié)補充
- 7.1、在HAL_ADCEx_Calibration_Start()之前添加HAL_Delay
相關(guān)筆記:
STM32H743-梳理ADC模數(shù)轉(zhuǎn)換器在CubeMX上的配置
STM32H743+CubeMX-使用ADC模數(shù)轉(zhuǎn)換器讀取CPU的溫度(串行方式)
一、前言
在實際項目上,ADC采樣必須與DMA組合使用,實現(xiàn)并行采樣。這里的“并行采樣”并不是多個通道同時采樣,而是ADC控制器一邊采樣,CPU一邊干其他非常重要的活。當(dāng)CPU在需要ADC采樣的數(shù)據(jù)時,通過cache獲取內(nèi)存里模擬量的值即可。
這個筆記實現(xiàn)ADC3+DMA采樣三路模擬量,分別是ADC_IN9, Vrefint Channel(MCU內(nèi)部), Temperature Sensor Channel(MCU內(nèi)部).
系統(tǒng)框圖如下(從右到左):
STM32工程:
鏈接:https://pan.baidu.com/s/1KbbWJ7K4SgKxjOns4iLOPA
提取碼:kexw
二、CubeMX
2.1、RCC,SYS,Clock Configuration
這三項的設(shè)置跟筆記一樣:
STM32H743+CubeMX-使用ADC模數(shù)轉(zhuǎn)換器讀取CPU的溫度(串行方式)
2.2、CORTEX_M7(cache與MPU)
DMA不能訪問DTCM內(nèi)存,所以要開辟RAM_D3內(nèi)存,讓DMA有地方放數(shù)據(jù)。基于這個目的,需要開啟Cortex_M7的cache與MPU功能。
2.3、ADC3 Mode and Configuration
2.4、DMA Settings
2.5、Parameter Settings
各個參數(shù)的說明,參考筆記:STM32H743-梳理ADC模數(shù)轉(zhuǎn)換器在CubeMX上的配置
2.6、GPIO settings
只有ADC3_IN9是外部通道,所以只有一個GPIO口。
最后生成代碼:
三、Keil
將全局?jǐn)?shù)組ADC_Data[4]定義到內(nèi)存RAM_D3域。參考筆記:STM32H743+CubeMX-將變量定義到指定內(nèi)存(Keil軟件)
3、1、Target
讓Keil只管理DTCM內(nèi)存,不要管理其他內(nèi)存。
2.2、Linker
從ST官方手冊RM0433可以查到,STM32H743的Flash首地址是0x08000000,DTCM(緊密耦合內(nèi)存)的首地址是0x20000000。
.sct文件,最開始跟Target配置的ROM與RAM一一對應(yīng)的。接下來,我們需要增加.sct的內(nèi)存。
在.sct文件添加其他內(nèi)存的描述。
接著,一定要Rebuild整個工程,不然會報錯。。
四、代碼
4.1、adc.c
在函數(shù)MX_ADC3_Init():
4.2、main.c
五、硬件接線
只有ADC3_IN9是外部通道,為了方便測試,ADC3_IN9連接3.3V。
六、DEBUG
6.1、Debug(printf)Viewer
從printf的信息看到,Vrefint的值是正確的。ADC3_IN9與DC3.3V連接,所以它的值非常接近3.3V。
6.2、觀察全局變量
實時觀察全局變量。
七、細(xì)節(jié)補充
7.1、在HAL_ADCEx_Calibration_Start()之前添加HAL_Delay
有一些網(wǎng)友說,在某些板子上電時,電容正在充電,最好在HAL_ADCEx_Calibration_Start()之前延時一會會,等待電容充滿電,板子的3.3V電源網(wǎng)絡(luò)穩(wěn)定后再執(zhí)行HAL_ADCEx_Calibration_Start()。
總結(jié)
以上是生活随笔為你收集整理的STM32H743+CubeMX-ADC(16bit分辨率)+DMA采样三路模拟量(并行),没过采样。的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 内核 核心代码,8分钟掌握L
- 下一篇: linux网络编程socket,Linu