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)不再提示

STM32F1的ADC2如何使用DMA功能 USART過(guò)載錯(cuò)誤Overrun error

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

ADC2如何使用DMA功能

上一篇文章說(shuō)了關(guān)于ADC使用DMA的功能,單ADC(只使用ADC1,或者只使用ADC2)采集多條通道,可以使用規(guī)則多利用DMA功能實(shí)現(xiàn)。

但是,只有ADC1和ADC3擁有DMA功能,而ADC2沒(méi)有DMA功能,如何實(shí)現(xiàn)使用DMA功能采集數(shù)據(jù)呢?

這個(gè)問(wèn)題大家不必?fù)?dān)心,ST這么大的公司,這種基本的功能,肯定是有辦法解決的。

其實(shí)這問(wèn)題在參考手冊(cè)中都能找到答案。答案簡(jiǎn)單概括就是:使用雙ADC模式,由ADC2轉(zhuǎn)化的數(shù)據(jù)可以通過(guò)雙ADC模式,利用ADC1的DMA功能傳輸。

在有2個(gè)或以上ADC模塊的產(chǎn)品中,可以使用雙ADC模式。在雙ADC模式里,根據(jù)ADC1_CR1寄存器中UALMOD[2:0]位所選的模式,轉(zhuǎn)換的啟動(dòng)可以是ADC1主和ADC2從的交替觸發(fā)或同步觸發(fā)。

STM21F1的ADC2轉(zhuǎn)換的結(jié)果也是保存在A(yíng)DC_DR寄存器中,這種是在雙模式下(像F4還有三重模式)。

假如上一篇文章的采集通道換成如下順序:ADC2的通道3、ADC1的通道8、ADC2的通道2,則需要軟件配置:

ADC_RegularChannelConfig(ADC2,ADC_Channel_3, 1, ADC_SampleTime_55Cycles5);

ADC_RegularChannelConfig(ADC1,ADC_Channel_8, 2, ADC_SampleTime_55Cycles5);

ADC_RegularChannelConfig(ADC2,ADC_Channel_2, 3, ADC_SampleTime_55Cycles5);

說(shuō)到這里,相信都應(yīng)該明白了吧。

USART過(guò)載錯(cuò)誤Overrun error

這一節(jié)內(nèi)容,也有點(diǎn)算是網(wǎng)友問(wèn)的問(wèn)題,只是問(wèn)的方式不同,也算是一個(gè)問(wèn)題點(diǎn)吧。

這個(gè)問(wèn)題的來(lái)源就是:頻繁的接收UART數(shù)據(jù),沒(méi)有及時(shí)的讀取USART_DR中的數(shù)據(jù),使其會(huì)發(fā)生過(guò)載錯(cuò)誤。

這種情況一般是發(fā)生在我們不使用中斷接收UART數(shù)據(jù),在某些RTOS中,我們使用getchar來(lái)讀取數(shù)據(jù),但由于有更高優(yōu)先級(jí)任務(wù)打斷了接收的任務(wù),而這個(gè)時(shí)候UART又有許多數(shù)據(jù)發(fā)過(guò)來(lái),這時(shí),過(guò)載錯(cuò)誤就會(huì)發(fā)生了。

而過(guò)載錯(cuò)誤就會(huì)導(dǎo)致接收的數(shù)據(jù)異常,這個(gè)時(shí)候,解決的辦法很簡(jiǎn)單:通過(guò)讀取USART_SR,再讀取USART_DR即可清除。

這個(gè)時(shí)候也可以使用過(guò)載錯(cuò)誤中斷,但是,配置的時(shí)候需要注意軟件的配置:USART_ITConfig(USART1,USART_IT_ERR, ENABLE);而有的人配置成:USART_IT_ORE.

USART_IT_ORE這個(gè)確實(shí)存在,但不能使用在這里,USART_ITConfig這個(gè)函數(shù)明確要求了配置的參數(shù)。這個(gè)用于處理中斷判斷標(biāo)志:if(USART_GetITStatus(USART1,USART_IT_ORE) != RESET)

好了,今天就講述上面兩點(diǎn),希望對(duì)你們有所幫助。

