色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

STM32F10x_ ADC三通道DMA連續(xù)轉換(3通道、軟件單次觸發(fā))

黃工的嵌入式技術圈 ? 來源:黃工的嵌入式技術圈 ? 2020-03-25 13:57 ? 次閱讀

Ⅰ、概述

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

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

上一篇文章實例是使用間斷模式單次觸發(fā)單條通道采集,本文是使用DMA模式單次觸發(fā)三條通道采集。使用DMA傳輸的好處就是效率很高,我們直接讀取轉換的結果就是了,比如想做的示波器實例就是要求效率很高。

實例實驗效果:

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

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

上一篇文章內容:

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

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

STM32F10x_ADC1單通道單次采集

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

Ⅱ、實例工程下載

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

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

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

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

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

STM32F1資料:

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

Ⅲ、關于ADC

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

1.12位分辨率

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

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

采集電壓 = Vref * ADC_DR / 4096;

Vref:參考電壓

ADC_DR:讀取到ADC數據寄存器的值

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

2.轉換模式

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

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

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

B.雙ADC模式

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

3.觸發(fā)源

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

Ⅳ、本文實例描述

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

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

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

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

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

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

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


實例總共有三條通道通道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);

所以,我們轉換保存的順序:ADC_Buf[0]是通道1的數據、ADC_Buf[1]是通道2的數據、ADC_Buf[2]是通道3的數據

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

Ⅴ、源代碼分析

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

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

1.輸入引腳配置


該函數位于adc.c文件下面;

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


注意:

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

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

2.DMA配置


該函數位于adc.c文件下面;

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

我們使用ADC數據寄存器地址作為DMA的外設地址;

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

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

3.傳輸方向:DMA_DIR = DMA_DIR_PeripheralSRC;

DMA_DIR_PeripheralSRC:外設 -> 內存

DMA_DIR_PeripheralDST:內存 -> 外設

4.傳輸長度:DMA_BufferSize = ADC_BUF_SIZE;

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

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

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

6.內存地址增長:DMA_MemoryInc = DMA_MemoryInc_Enable;

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

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

7.外設數據長度:DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;

DMA_PeripheralDataSize_Byte:8位數據

DMA_PeripheralDataSize_HalfWord:16位數據

DMA_PeripheralDataSize_Word:32位數據

由于我們使用16位的數據,所以使用DMA_PeripheralDataSize_HalfWord;

8.內存數據長度:DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;

和“外設數據長度”類似;

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

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

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

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

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

內存?zhèn)鬏數絻却妫悍?/p>

注意:

為什么我們是使用DMA1_Channel1?

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

3.ADC配置


該函數位于adc.c文件下面;

這個函數是本文的重點,下面依次來講述源代碼內容的意思;

A.初始化基本參數

工作模式:ADC_Mode = ADC_Mode_Independent;

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

瀏覽模式:ADC_ScanConvMode = ENABLE;

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

多通道:ENABLE;

單通道:DISABLE;

轉換模式:ADC_ContinuousConvMode = DISABLE;

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

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

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

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

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

對其方式:ADC_DataAlign = ADC_DataAlign_Right;

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

左對其:高12為數據為有效位;

通道數:ADC_NbrOfChannel = 3;

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

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的轉換順序為第1、通道2的轉換順序為第2、通道3的轉換順序為第3;

C.校驗:

ADC_ResetCalibration(ADC1); //校驗復位

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

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

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

建議每次上電校正一次。

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

Ⅵ、說明

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

關于筆者提供的軟件工程實例,可閱讀文章最下面的“閱讀原文”,或在會話框回復“關于工程”,有關于工程結構描述、型號修改等講述。

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

Ⅶ、最后

更多精彩文章我將第一時間在微信公眾號里面分享,該文有什么疑問可留言。

本著免費分享的原則,方便大家手機學習知識,定期在微信平臺分享技術知識。如果你覺得分享的內容對你有用,又想了解更多相關的文章,請用微信搜索“EmbeddDeveloper” 或者掃描下面二維碼、關注,將有更多精彩內容等著你。

贊是一種鼓勵、分享是最好的支持!

原文標題:STM32F10x_ADC三通道DMA連續(xù)轉換(3通道、軟件單次觸發(fā))

文章出處:【微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • adc
    adc
    +關注

    關注

    99

    文章

    6567

    瀏覽量

    546720
  • STM32
    +關注

    關注

    2276

    文章

    10947

    瀏覽量

    359166
  • STM32F10x
    +關注

    關注

    1

    文章

    81

    瀏覽量

    20803
