當前位置:首頁 > 單片機 > 單片機
[導讀]Ⅰ、概述上一篇文章講述的內(nèi)容是:三通道逐次轉(zhuǎn)換(單次、單通道軟件觸發(fā)),也就是說3條通道要三次軟件觸發(fā)才能完成轉(zhuǎn)換,而且是通過軟件讀取轉(zhuǎn)換數(shù)值。本文講述三通道DMA連續(xù)轉(zhuǎn)換(3通道、軟件單次觸發(fā)),也就是說3條通

Ⅰ、概述

上一篇文章講述的內(nèi)容是:三通道逐次轉(zhuǎn)換(單次、單通道軟件觸發(fā)),也就是說3條通道要三次軟件觸發(fā)才能完成轉(zhuǎn)換,而且是通過軟件讀取轉(zhuǎn)換數(shù)值。

本文講述三通道DMA連續(xù)轉(zhuǎn)換(3通道、軟件單次觸發(fā)),也就是說3條通道只需要一次軟件觸發(fā)就能完成轉(zhuǎn)換,使用DMA保存在數(shù)值。

上一篇文章實例是使用間斷模式單次觸發(fā)單條通道采集,本文是使用DMA模式單次觸發(fā)三條通道采集。使用DMA傳輸?shù)暮锰幘褪切屎芨?,我們直接讀取轉(zhuǎn)換的結果就是了,比如想做的示波器實例就是要求效率很高。

實例實驗效果:

本文的實驗效果和上一篇文章一樣,只是實現(xiàn)的方式不一樣

通道1接地、通道2接1.5V電源、通道3接VCC

上一篇文章內(nèi)容:

ADC三通道逐次轉(zhuǎn)換(單次、單通道軟件觸發(fā))

本文講述的知識點相對較多,若初次學習STM32的ADC轉(zhuǎn)換功能,可以參考我另外一篇相對簡單一點的文章:

STM32F10x_ADC1單通道單次采集

關于本文的更多詳情請往下看。

Ⅱ、實例工程下載

筆者針對于初學者提供的例程都是去掉了許多不必要的功能,精簡了官方的代碼,對初學者一看就明白,以簡單明了的工程供大家學習。

筆者提供的實例工程都是在板子上經(jīng)過多次測試并沒有問題才上傳至360云盤,歡迎下載測試、參照學習。

提供下載的軟件工程是基于Keil(MDK-ARM) V5版本、STM32F103ZE芯片,但F1其他型號也適用(適用F1其他型號: 關注微信,回復“修改型號”)。

STM32F10x_ADC三通道DMA連續(xù)轉(zhuǎn)換(3通道、軟件單次觸發(fā))實例源代碼工程:

https://yunpan.cn/cBCmnZ58mI3Pp訪問密碼

STM32F1資料:

https://yunpan.cn/crBUdUGdYKam2 訪問密碼 ca90

Ⅲ、關于ADC

關于ADC的介紹及功能,請下載參考手冊查看,筆者這里講述幾點重要的知識:

1.12位分辨率

在STM32所有系列芯片中只有少部分是16位的,如:F373芯片。

12位分辨率意味著我們采集電壓的精度可以達到:Vref /4096。

采集電壓 = Vref * ADC_DR / 4096;

Vref:參考電壓

ADC_DR:讀取到ADC數(shù)據(jù)寄存器的值

由于寄存器是32位的,在配置的時候分左對齊和右對齊,一般我們使用右對齊,也就是對低12位數(shù)據(jù)為有效數(shù)據(jù)。

2.轉(zhuǎn)換模式

A.單次和連續(xù)轉(zhuǎn)換

單次:單通道單次轉(zhuǎn)換、多通道單次(分多次)轉(zhuǎn)換;

連續(xù):單通道連續(xù)轉(zhuǎn)換、多通道連續(xù)(循環(huán))轉(zhuǎn)換;

B.雙ADC模式

也就是使用到了兩個ADC,比如:ADC1和ADC2同時使用也就是雙ADC模式。在該模式下可以配置為如下一些模式:同步規(guī)則模式、同步注入模式、獨立模式等。

3.觸發(fā)源

