www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

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

Ⅰ、概述

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

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

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

實(shí)例實(shí)驗(yàn)效果:

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

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

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

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

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

STM32F10x_ADC1單通道單次采集

關(guān)于本文的更多詳情請(qǐng)往下看。

Ⅱ、實(shí)例工程下載

筆者針對(duì)于初學(xué)者提供的例程都是去掉了許多不必要的功能,精簡(jiǎn)了官方的代碼,對(duì)初學(xué)者一看就明白,以簡(jiǎn)單明了的工程供大家學(xué)習(xí)。

筆者提供的實(shí)例工程都是在板子上經(jīng)過(guò)多次測(cè)試并沒(méi)有問(wèn)題才上傳至360云盤(pán),歡迎下載測(cè)試、參照學(xué)習(xí)。

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

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

https://yunpan.cn/cBCmnZ58mI3Pp訪問(wèn)密碼

STM32F1資料:

https://yunpan.cn/crBUdUGdYKam2 訪問(wèn)密碼 ca90

Ⅲ、關(guān)于ADC

關(guān)于ADC的介紹及功能,請(qǐng)下載參考手冊(cè)查看,筆者這里講述幾點(diǎn)重要的知識(shí):

1.12位分辨率

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

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

采集電壓 = Vref * ADC_DR / 4096;

Vref:參考電壓

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

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

2.轉(zhuǎn)換模式

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

單次:?jiǎn)瓮ǖ绬未无D(zhuǎn)換、多通道單次(分多次)轉(zhuǎn)換;

連續(xù):?jiǎn)瓮ǖ肋B續(xù)轉(zhuǎn)換、多通道連續(xù)(循環(huán))轉(zhuǎn)換;

B.雙ADC模式

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

3.觸發(fā)源

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

Ⅳ、本文實(shí)例描述

本文實(shí)例中關(guān)于ADC部分的配置及知識(shí)點(diǎn),針對(duì)初學(xué)者相對(duì)比較多、理解起來(lái)也相對(duì)比較難一點(diǎn)。

根據(jù)題目“ADC三通道逐次轉(zhuǎn)換(單次、單通道軟件觸發(fā))”我們不難理解其轉(zhuǎn)換的過(guò)程,但如何實(shí)現(xiàn)是一個(gè)難點(diǎ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)換一條通道。

以簡(jiǎn)單的示意圖來(lái)說(shuō)明其原理:

實(shí)例總共有三條通道通道1、通道2、通道3,分別對(duì)應(yīng)順序,是1、2、3。我們是通過(guò)軟件來(lái)定義的順序:

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ù)

也是按照上面來(lái)的。當(dāng)然,也可以更改順序。

Ⅴ、源代碼分析

筆者以F1標(biāo)準(zhǔn)外設(shè)庫(kù)(同時(shí)也建議初學(xué)者使用官方的標(biāo)準(zhǔn)外設(shè)庫(kù))為基礎(chǔ)建立的工程,主要以庫(kù)的方式來(lái)講述(若您的F1芯片與提供工程不一樣,可微信回復(fù)“修改型號(hào)”)。

下面將講述ADC重要的幾點(diǎn):

1.輸入引腳配置

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

引腳與通道的對(duì)應(yīng)關(guān)系請(qǐng)參看你使用芯片的數(shù)據(jù)手冊(cè)。

注意:

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

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

2. DMA配置

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

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

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

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

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

3.傳輸方向:DMA_DIR = DMA_DIR_PeripheralSRC;

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

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

4.傳輸長(zhǎng)度:DMA_BufferSize = ADC_BUF_SIZE;

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

5.外設(shè)地址增長(zhǎng):DMA_PeripheralInc = DMA_PeripheralInc_Disable;

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

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

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

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

7.外設(shè)數(shù)據(jù)長(zhǎng)度: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ù)長(zhǎng)度:DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;

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

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

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

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

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

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

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

注意:

為什么我們是使用DMA1_Channel1?

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

3. ADC配置

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

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

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

工作模式:ADC_Mode = ADC_Mode_Independent;

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

瀏覽模式:ADC_ScanConvMode = ENABLE;

主要是針對(duì)多條通道而言,也就是說(shuō)你是否有多條通道。

多通道:ENABLE;

單通道:DISABLE;

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

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

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

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

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

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

對(duì)其方式:ADC_DataAlign = ADC_DataAlign_Right;

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

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

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

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

B.設(shè)置規(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)換順序?yàn)榈?、通道2的轉(zhuǎn)換順序?yàn)榈?、通道3的轉(zhuǎn)換順序?yàn)榈?;

C.校驗(yàn):

ADC_ResetCalibration(ADC1); //校驗(yàn)復(fù)位

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

ADC_StartCalibration(ADC1); //開(kāi)始ADC1校準(zhǔn)

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

建議每次上電校正一次。

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

Ⅵ、說(shuō)明

