日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STM32H743+CubeMX-ADC+DMA采样四路AD

發(fā)布時(shí)間:2025/3/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32H743+CubeMX-ADC+DMA采样四路AD 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 一、前言
  • 二、CubeMX
    • 2.1、Clock Configuration
    • 2.2、CORTEX_M7(cache與MPU)
    • 2.3、ADC3 Mode and Configuration
    • 2.4、Parameter Settings
    • 2.5、DMA Settings
    • 2.6、GPIO settings
  • 三、STM32H743IITX_FLASH.ld
  • 四、代碼
    • 4.1、adc.c
    • 4.2、main.c
    • 4.3、freertos.c
  • 五、硬件接線
  • 六、DEBUG
  • 七、細(xì)節(jié)補(bǔ)充
    • 7.1、在HAL_ADCEx_Calibration_Start()之前添加HAL_Delay

相關(guān)筆記:
STM32H743+CubeMX-梳理MPU的設(shè)置
STM32H743-梳理ADC模數(shù)轉(zhuǎn)換器在CubeMX上的配置

一、前言

在實(shí)際項(xiàng)目上,ADC采樣必須與DMA組合使用,實(shí)現(xiàn)并行采樣。這里的“并行采樣”并不是多個(gè)通道同時(shí)采樣,而是ADC控制器一邊采樣,CPU一邊干其他非常重要的活。當(dāng)CPU在需要ADC采樣的數(shù)據(jù)時(shí),通過cache獲取內(nèi)存里模擬量的值即可。這個(gè)筆記實(shí)現(xiàn)ADC3+DMA采樣四路模擬量,其中三路從CPU外部獲取,另外一路從CPU內(nèi)部獲取(CPU的溫度)。
系統(tǒng)框圖如下(從右到左):

  • ADC3采樣各個(gè)通道的模擬量,每當(dāng)采樣完成時(shí),讓DMA將采樣的數(shù)據(jù)存放到內(nèi)存RAM_D3里(聲明一個(gè)全局?jǐn)?shù)組ADC3_Data[4])。
  • DMA將RANK1(CH5)的值搬運(yùn)到ADC_Data[0],將RANK2(CH9)的值搬運(yùn)到ADC_Data[1],RANK3(CH16)的值搬運(yùn)到ADC_Data[2],RANK4(CPU Temp)的值搬運(yùn)到ADC_Data[3]。
  • 每隔300ms,CPU通過cache獲取全局變量ADC_Data[0] ~ ADC_Data[3]一共4個(gè)模擬量。
  • 二、CubeMX

    2.1、Clock Configuration

    ADC的時(shí)鐘源設(shè)置72M,這個(gè)時(shí)鐘模板最多人使用。

    2.2、CORTEX_M7(cache與MPU)

    這一次ADC+DMA模擬量采樣使用的是RAM_D3內(nèi)存(AHB SRAM(D3域) ),即MPU管理的第二塊內(nèi)存。MPU管理的第一塊內(nèi)存AXI SRAM不配置也沒關(guān)系,這個(gè)配置是前面研究MPU時(shí)所留下來的配置。

    2.3、ADC3 Mode and Configuration

    使能4個(gè)通道。

    2.4、Parameter Settings

    各個(gè)參數(shù)的說明,參考筆記:STM32H743+CubeMX-梳理MPU的設(shè)置

    2.5、DMA Settings

    經(jīng)過測試,Data Width使用Word也可以。Data Width改用Word的話,代碼里的變量大小,HAL庫參數(shù)也要跟著改動(dòng)。

    2.6、GPIO settings

    三、STM32H743IITX_FLASH.ld

    將全局?jǐn)?shù)組ADC_Data[4]定義到內(nèi)存RAM_D3域。參考筆記:STM32H743+CubeMX-將變量定義到指定的內(nèi)存
    首先確認(rèn)芯片的內(nèi)存架構(gòu),找到所需的內(nèi)存名字。

    用戶定義一段內(nèi)存_D3_Area。芯片的SRAM需要定義一個(gè)名字后才能使用,我嘗試過跳開這一個(gè)步驟,結(jié)果失敗了。

    四、代碼

    4.1、adc.c

    全局?jǐn)?shù)組ADC3_Date[4]放在內(nèi)存RAM_D3,全局變量adc_f[4]放在默認(rèn)的DTCM內(nèi)存。

    在函數(shù)void MX_ADC3_Init(void)的用戶代碼段編寫代碼,使用HAL庫校準(zhǔn)ADC。

    在文件最下方,編寫函數(shù),用戶將模擬量的值轉(zhuǎn)換成電壓值與溫度值。

    4.2、main.c

    聲明外部變量。

    啟動(dòng)ADC+DMA采樣。

    4.3、freertos.c

    在freertos的一個(gè)任務(wù)里調(diào)用剛才編寫的轉(zhuǎn)換函數(shù)。這個(gè)任務(wù)很簡單,每隔300ms獲取一次模擬量的值。

    五、硬件接線

    • PH5直接連接到板子的3.3V。
    • PF4直接連接到板子的GND(0V)。
    • PF3連接到安富萊設(shè)計(jì)的H7-TOOL的模擬量輸出通道上。(我讓它輸出約2.4V)

    六、DEBUG

    將剛才的兩個(gè)全局變量添加到STM32CubeIDE的現(xiàn)場表達(dá)式上,實(shí)時(shí)觀察變量的值。

    • adc_f[0]采樣的是PF3的值,非常接近H7-TOOL輸出的2.41V。采樣到的數(shù)值與實(shí)際的值不完全相等,因?yàn)槟M量采樣都是有誤差的。
    • adc_f[1]采樣的是PF4的值,這個(gè)通道直接連接到板子的GND,所以非常接近0V。
    • adc_f[2]采樣的是PH5的值,這個(gè)通道直接連接到板子的3.3V,所以非常接近3.3V。
    • adc_f[3]采樣的是內(nèi)部CPU的溫度,經(jīng)過官方提供的公式,轉(zhuǎn)換后得到約45℃。

    七、細(xì)節(jié)補(bǔ)充

    7.1、在HAL_ADCEx_Calibration_Start()之前添加HAL_Delay

    有一些網(wǎng)友說,在某些板子上電時(shí),電容正在充電,最好在HAL_ADCEx_Calibration_Start()之前延時(shí)一會會,等待電容充滿電,板子的3.3V電源網(wǎng)絡(luò)穩(wěn)定后再執(zhí)行HAL_ADCEx_Calibration_Start()。

    總結(jié)

    以上是生活随笔為你收集整理的STM32H743+CubeMX-ADC+DMA采样四路AD的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。