STM32CUBEIDE(10)----ADC在DMA模式下掃描多個通道
概述
本章STM32CUBEMX配置STM32F103的ADC在DMA模式掃描多個通道,通過串口進行打印。 需要GD樣片的可以加Q_QUN申請:615061293。
視頻教學(xué)
https://www.bilibili.com/video/BV1ST411w7hS

csdn課程
課程更加詳細。?https://download.csdn.net/course/detail/35611
代碼下載
https://download.csdn.net/download/qq_24312945/86395148
生成例程
使用STM32CUBEMX生成例程,這里使用NUCLEO-F103RB開發(fā)板?

?查看原理圖,PA2和PA3設(shè)置為開發(fā)板的串口。?

?配置串口。

?開啟中斷。?

?查看原理圖,Arduino的接口A0-A5都是AD口。?

?ADC通道配置 | ADC1 | IN0(PA0) |IN1(PA1) |IN4(PA4) | |--|--|--|--|
ADC1配置。

ADCs_Common_Settings:
Mode:Independent mod 獨立 ADC 模式,當(dāng)使用一個 ADC 時是獨立模式,使用兩個 ADC 時是雙模式,在雙模式下還有很多細分模式可選,具體配置 ADC_CR1:DUALMOD 位。
ADC_Settings:
Disabled 禁止間斷模式。這個在需要考慮功耗問題的產(chǎn)品中很有必要,也就是在某個事件觸發(fā)下,開啟轉(zhuǎn)換。
Enabled 開啟間斷模式。
Disabled 單次轉(zhuǎn)換。轉(zhuǎn)換一次后停止需要手動控制才重新啟動轉(zhuǎn)換。
Enabled 自動連續(xù)轉(zhuǎn)換。
Disabled 禁止掃描模式。如果是單通道 AD 轉(zhuǎn)換使用 DISABLE。
Enabled 開啟掃描模式。如果是多通道 AD 轉(zhuǎn)換使用 ENABLE。
Right alignment 轉(zhuǎn)換結(jié)果數(shù)據(jù)右對齊,一般我們選擇右對齊模式。
Left alignment 轉(zhuǎn)換結(jié)果數(shù)據(jù)左對齊。
Data Alignment:
Scan Conversion Mode:
Continuous Conversion Mode:
DiscontinuousConvMode:
ADC_Regular_ConversionMode:
Enable Regular Conversions 是否使能規(guī)則轉(zhuǎn)換。
Number Of Conversion ADC轉(zhuǎn)換通道數(shù)目,有幾個寫幾個就行。
External Trigger Conversion Source 外部觸發(fā)選擇。這個有多個選擇,一般采用軟件觸發(fā)方式。
Rank:
Channel ADC轉(zhuǎn)換通道
Sampling Time 采樣周期選擇,采樣周期越短,ADC 轉(zhuǎn)換數(shù)據(jù)輸出周期就越短但數(shù)據(jù)精度也越低,采樣周期越長,ADC 轉(zhuǎn)換數(shù)據(jù)輸出周期就越長同時數(shù)據(jù)精度越高。
ADC_Injected_ConversionMode:
Enable Injected Conversions 是否使能注入轉(zhuǎn)換。注入通道只有在規(guī)則通道存在時才會出現(xiàn)。
WatchDog:
Enable Analog WatchDog Mode 是否使能模擬看門狗中斷。當(dāng)被 ADC 轉(zhuǎn)換的模擬電壓低于低閾值或者高于高閾值時,就會產(chǎn)生中斷。
DMA開啟。?

生成獨立的文件。?

STM32CUBEIDE配置

?若需要打印浮點型,需要勾選下面的選項。?

串口重定向
在main.c中,添加頭文件,若不添加會出現(xiàn) identifier "FILE" is undefined報錯。
函數(shù)聲明和串口重定向:
最后
以上的代碼會在Q_qun里分享。Q_qun:615061293。 或者關(guān)注『記帖』,持續(xù)更新文章和學(xué)習(xí)資料!

代碼
定義變量,存放采集到的數(shù)據(jù)。
使能ADC傳輸。
主循環(huán)。
ADC回調(diào)函數(shù)。 DMA傳輸?shù)臅r候如果讀取內(nèi)存片段,會有仲裁器的問題,加了一句關(guān)閉DMA的語句HAL_ADC_Stop_DMA(&hadc1);
測試結(jié)果
輸入固定電壓進行測試。?

Normal下測試結(jié)果如下。?

若不試用關(guān)閉DMA的語句HAL_ADC_Stop_DMA(&hadc1); 會造成數(shù)據(jù)錯亂。?

Circular可以下可以一直進行采集,不需要HAL_ADC_Stop_DMA(&hadc1)都可。?
