|
基于正點原子潘多拉STM32L496開發(fā)板的ADC DMA采集與USB CDC數(shù)據(jù)傳輸示例項目。
項目簡介
本項目實現(xiàn)了ADC單通道連續(xù)采集,通過DMA雙緩沖模式進行數(shù)據(jù)傳輸,并使用JustFloat協(xié)議通過USB CDC(虛擬串口)將采集的波形數(shù)據(jù)實時傳輸?shù)絇C端。 主要功能: - ADC定時器觸發(fā)采集
- DMA雙緩沖傳輸
- USB CDC虛擬串口數(shù)據(jù)傳輸
- JustFloat協(xié)議數(shù)據(jù)格式
核心特性
- 定時器觸發(fā): TIM1定時器觸發(fā)ADC采集,采樣率穩(wěn)定
- DMA 雙緩沖模式: 自動循環(huán)接收數(shù)據(jù),無需 CPU 干預
- JustFloat 協(xié)議: 標準化的float數(shù)據(jù)傳輸格式,便于PC端解析
- USB CDC 虛擬串口: 免驅(qū)動的USB通信方式
- 空閑中斷: 檢測一幀數(shù)據(jù)結(jié)束,實現(xiàn)可變長數(shù)據(jù)接收
- 批量操作: 中斷中批量寫入數(shù)據(jù)到用戶隊列,主循環(huán)中批量讀取處理
硬件平臺| 項目 | 說明 | | 開發(fā)板 | 正點原子潘多拉 STM32L496 開發(fā)板 | | MCU | STM32L496VET6 | | 主頻 | 80MHz (PLL倍頻) |
引腳定義| 功能 | 引腳 | 備注 | | ADC1_IN3 | PC2 | 模擬輸入通道3 | | ADC1_IN9 | PA4 | 模擬輸入通道9 | | DEBUG | PB11 | 調(diào)試指示輸出(DMA緩沖區(qū)切換) | | USB DM | PA11 | USB數(shù)據(jù)負 | | USB DP | PA12 | USB數(shù)據(jù)正 |
技術(shù)細節(jié)
ADC配置
- 分辨率: 12位 (0-4095)
- 參考電壓: 3.3V
- 采樣通道: ADC1_IN3 (PC2)、ADC1_IN9 (PA4)
- 觸發(fā)方式: TIM1_TRGO 上升沿觸發(fā)
- 采樣時間: 2.5個ADC時鐘周期
- DMA模式: 循環(huán)模式,雙緩沖
DMA雙緩沖機制
- 半傳輸中斷 (HT): 前半緩沖區(qū)填滿,處理前256個樣本
- 傳輸完成中斷 (TC): 后半緩沖區(qū)填滿,處理后256個樣本
- 緩沖區(qū)大小: 總共512個樣本 (uint16_t)
JustFloat數(shù)據(jù)格式
[float電壓值(4字節(jié))] [同步字(4字節(jié))]
- float數(shù)據(jù): IEEE 754格式的float電壓值(單位:V)
- 同步字: 0x00 0x00 0x80 0x7F
- 協(xié)議開銷: 每個樣本點8字節(jié)(4字節(jié)數(shù)據(jù) + 4字節(jié)同步字)
傳輸速率限制
- USB CDC 最大速率: 1 MByte/s
- JustFloat 協(xié)議開銷: 每包需要4字節(jié)的協(xié)議同步尾巴
- 基于USB HS CDC單通道最大傳輸速率: 125 kSa/s = (1MB/s傳輸速率 / (4字節(jié)float + 4字節(jié)同步字))
⚠️ 關于ADC參考電壓的說明 本示例代碼使用固定的 3.3V 作為ADC參考電壓進行計算,這是為了保持代碼簡潔,便于快速理解和演示ADC DMA與USB傳輸?shù)暮诵墓δ堋?/div> 在實際工程應用中,需要注意: - 電源電壓波動:實際系統(tǒng)的3.3V電源會因負載、溫度等因素產(chǎn)生波
- 測量誤差:使用固定參考電壓會導致ADC測量結(jié)果出現(xiàn)系統(tǒng)性偏差
- 推薦做法:對于精度要求較高的應用,建議使用STM32內(nèi)部的 VREFINT(內(nèi)部參考電壓通道)進行實時校準:
- 讀取內(nèi)部VREFINT通道的ADC
- 根據(jù)VREFINT的實際值反推出當前的VDDA電
- 使用計算得到的VDDA_actual替換固定的3.3V進行電壓轉(zhuǎn)換
這樣可以消除電源電壓波動帶來的測量誤差,顯著提高ADC測量精度。 使用說明
編譯與下載
- 使用VSCODE打開項目
- 使用 Cmake + Gcc 編譯項目
- 通過ST-Link連接開發(fā)板
- 下載程序到開發(fā)板
- 用USB線連接開發(fā)板到PC
波形觀察
推薦使用 JustFloat Web Oscilloscope 在線示波器工具觀察波形: 在線使用: 使用步驟: 項目結(jié)構(gòu)
開發(fā)環(huán)境
常見問題
Q: 波形顯示不正常?
A: 確認模擬信號連接到PC2(ADC1_IN3)引腳,電壓范圍0-3.3V。 Q: 采樣率如何調(diào)整?
采樣率計算說明: - 觸發(fā)方式: TIM1定時器每次觸發(fā),ADC會對規(guī)則組中的所有通道依次完成一次采樣轉(zhuǎn)換
- 示例計算:
- 配置了2個規(guī)則通道(IN3、IN9)
- 如果定時器觸發(fā)頻率為50kHz
- 那么每個通道的采樣率都是50kHz(總采樣率為50kHz × 2 = 100kSa/s)
計算公式: 定時器觸發(fā)頻率 = 單通道采樣率TIM1_ARR = (TIM1時鐘頻率 / 預分頻系數(shù)) / 目標觸發(fā)頻率 - 1
使用步驟:
獲取最新源代碼: 游客,本帖隱藏的內(nèi)容需要積分高于 1 才可瀏覽,您當前積分為 0
論壇下載(可能非最新,同時受到論壇上傳大小限制,壓縮包砍了部分非必要資料):
STM32L496_ADC_DMA_MuChannel_Sample-master.7z
(14.25 MB, 下載次數(shù): 0)
2026-1-23 14:27 上傳
點擊文件名下載附件
|