關(guān)于STM32的ADC轉(zhuǎn)換這一塊功能確實(shí)交強(qiáng)大也相對(duì)來(lái)說(shuō)比較復(fù)雜,或許文中講述的還不夠清楚,若有不清楚的可以關(guān)注微信,在微信上留言。

關(guān)于筆者提供的軟件工程實(shí)例,可關(guān)注微信,在會(huì)話框回復(fù)“關(guān)于工程”,有關(guān)于工程結(jié)構(gòu)描述、型號(hào)修改等講述。

以上總結(jié)僅供參考,若有不對(duì)之處,敬請(qǐng)諒解。


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

LEDS提供了一種與傳統(tǒng)照明形式不相匹配的靈活性和效率組合,并且正在建筑和舞臺(tái)照明應(yīng)用中被采用,因?yàn)樗鼈儚男⌒桶b中發(fā)出高度可靠、持久的光。然而,每個(gè)照明應(yīng)用都是獨(dú)一無(wú)二的,因?yàn)槊總€(gè)營(yíng)銷部門(mén)都在不同的功能中找到價(jià)值。

關(guān)鍵字: 微控制器 三通道 LED驅(qū)動(dòng)器

系統(tǒng)設(shè)計(jì)師通常側(cè)重于為應(yīng)用選擇最合適的數(shù)據(jù)轉(zhuǎn)換器,在向數(shù)據(jù)轉(zhuǎn)換器提供輸入的時(shí)鐘發(fā)生器件的選擇上往往少有考慮。然而,如果不慎重考慮時(shí)鐘發(fā)生器、相位噪聲和抖動(dòng)性能,數(shù)據(jù)轉(zhuǎn)換器、動(dòng)態(tài)范圍和線性度性能可能受到嚴(yán)重的影響。

關(guān)鍵字: 時(shí)鐘發(fā)生器 adc

專注于引入新品并提供海量庫(kù)存的電子元器件分銷商貿(mào)澤電子 (Mouser Electronics) 即日起開(kāi)始備貨TI TLV915x運(yùn)算放大器和ADS7128 12位模數(shù)轉(zhuǎn)換器 (ADC)。

關(guān)鍵字: 貿(mào)澤 adc 模數(shù)轉(zhuǎn)換器

自然界產(chǎn)生的信號(hào),都是模擬信號(hào),比如我們說(shuō)話的聲音,看到的景色,感受到的溫度、濕度、壓力、流速、光、電、風(fēng)及個(gè)人的呼吸、血壓、體溫、心跳、體重、血糖,體脂等等。這些模擬信號(hào)都得最終放在電腦,手機(jī)等數(shù)字領(lǐng)域進(jìn)行處理,存儲(chǔ)或...

關(guān)鍵字: adc 模擬信號(hào)

為增進(jìn)大家對(duì)ADC的認(rèn)識(shí)和了解,本文將基于兩方面對(duì)ADC予以介紹:1.什么是并行ADC,并行ADC的基本原理是什么?2.流水線ADC與其它ADC有何區(qū)別。

關(guān)鍵字: adc 指數(shù) 流水線adc

ADC是電子電路中常用器件,大家對(duì)于ADC也較為熟悉。為增進(jìn)大家對(duì)ADC的了解,本文將對(duì)高速ADC以及流水線ADC結(jié)構(gòu)予以介紹。

關(guān)鍵字: adc 指數(shù) 流水線adc

ADC也即數(shù)模轉(zhuǎn)換器,在現(xiàn)實(shí)中,ADC具備重要作用。對(duì)于ADC,電子相關(guān)專業(yè)的朋友想必相當(dāng)熟悉。為增進(jìn)大家對(duì)ADC的認(rèn)識(shí),本文將對(duì)管道ADC以及其原理予以介紹。

關(guān)鍵字: adc 指數(shù) 管道adc

設(shè)計(jì)人員有各種模數(shù)轉(zhuǎn)換器(ADC)可以選擇,數(shù)字?jǐn)?shù)據(jù)輸出類型是選擇過(guò)程中需要考慮的一項(xiàng)重要參數(shù)。

關(guān)鍵字: 高速轉(zhuǎn)換器 數(shù)字?jǐn)?shù)據(jù) adc

ADC包括三個(gè)基本功能:抽樣、量化和編碼。如何實(shí)現(xiàn)這三個(gè)功能,就決定了ADC的形式和性能。

關(guān)鍵字: 模數(shù)轉(zhuǎn)換 adc

自然界產(chǎn)生的信號(hào),都是模擬信號(hào),比如我們說(shuō)話的聲音,看到的景色,感受到的溫度、濕度、壓力、流速、光、電、風(fēng)及個(gè)人的呼吸、血壓、體溫、心跳、體重、血糖,體脂等。這些模擬信號(hào)都得最終放在電腦,手機(jī)等數(shù)字領(lǐng)域進(jìn)行處理,存儲(chǔ)或者...

關(guān)鍵字: adc 電源設(shè)計(jì)
關(guān)閉