STM32CUBEMX開(kāi)發(fā)GD32F303(11)----ADC在DMA模式下掃描多個(gè)通道
概述
本章STM32CUBEMX配置STM32F103,并且在GD32F303中進(jìn)行開(kāi)發(fā),同時(shí)通過(guò)GD32303C_START開(kāi)發(fā)板內(nèi)進(jìn)行驗(yàn)證。 需要GD樣片的可以加Q_QUN申請(qǐng):615061293。
本章主要配置,雙ADC輪詢(xún)模式掃描多個(gè)通道,通過(guò)串口進(jìn)行打印。 查閱手冊(cè)可以得知,PA9、PA10為串口0的輸出和輸入口。?

視頻教學(xué)
https://www.bilibili.com/video/BV1hG41187Ah/

csdn課程
課程更加詳細(xì)。?https://download.csdn.net/course/detail/37152
樣品申請(qǐng)
https://www.wjx.top/vm/mB2IKus.aspx
ADC通道配置
ADC1IN0(PA0)IN1(PA3)IN4(PA4)
生成例程
這里準(zhǔn)備了GD32303C_START開(kāi)發(fā)板進(jìn)行驗(yàn)證。?

STM32CUBEMX配置

勾選中斷。?

ADC1配置。

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

生成獨(dú)立的文件。?

keil配置
microlib 進(jìn)行了高度優(yōu)化以使代碼變得很小。 它的功能比缺省 C 庫(kù)少,并且根本不具備某些 ISO C 特性。 某些庫(kù)函數(shù)的運(yùn)行速度也比較慢,如果要使用printf(),必須開(kāi)啟。?

代碼
在main.c中,添加頭文件,若不添加會(huì)出現(xiàn) identifier "FILE" is undefined報(bào)錯(cuò)。
函數(shù)聲明和串口重定向:
定義變量,存放采集到的數(shù)據(jù)。
使能ADC傳輸。
主循環(huán)。
ADC回調(diào)函數(shù)。 DMA傳輸?shù)臅r(shí)候如果讀取內(nèi)存片段,會(huì)有仲裁器的問(wèn)題,加了一句關(guān)閉DMA的語(yǔ)句HAL_ADC_Stop_DMA(&hadc1);
最后
以上的代碼會(huì)在Q_qun里分享。Q_qun:615061293。 或者關(guān)注『記帖』,持續(xù)更新文章和學(xué)習(xí)資料!

測(cè)試結(jié)果
輸入固定電壓進(jìn)行測(cè)試。

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

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

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