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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32的ADC1采集多條通道 可以不使用DMA功能嗎?

黃工的嵌入式技術(shù)圈 ? 來(lái)源:黃工的嵌入式技術(shù)圈 ? 2020-03-14 14:46 ? 次閱讀

類(lèi)似的問(wèn)題

為什么我采集5條通道的電壓,而采集到的值卻都是第一條的呢?

我什么時(shí)候需要使用DMA功能?

關(guān)于ADC的一些知識(shí)

STM32ADC是一種12位逐次逼近型的模擬數(shù)字轉(zhuǎn)換器。它有多達(dá)18條通道,可測(cè)量16個(gè)外部和2個(gè)內(nèi)部信號(hào)源。

各通道的A/D轉(zhuǎn)換可以單次、連續(xù)、掃描或間斷模式執(zhí)行。 ADC的結(jié)果可以左對(duì)齊或右對(duì)齊方式存儲(chǔ)在16位數(shù)據(jù)寄存器ADC_DR中。

其實(shí)就是說(shuō),一個(gè)ADC,可檢測(cè)18條通道,我們外接的只有16條。而結(jié)果只保存在一個(gè)寄存器ADC_DR中。

要使用ADC1采集多條通道,那么就需要對(duì)采集的通道進(jìn)行分組排序。STM32的ADC可以把轉(zhuǎn)換組織成兩組:規(guī)則組和注入組。

假如我們采集的通道按照如下順序完成轉(zhuǎn)換:通道3、通道8、通道2,則需要軟件對(duì)其配置:

ADC_RegularChannelConfig(ADC1,ADC_Channel_3,1, ADC_SampleTime_55Cycles5);

ADC_RegularChannelConfig(ADC1,ADC_Channel_8,2, ADC_SampleTime_55Cycles5);

ADC_RegularChannelConfig(ADC1,ADC_Channel_2,3, ADC_SampleTime_55Cycles5);

使用DMA方式

從上面的描述中知道,ADC轉(zhuǎn)換的結(jié)果只能保存在ADC_DR中。因?yàn)橐?guī)則通道轉(zhuǎn)換的值儲(chǔ)存在一個(gè)僅有的數(shù)據(jù)寄存器中,所以當(dāng)轉(zhuǎn)換多個(gè)規(guī)則通道時(shí)需要使用DMA,這可以避免丟失已經(jīng)存儲(chǔ)在ADC_DR寄存器中的數(shù)據(jù)。

只有在規(guī)則通道的轉(zhuǎn)換結(jié)束時(shí)才產(chǎn)生DMA請(qǐng)求,并將轉(zhuǎn)換的數(shù)據(jù)從ADC_DR寄存器傳輸?shù)接脩?hù)指定的目的地址。

也就是說(shuō),如不使用DMA,我們采用規(guī)則轉(zhuǎn)換,中間有些存儲(chǔ)在ADC_DR寄存器中的數(shù)據(jù)可能被(下一條通道采集的數(shù)據(jù))覆蓋掉。這就是有人說(shuō)的“采集到的數(shù)據(jù)不對(duì)應(yīng)其通道的值”的原因。

同理,需要這種規(guī)則轉(zhuǎn)換多條通道,就需要使用DMA功能才能完成。

不使用DMA方式

看了上面使用DMA的情況,相信都應(yīng)該明白:如果使用規(guī)則轉(zhuǎn)換,就最好使用DMA功能。

不使用DMA方式,就需要使用非常奇葩的處理方式:?jiǎn)瓮ǖ绬未无D(zhuǎn)換方式,需要切換通道,不然就會(huì)像上面說(shuō)的,采集不到對(duì)應(yīng)通道的數(shù)據(jù)。

