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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

STM32H743+CubeMX-ADC(16bit分辨率)+DMA采样三路模拟量(并行),没过采样。

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

文章目錄

  • 一、前言
  • 二、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é)補(bǔ)充
    • 7.1、在HAL_ADCEx_Calibration_Start()之前添加HAL_Delay

相關(guān)筆記:
STM32H743-梳理ADC模數(shù)轉(zhuǎn)換器在CubeMX上的配置
STM32H743+CubeMX-使用ADC模數(shù)轉(zhuǎn)換器讀取CPU的溫度(串行方式)

一、前言


在實(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采樣三路模擬量,分別是ADC_IN9, Vrefint Channel(MCU內(nèi)部), Temperature Sensor Channel(MCU內(nèi)部).

系統(tǒng)框圖如下(從右到左):

  • ADC3采樣各個(gè)通道的模擬量,每當(dāng)采樣完成時(shí),讓DMA將采樣的數(shù)據(jù)存放到內(nèi)存RAM_D3里(聲明一個(gè)全局?jǐn)?shù)組ADC3_Data[3])。
  • 每隔300ms,CPU通過cache獲取全局變量ADC_Data[0] ~ ADC_Data[2]一共3個(gè)模擬量。
  • STM32工程:

    鏈接:https://pan.baidu.com/s/1KbbWJ7K4SgKxjOns4iLOPA
    提取碼:kexw

    二、CubeMX


    2.1、RCC,SYS,Clock Configuration

    這三項(xiàng)的設(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ù)。基于這個(gè)目的,需要開啟Cortex_M7的cache與MPU功能。

    2.3、ADC3 Mode and Configuration

    2.4、DMA Settings

    2.5、Parameter Settings

    各個(gè)參數(shù)的說明,參考筆記:STM32H743-梳理ADC模數(shù)轉(zhuǎn)換器在CubeMX上的配置

    2.6、GPIO settings

    只有ADC3_IN9是外部通道,所以只有一個(gè)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)存的描述。

    ; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; *************************************************************LR_IROM1 0x08000000 0x00200000 { ; load region size_regionER_IROM1 0x08000000 0x00200000 { ; load address = execution address*.o (RESET, +First)*(InRoot$$Sections).ANY (+RO).ANY (+XO)}RW_IRAM1 0x20000000 0x00020000 { ; RW data.ANY (+RW +ZI)}RW_IRAM4 0x38000000 0x00010000 { ; RW data - 64KB SRAM4(0x38000000)*(.RAM_D3)}}

    接著,一定要Rebuild整個(gè)工程,不然會報(bào)錯(cuò)。。

    四、代碼


    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、觀察全局變量

    實(shí)時(shí)觀察全局變量。

    七、細(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(16bit分辨率)+DMA采样三路模拟量(并行),没过采样。的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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