觸發(fā)源就是觸發(fā)ADC轉(zhuǎn)換的來源,有外部中斷線、定時器、軟件等觸發(fā)源。我們初學者常用軟件觸發(fā),也就是需要轉(zhuǎn)換一次,我們軟件啟動一次(本文提供實例也是軟件觸發(fā))。

Ⅳ、本文實例描述

本文實例中關于ADC部分的配置及知識點,針對初學者相對比較多、理解起來也相對比較難一點。

根據(jù)題目“ADC三通道逐次轉(zhuǎn)換(單次、單通道軟件觸發(fā))”我們不難理解其轉(zhuǎn)換的過程,但如何實現(xiàn)是一個難點。

1、三通道:我們定義了3條通道ADC1的ADC_Channel_1、ADC_Channel_2、ADC_Channel_3.

2.逐次轉(zhuǎn)換:我們使用的是間斷模式(規(guī)則組),也就是在規(guī)則組中定義了觸發(fā)轉(zhuǎn)換的序列。

3.單次:我們是每觸發(fā)一次轉(zhuǎn)換一次。

4.單通道:每次觸發(fā)只轉(zhuǎn)換一條通道。

以簡單的示意圖來說明其原理:

實例總共有三條通道通道1、通道2、通道3,分別對應順序,是1、2、3。我們是通過軟件來定義的順序:

ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_55Cycles5);

ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 2, ADC_SampleTime_55Cycles5);

ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 3, ADC_SampleTime_55Cycles5);

所以,我們轉(zhuǎn)換保存的順序:ADC_Buf[0]是通道1的數(shù)據(jù)、ADC_Buf[1]是通道2的數(shù)據(jù)、ADC_Buf[2]是通道3的數(shù)據(jù)

也是按照上面來的。當然,也可以更改順序。

Ⅴ、源代碼分析

筆者以F1標準外設庫(同時也建議初學者使用官方的標準外設庫)為基礎建立的工程,主要以庫的方式來講述(若您的F1芯片與提供工程不一樣,可微信回復“修改型號”)。

下面將講述ADC重要的幾點:

1.輸入引腳配置

該函數(shù)位于adc.c文件下面;

引腳與通道的對應關系請參看你使用芯片的數(shù)據(jù)手冊。

注意:

為什么是“ADC123_IN1”? 而不是ADC1_IN1,或者ADC2_IN1?

原因是ADC1、ADC2和ADC3共用這些引腳。

2. DMA配置

該函數(shù)位于adc.c文件下面;

1.外設地址:DMA_PeripheralBaseAddr = (uint32_t)(&(ADC1->DR));

我們使用ADC數(shù)據(jù)寄存器地址作為DMA的外設地址;

2.內(nèi)存地址:DMA_MemoryBaseAddr = (uint32_t)ADC_Buf;

這里就是我們定義保存采集值數(shù)組的地址;

3.傳輸方向:DMA_DIR = DMA_DIR_PeripheralSRC;

DMA_DIR_PeripheralSRC:外設 -> 內(nèi)存

DMA_DIR_PeripheralDST:內(nèi)存 -> 外設

4.傳輸長度:DMA_BufferSize = ADC_BUF_SIZE;

ADC_BUF_SIZE是一個宏定義,等于3; 也就是說我們需要轉(zhuǎn)換并保存3組數(shù)據(jù)(3條通道的值)。

5.外設地址增長:DMA_PeripheralInc = DMA_PeripheralInc_Disable;

由于外設的地址都是ADC數(shù)據(jù)寄存器,沒有改變,所以不需要增長地址;

6.內(nèi)存地址增長:DMA_MemoryInc = DMA_MemoryInc_Enable;

由于我們定義了一個數(shù)字,里面需要保存3個數(shù)值,所以需要增長;

【根據(jù)傳輸長度和循環(huán)模式,可以循環(huán)傳輸數(shù)據(jù)】

7.外設數(shù)據(jù)長度:DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;

DMA_PeripheralDataSize_Byte:8位數(shù)據(jù)

DMA_PeripheralDataSize_HalfWord:16位數(shù)據(jù)

DMA_PeripheralDataSize_Word:32位數(shù)據(jù)

