日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

發布時間:2025/3/15 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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、觀察全局變量
  • 七、細節補充
    • 7.1、在HAL_ADCEx_Calibration_Start()之前添加HAL_Delay

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

一、前言


在實際項目上,ADC采樣必須與DMA組合使用,實現并行采樣。這里的“并行采樣”并不是多個通道同時采樣,而是ADC控制器一邊采樣,CPU一邊干其他非常重要的活。當CPU在需要ADC采樣的數據時,通過cache獲取內存里模擬量的值即可。

這個筆記實現ADC3+DMA采樣三路模擬量,分別是ADC_IN9, Vrefint Channel(MCU內部), Temperature Sensor Channel(MCU內部).

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

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

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

    二、CubeMX


    2.1、RCC,SYS,Clock Configuration

    這三項的設置跟筆記一樣:
    STM32H743+CubeMX-使用ADC模數轉換器讀取CPU的溫度(串行方式)

    2.2、CORTEX_M7(cache與MPU)

    DMA不能訪問DTCM內存,所以要開辟RAM_D3內存,讓DMA有地方放數據。基于這個目的,需要開啟Cortex_M7的cache與MPU功能。

    2.3、ADC3 Mode and Configuration

    2.4、DMA Settings

    2.5、Parameter Settings

    各個參數的說明,參考筆記:STM32H743-梳理ADC模數轉換器在CubeMX上的配置

    2.6、GPIO settings

    只有ADC3_IN9是外部通道,所以只有一個GPIO口。

    最后生成代碼:

    三、Keil


    將全局數組ADC_Data[4]定義到內存RAM_D3域。參考筆記:STM32H743+CubeMX-將變量定義到指定內存(Keil軟件)

    3、1、Target

    讓Keil只管理DTCM內存,不要管理其他內存。

    2.2、Linker

    從ST官方手冊RM0433可以查到,STM32H743的Flash首地址是0x08000000,DTCM(緊密耦合內存)的首地址是0x20000000。

    .sct文件,最開始跟Target配置的ROM與RAM一一對應的。接下來,我們需要增加.sct的內存。

    在.sct文件添加其他內存的描述。

    ; ************************************************************* ; *** 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整個工程,不然會報錯。。

    四、代碼


    4.1、adc.c

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

    實時觀察全局變量。

    七、細節補充


    7.1、在HAL_ADCEx_Calibration_Start()之前添加HAL_Delay

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

    總結

    以上是生活随笔為你收集整理的STM32H743+CubeMX-ADC(16bit分辨率)+DMA采样三路模拟量(并行),没过采样。的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。