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

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

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

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

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

ADC2如何使用DMA功能

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

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

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

其實(shí)這問題在參考手冊中都能找到答案。答案簡單概括就是:使用雙ADC模式,由ADC2轉(zhuǎn)化的數(shù)據(jù)可以通過雙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é)果也是保存在ADC_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);

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

USART過載錯(cuò)誤Overrun error

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

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

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

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

這個(gè)時(shí)候也可以使用過載錯(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),希望對你們有所幫助。

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

    關(guān)注

    3

    文章

    561

    瀏覽量

    100583
  • USART
    +關(guān)注

    關(guān)注

    1

    文章

    195

    瀏覽量

    30853
  • STM32F10
    +關(guān)注

    關(guān)注

    0

    文章

    45

    瀏覽量

    15627
  • ADC2
    +關(guān)注

    關(guān)注

    0

    文章

    2

    瀏覽量

    1481
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

    使用的產(chǎn)品型號(hào)的不同,有一個(gè)或兩個(gè)DMA模塊。 STM32F0XX DMA控制器總共有5個(gè)通道用于DMA1,每個(gè)通道都專門管理來自一個(gè)或多個(gè)外設(shè)的存儲(chǔ)器訪問請求。它具有一個(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ù)都一樣,給人直觀的感覺像是
    發(fā)表于 05-15 08:15

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

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

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

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

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

    在測試STM32F302RB的ADC功能的時(shí)候遇到了問題:用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ā)送沒有問題,串口接收只要adc1使用
    發(fā)表于 04-22 08:08

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

    _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庫配置:? ?掃描模式使能,連續(xù)轉(zhuǎn)換模式使能,DMA連續(xù)轉(zhuǎn)換請求使能 3、DMA2_CH1中斷不使能(目的為了減少進(jìn)出中斷時(shí)間)? 4、whi
    發(fā)表于 04-10 07:24

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

    咨詢下各位: 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

    求助,STM32F1慢速交叉模式中兩個(gè)ADC采集和轉(zhuǎn)換時(shí)間的問題求解

    前提: 1.目前正在學(xué)習(xí)HAL庫的雙ADC慢速交叉模式(DMA版),用PC0采集通道電壓值; 2.main.c中只有延時(shí)1秒循環(huán)打印采集到的
    發(fā)表于 03-28 08:32