由于我們使用16位的數(shù)據(jù),所以使用DMA_PeripheralDataSize_HalfWord;

8.內(nèi)存數(shù)據(jù)長度:DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;

和“外設數(shù)據(jù)長度”類似;

9.循環(huán)模式:DMA_Mode = DMA_Mode_Circular;

這里說的循環(huán)就是我們循環(huán)采集3組數(shù)據(jù)(更加傳輸長度來確定);

10.優(yōu)先級:DMA_Priority = DMA_Priority_VeryHigh;

優(yōu)先級應該都明白他的意思,我們只使用一組DMA這個優(yōu)先級可高可低;

11.優(yōu)先級:DMA_M2M = DMA_M2M_Disable;

內(nèi)存?zhèn)鬏數(shù)絻?nèi)存:否

注意:

為什么我們是使用DMA1_Channel1?

我們使用DMA通道是有要求的,需按照手冊提供的規(guī)則來(如下圖);請參看手冊:

3. ADC配置

該函數(shù)位于adc.c文件下面;

這個函數(shù)是本文的重點,下面依次來講述源代碼內(nèi)容的意思;

A.初始化基本參數(shù):

工作模式:ADC_Mode = ADC_Mode_Independent;

總共有10種,主要都是針對雙ADC下使用。針對初學者這里不多描述,感興趣的朋友可以先自行研究一下各個模式的使用。

瀏覽模式:ADC_ScanConvMode = ENABLE;

主要是針對多條通道而言,也就是說你是否有多條通道。

多通道:ENABLE;

單通道:DISABLE;

轉(zhuǎn)換模式:ADC_ContinuousConvMode = DISABLE;

這里是配置是否需要連續(xù)轉(zhuǎn)換。

連續(xù)轉(zhuǎn)換ENABLE:也就是只需要啟動(觸發(fā))轉(zhuǎn)換一次,后面就不用再次啟動(觸發(fā))就可以連續(xù)工作了。

單次轉(zhuǎn)換DISABLE:也就是根據(jù)一次轉(zhuǎn)換完后需要再次啟動(觸發(fā))才能工作。

觸發(fā)方式:ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;

觸發(fā)方式也就是使用什么方法觸發(fā)ADC轉(zhuǎn)換。喲定時器、外部觸發(fā)、軟件觸發(fā),一般常用軟件觸發(fā)。這里有很多種觸發(fā)方式,詳情可以參考其參數(shù)。

對其方式:ADC_DataAlign = ADC_DataAlign_Right;

右對其:低12位數(shù)據(jù)為有效位(常用);

左對其:高12為數(shù)據(jù)為有效位;

通道數(shù):ADC_NbrOfChannel = 3;

這個參數(shù)比較簡單,我們定義工作的通道數(shù)量。

B.設置規(guī)則組通道:

ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_55Cycles5);

ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 2, ADC_SampleTime_55Cycles5);

ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 3, ADC_SampleTime_55Cycles5);

我們定義通道1的轉(zhuǎn)換順序為第1、通道2的轉(zhuǎn)換順序為第2、通道3的轉(zhuǎn)換順序為第3;

C.校驗:

ADC_ResetCalibration(ADC1); //校驗復位

while(ADC_GetResetCalibrationStatus(ADC1)); //等待復位完成

ADC_StartCalibration(ADC1); //開始ADC1校準

while(ADC_GetCalibrationStatus(ADC1)); //等待校驗完成

建議每次上電校正一次。

ADC有一個內(nèi)置自校準模式。校準可大幅減小因內(nèi)部電容器組的變化而造成的準精度誤差。在校準期間,在每個電容器上都會計算出一個誤差修正碼(數(shù)字值),這個碼用于消除在隨后的轉(zhuǎn)換中每個電容器上產(chǎn)生的誤差。

Ⅵ、說明

關于STM32的ADC轉(zhuǎn)換這一塊功能確實交強大也相對來說比較復雜,或許文中講述的還不夠清楚,若有不清楚的可以關注微信,在微信上留言。

關于筆者提供的軟件工程實例,可關注微信,在會話框回復“關于工程”,有關于工程結構描述、型號修改等講述。

以上總結僅供參考,若有不對之處,敬請諒解。


本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