STM32的ADC功能非常強(qiáng)大,感興趣的朋友可深入理解一下。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • STM32
    +關(guān)注

    關(guān)注

    2258

    文章

    10828

    瀏覽量

    352499
  • dma
    dma
    +關(guān)注

    關(guān)注

    3

    文章

    552

    瀏覽量

    99937
  • ADC1
    +關(guān)注

    關(guān)注

    0

    文章

    3

    瀏覽量

    8312
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM32F103VCT6 ADCDMA的速度為什么不一致?

    最近調(diào)試STM32F103VCT6,發(fā)現(xiàn)一個(gè)很奇怪的問(wèn)題?,F(xiàn)在采用ADC1ADC3,同時(shí)采集兩路波形,采集速率都配到了1.5時(shí)鐘,大約1.
    發(fā)表于 05-16 07:12

    STM32F334 ADC1ADC2同步采樣,有時(shí)會(huì)出現(xiàn)采ADC1ADC2所有的通道采集數(shù)據(jù)都一樣的情況為什么?

    STM32F334 ADC1ADC2同步采樣,有時(shí)會(huì)出現(xiàn)采ADC1ADC2所有的通道
    發(fā)表于 05-15 08:15

    STM32F103如何讓ADC1每個(gè)通道轉(zhuǎn)換64次后換下一個(gè)通道在轉(zhuǎn)換64次?

    (64次)通過(guò)DMA傳輸?shù)綌?shù)組。 然后轉(zhuǎn)到ADC1的第二個(gè)通道在采樣一個(gè)周期的交流電壓信號(hào)(64次)通過(guò)DMA傳輸?shù)綌?shù)組。 往后以此類(lèi)推。 不知哪位大神能幫忙給個(gè)思路,這個(gè)問(wèn)題我困
    發(fā)表于 05-06 08:43

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

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

    stm32 adc1和串口2同時(shí)使用DMA出錯(cuò)的原因?

    stm32f103r8t6adc1使用dma方式采集數(shù)據(jù)串口2使用dma方式收發(fā)串口發(fā)送沒(méi)有問(wèn)題,串口接收只要adc1使用
    發(fā)表于 04-22 08:08

    調(diào)試STM32adc通道DMA傳輸時(shí),DMA傳輸后就出現(xiàn)值變了的原因?

    這次在調(diào)試STM32adc通道DMA傳輸時(shí)出現(xiàn)了一個(gè)很大的問(wèn)題。 直接去讀取ADC的DR是沒(méi)問(wèn)題的,但是過(guò)來(lái)
    發(fā)表于 04-22 06:03

    stm32 ADC定時(shí)喚醒采集數(shù)據(jù),工作一段時(shí)間adc值不變了是為什么?

    */ ADC_InitStructure.ADC_NbrOfChannel = 2;/*設(shè)定要轉(zhuǎn)換的 AD 通道數(shù)目*/ ADC_Init(ADC1,
    發(fā)表于 04-11 07:22

    請(qǐng)問(wèn)STM32G4的ADC1,ADC2,ADC3,ADC4可以同時(shí)工作在獨(dú)立模式嗎?

    咨詢(xún)下各位: STM32G4的ADC1,ADC2,ADC3,ADC4可以同時(shí)工作在獨(dú)立模式嗎?每
    發(fā)表于 04-10 06:01

    stm32F103中ADC通道轉(zhuǎn)換使用DMA,串口調(diào)試助手沒(méi)有數(shù)據(jù)傳輸?shù)脑颍?/a>

    stm32F103中ADC通道轉(zhuǎn)換使用DMA,串口調(diào)試助手沒(méi)有數(shù)據(jù)傳輸,大佬可以幫我看看我的代碼有什么問(wèn)題嗎? main.c #inclu
    發(fā)表于 04-08 07:17

    stm32cubemx建立多通道ADC+DMA,想使用DMA中斷要怎么實(shí)現(xiàn)?

    各位大神: 我在用stm32 cubemx建立ADC+DMA通道,想使用DMA中斷,百度了個(gè)設(shè)置在DMA里增加
    發(fā)表于 04-02 07:14

    STM32H750VBT6 ADC1,ADC2,ADC3,加DMA為什么ADC3回調(diào)函數(shù)不能正常工作?

    STM32H750VBT6ADC1,ADC2,ADC3,加DMA為什么ADC3回調(diào)函數(shù)不能正常工作 AD
    發(fā)表于 03-29 07:23

    關(guān)于STM32G474 ADC通道數(shù)據(jù)采集遇到的問(wèn)題求解

    STM32G474 ADC時(shí)鐘:168MHz/4=42MHz 分辨率 12bit 單端輸入 ADC1 采集6通道數(shù)據(jù) 采樣時(shí)間6.5cyc
    發(fā)表于 03-14 08:11

    STM32L496VG多通道ADC采樣有串?dāng)_的原因?

    STM32L496VGADC1,ADC2,ADC3通道同時(shí)采集ADC1,
    發(fā)表于 03-13 08:03

    使用STM32ADC 4通道電流采樣,采樣結(jié)果會(huì)有差異怎么解決?

    使用STM32ADC電流采樣,4通道,發(fā)現(xiàn)當(dāng)只有一個(gè)通道輸入電流和四個(gè)通道都有電流輸入的時(shí)候,采樣結(jié)果會(huì)有差異。比如
    發(fā)表于 03-07 06:50

    請(qǐng)問(wèn)ADC0的通道ADC1通道可以是同一個(gè)IO口嗎?

    ADC0的通道ADC1通道可以是同一個(gè)IO口嗎?
    發(fā)表于 10-31 06:43