收藏 人收藏

    評論

    相關推薦

    ADS1278采集數據不對,偶爾出現(xiàn)后三通道的數據等于前三通道,請問這是什么原因?

    我用ADS1278,8通道,SPI模式,如果用CLK-11.0592Mhz的晶振,SCLK用5MHZ,數據采集正確,若果把晶振(CLK)提高到20M以上,SCK頻率提高,采集數據不對,偶爾出現(xiàn)后三通道的數據等于前三通道,請問這
    發(fā)表于 02-13 08:26

    ADS1247工作于3通道端模式,數據讀取異常的原因?怎么解決?

    ADC轉換結果。但MCU運行后第一讀取的結果總是0(MCU硬上電或者復位)。 2、循環(huán)依次讀取0、1、2個模擬輸入通道的結果,結果發(fā)現(xiàn)
    發(fā)表于 12-31 07:37

    ISO67xx三通道和四通道數字隔離器評估模塊

    電子發(fā)燒友網站提供《ISO67xx三通道和四通道數字隔離器評估模塊.pdf》資料免費下載
    發(fā)表于 11-25 14:19 ?0次下載
    ISO67xx<b class='flag-5'>三通道</b>和四<b class='flag-5'>通道</b>數字隔離器評估模塊

    MS5185T——三通道、低噪聲、低功耗 20 位∑-Δ ADC

    MS5185T 為適合高精度測量應用的低功耗、低噪聲、三通道差分輸入的 20bit 模數轉換器。提供方案和FAE支持,歡迎大家咨詢了解
    的頭像 發(fā)表于 11-14 10:35 ?591次閱讀
    MS5185T——<b class='flag-5'>三通道</b>、低噪聲、低功耗 20 位∑-Δ <b class='flag-5'>ADC</b>

    ISO71xxCC 4242VPK小封裝低功耗三通道和四通道數字隔離器數據表

    電子發(fā)燒友網站提供《ISO71xxCC 4242VPK小封裝低功耗三通道和四通道數字隔離器數據表.pdf》資料免費下載
    發(fā)表于 08-19 11:40 ?0次下載
    ISO71xxCC 4242VPK小封裝低功耗<b class='flag-5'>三通道</b>和四<b class='flag-5'>通道</b>數字隔離器數據表

    ADS126x精密5通道10通道40kSPS 24位Δ-Σ ADC數據表

    電子發(fā)燒友網站提供《ADS126x精密5通道10通道40kSPS 24位Δ-Σ ADC數據表.pdf》資料免費下載
    發(fā)表于 07-23 11:37 ?0次下載
    ADS126<b class='flag-5'>x</b>精密5<b class='flag-5'>通道</b>和<b class='flag-5'>10</b><b class='flag-5'>通道</b>40kSPS 24位Δ-Σ <b class='flag-5'>ADC</b>數據表

    AFEx32A3W三通道電壓輸出、電流輸出和ADC輸入智能AFE數據表

    電子發(fā)燒友網站提供《AFEx32A3W三通道電壓輸出、電流輸出和ADC輸入智能AFE數據表.pdf》資料免費下載
    發(fā)表于 07-12 09:43 ?0次下載
    AFEx32A<b class='flag-5'>3</b>W<b class='flag-5'>三通道</b>電壓輸出、電流輸出和<b class='flag-5'>ADC</b>輸入智能AFE數據表

    DAC53xAxW具有I2C或SPI的10三通道和雙通道電壓輸出和電流輸出智能DAC數據表

    電子發(fā)燒友網站提供《DAC53xAxW具有I2C或SPI的10三通道和雙通道電壓輸出和電流輸出智能DAC數據表.pdf》資料免費下載
    發(fā)表于 07-12 09:42 ?0次下載
    DAC53xAxW具有I2C或SPI的<b class='flag-5'>10</b>位<b class='flag-5'>三通道</b>和雙<b class='flag-5'>通道</b>電壓輸出和電流輸出智能DAC數據表

    TPD3F303三通道集成型EMI濾波器數據表

    電子發(fā)燒友網站提供《TPD3F303三通道集成型EMI濾波器數據表.pdf》資料免費下載
    發(fā)表于 07-10 09:48 ?0次下載
    TPD<b class='flag-5'>3F</b>303<b class='flag-5'>三通道</b>集成型EMI濾波器數據表

    LMH6733電源、1.0 GHz、三通道運算放大器數據表

    電子發(fā)燒友網站提供《LMH6733電源、1.0 GHz、三通道運算放大器數據表.pdf》資料免費下載
    發(fā)表于 06-17 10:29 ?0次下載
    LMH6733<b class='flag-5'>單</b>電源、1.0 GHz、<b class='flag-5'>三通道</b>運算放大器數據表

    LMH6682/6683 190MHz電源、雙通道三通道運算放大器數據表

    電子發(fā)燒友網站提供《LMH6682/6683 190MHz電源、雙通道三通道運算放大器數據表.pdf》資料免費下載
    發(fā)表于 06-07 09:18 ?0次下載
    LMH6682/6683 190MHz<b class='flag-5'>單</b>電源、雙<b class='flag-5'>通道</b>和<b class='flag-5'>三通道</b>運算放大器數據表

    我有8通道ADC,板子只支持5通道DMA怎么解決?

    我有8通道ADC,板子只支持5通道DMA,怎么辦?
    發(fā)表于 05-15 07:52

    STM8L151 ADC采用DMA通道連續(xù)采集遇到通道數據滾動怎么解決?

    STM8L151 ADC 采用DMA8通道連續(xù)采集,通過ST_LINK仿真發(fā)現(xiàn):通道數據滾動問題,比如第一
    發(fā)表于 04-30 08:22

    汽車類四通道/三通道/雙通道/單通道窗口或標準電壓監(jiān)控器TPS3704-Q1數據表

    電子發(fā)燒友網站提供《汽車類四通道/三通道/雙通道/單通道窗口或標準電壓監(jiān)控器TPS3704-Q1數據表.pdf》資料免費下載
    發(fā)表于 03-21 10:06 ?0次下載
    汽車類四<b class='flag-5'>通道</b>/<b class='flag-5'>三通道</b>/雙<b class='flag-5'>通道</b>/單<b class='flag-5'>通道</b>窗口或標準電壓監(jiān)控器TPS3704-Q1數據表

    通道/三通道/雙通道窗口或標準電壓監(jiān)控器TPS3704x數據表

    電子發(fā)燒友網站提供《四通道/三通道/雙通道窗口或標準電壓監(jiān)控器TPS3704x數據表.pdf》資料免費下載
    發(fā)表于 03-14 09:41 ?0次下載
    四<b class='flag-5'>通道</b>/<b class='flag-5'>三通道</b>/雙<b class='flag-5'>通道</b>窗口或標準電壓監(jiān)控器TPS3704<b class='flag-5'>x</b>數據表
    主站蜘蛛池模板: 午夜天堂AV久久久噜噜噜 | 在线视频av大全色久久 | 野草观看免费高清视频 | 国产亚洲精品首页在线播放 | 寂寞骚妇女被后入式抽插 | 免费国产精品视频 | 暖暖视频在线高清播放 | 一攻多受高h大总攻 | 俄罗斯人xxx | 99视频精品国产在线视频 | 欧美阿v在线天堂 | 久久ZYZ资源站无码中文动漫 | 国产传媒麻豆剧精品AV | 最近高清中文字幕无吗免费看 | 2023国产精品一卡2卡三卡4卡 | 成人午夜精品无码区久久漫画日本 | ccc36色小姐电影 | 视频专区亚洲欧美日韩 | 亚洲精品乱码久久久久久v 亚洲精品乱码电影在线观看 | 女攻男受高h全文肉肉 | 欧美日韩另类在线观看视频 | 好男人免费观看在线高清WWW | 国产小视频免费看 | 丝袜情趣在线资源二区 | 恋夜影院支持安卓视频美女 | 亚洲精品久久AV无码蜜桃 | 亚洲精品自在在线观看 | 亚洲无人区码二码三码区别图 | 双腿被绑成M型调教PLAY照片 | 中文字幕亚洲无限码 | 日韩欧美精品有码在线播放 | 朋友的娇妻好爽好烫嗯 | 国产婷婷色综合AV蜜臀AV | 免费一级片网站 | 无码人妻99久久密AV | 97国产精品视频在线观看 | 冠希和阿娇13分钟在线视频 | 亚洲精品久久久久69影院 | 办公室激情在线观看 | 国内免费视频成人精品 | 一个人HD在线观看免费高清视频 |