聲明:本文內(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)投訴
  • dma
    dma
    +關(guān)注

    關(guān)注

    3

    文章

    556

    瀏覽量

    100339
  • USART
    +關(guān)注

    關(guān)注

    1

    文章

    195

    瀏覽量

    30760
  • STM32F10
    +關(guān)注

    關(guān)注

    0

    文章

    45

    瀏覽量

    15603
  • ADC2
    +關(guān)注

    關(guān)注

    0

    文章

    2

    瀏覽量

    1465
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM32CUBEMX(3)--ADC通過(guò)DMA方式采樣,USART打印

    使用的產(chǎn)品型號(hào)的不同,有一個(gè)或兩個(gè)DMA模塊。 STM32F0XX DMA控制器總共有5個(gè)通道用于DMA1,每個(gè)通道都專(zhuān)門(mén)管理來(lái)自一個(gè)或多個(gè)外設(shè)的存儲(chǔ)器訪(fǎng)問(wèn)請(qǐng)求。它具有一個(gè)仲裁器,用于
    發(fā)表于 09-04 14:08

    自制一款兼容STM32F1/F4芯片的飛控板

    自己制作的一款兼容STM32F1/F4芯片的飛控板。
    發(fā)表于 07-04 14:07 ?0次下載

    esp32s2使用WIFI功能 ,ADC2模塊功能會(huì)有沖突,為什么?

    is successful. 如果是我使用WIFI功能 ,ADC2 模塊功能會(huì)有沖突 ,還是ADC2相關(guān)引腳也不能做普通IO口用,或者 DAC 模塊也不能用?
    發(fā)表于 06-18 06:23

    如何在STM32F439 DMA流中斷中區(qū)分是哪個(gè)通道產(chǎn)生的中斷?

    STM32F439有兩個(gè)DMA控制器DMA1DMA2,每個(gè)控制器有8個(gè)流,每個(gè)流有8個(gè)通道,我做的是采用串口1DMA中斷接收數(shù)據(jù),
    發(fā)表于 05-17 08:20

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

    STM32F334 ADC1ADC2同步采樣,有時(shí)會(huì)出現(xiàn)采ADC1ADC2所有的通道采集數(shù)據(jù)都一樣,給人直觀(guān)的感覺(jué)像是
    發(fā)表于 05-15 08:15

    stm32f302和stm32f103的ADC區(qū)別是什么?

    請(qǐng)問(wèn)stm32f302和stm32f103的ADC除了stm32f103有2個(gè)ADC
    發(fā)表于 05-15 08:03

    STM32F1內(nèi)部ADC的DUAL MODE的使用問(wèn)題求解

    我想利用STM32F1內(nèi)部的ADC采集四路電壓值,因?yàn)橐笸瑫r(shí)采集,所以我使用了ADC的DUAL MODE,可是由于始終未能讀明白芯片手冊(cè)!ADC的設(shè)置與
    發(fā)表于 05-09 06:51

    STM32F302 TIM15觸發(fā)ADC規(guī)則掃描DMA連續(xù)傳輸ADC數(shù)據(jù)失敗的原因?

    在測(cè)試STM32F302RB的ADC功能的時(shí)候遇到了問(wèn)題:用TIM15 更新事件作為 TRGO源 觸發(fā)ADC2轉(zhuǎn)換,DMA2_Channel_1
    發(fā)表于 05-06 06:20

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

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

    STM32F303xC系列ADC校準(zhǔn)一直不通過(guò)的原因?

    _DMAMode_Circular); /* Enable the ADC DMA */ ADC_DMACmd(ADC1, ENABLE); /* Enable
    發(fā)表于 04-11 08:26

    STM32 ADC+DMA多通道轉(zhuǎn)換數(shù)據(jù)錯(cuò)位的原因?怎么解決?

    ]?,即為ADC采樣的值。 2、?HAL庫(kù)配置:? ?掃描模式使能,連續(xù)轉(zhuǎn)換模式使能,DMA連續(xù)轉(zhuǎn)換請(qǐng)求使能 3、DMA2_CH1中斷不使能(目的為了減少進(jìn)出中斷時(shí)間)? 4、whi
    發(fā)表于 04-10 07:24

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

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

    STM32 USART中斷與ADC DMA中斷沖突造成硬件錯(cuò)誤的原因?

    使用STM32USART與主機(jī)設(shè)備通訊,主機(jī)設(shè)備每隔50ms會(huì)與STM32USART通訊一次,使用ADC
    發(fā)表于 04-02 06:26

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

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

    stm32接收ad7903鏈模式、無(wú)忙指示時(shí)ADC1ADC2連接順序問(wèn)題求解

    使用stm32接收AD7903鏈模式、無(wú)忙指示器采集到的數(shù)據(jù),數(shù)據(jù)手冊(cè)中鏈模式的結(jié)構(gòu)如下,ADC1的輸入接地,輸出接入ADC2的輸入,ADC2的輸出作為
    發(fā)表于 12-05 07:00