99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

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

STM32串口中斷 DMA接收的幾點(diǎn)注意地方

黃工的嵌入式技術(shù)圈 ? 來(lái)源:黃工的嵌入式技術(shù)圈 ? 2020-03-04 13:57 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

今天寫點(diǎn)大家常問,也是常見的關(guān)于UART串口的內(nèi)容。這幾點(diǎn)內(nèi)容或許曾經(jīng)也困惑了你很久。

1UART串口中斷接收

使能UART串口中斷之后,有接收到UART數(shù)據(jù),進(jìn)入中斷,此時(shí)要清除RXNE接收標(biāo)志位:

1.通過軟件向該RXNE標(biāo)志位寫入零來(lái)清零;

2.通過對(duì) USART_DR 寄存器執(zhí)行讀入操作將該位清零。

這里可以查看對(duì)應(yīng)《參考手冊(cè)》,一般我們選擇第2種,通過讀取UART串口數(shù)據(jù)來(lái)清零。

1.中斷接收數(shù)據(jù)丟失

在UART串口中斷函數(shù)中,或者更高優(yōu)先級(jí)中斷函數(shù)中長(zhǎng)時(shí)間執(zhí)行,導(dǎo)致接收丟失,所以,請(qǐng)勿在中斷函數(shù)中長(zhǎng)時(shí)間執(zhí)行。

特別有些人,還在中斷函數(shù)添加延時(shí)函數(shù)。實(shí)際應(yīng)用中,只要不是特殊情況,比如測(cè)試某個(gè)功能可以添加延時(shí)函數(shù),都不建議在中斷函數(shù)添加延時(shí)函數(shù)。

2.ORE上溢錯(cuò)誤

ORE上溢錯(cuò)誤是什么意思呢?可能很多人不了解,簡(jiǎn)單說(shuō)就是:UART接收到有數(shù)據(jù),沒有去取,但又來(lái)了數(shù)據(jù),此時(shí)就會(huì)產(chǎn)生ORE上溢錯(cuò)誤。(請(qǐng)看“參考手冊(cè)”)

其實(shí),上面這種長(zhǎng)時(shí)間在占用中斷,就會(huì)導(dǎo)致UART接收數(shù)據(jù)上溢。

很多人沒有在意這個(gè),如果是使能了中斷接收,標(biāo)志位沒有清除,又有ORE上溢錯(cuò)誤的話,程序就會(huì)不停地進(jìn)入U(xiǎn)ART中斷。(大家不妨試一下,看一下是不是你代碼一直在UART中斷里面不停運(yùn)行)。

3.使能接收中斷前,先清除接收標(biāo)志位

有時(shí)候,在程序初始化的時(shí)候,就會(huì)接收到數(shù)據(jù),這個(gè)時(shí)候建議大家先清除接收標(biāo)志位再使能接收中斷。類似如下:

2

DMA接收串口數(shù)據(jù)

使用DMA接收串口數(shù)據(jù),相信很多朋友都知道。這個(gè)可以理解為使用隊(duì)列,或者FIFO的形式,防止因高優(yōu)先級(jí)中斷而打斷,導(dǎo)致接收數(shù)據(jù)丟失。

但很多人都遇到過,接收不到數(shù)據(jù),或者數(shù)據(jù)異常的情況。所以,這里同樣有需要注意的地方。

1.使能UART之前,先使能DMA相關(guān)配置

這個(gè)和清除標(biāo)志位一樣的道理,使能UART之前,先使能DMA相關(guān)配置,防止在配置過程中有接收數(shù)據(jù)。

2.ORE上溢錯(cuò)誤導(dǎo)致不能使用DMA接收數(shù)據(jù)

導(dǎo)致不能DMA接收不到數(shù)據(jù)的根源,有一種可能就是有ORE上溢錯(cuò)誤。

若在串口初始化并使能后到 DMA 使能之前有數(shù)據(jù)來(lái),MCU是不能接收的。如果此時(shí)數(shù)據(jù)寄存器 USART_DR 存在一個(gè)數(shù)據(jù),再來(lái)一個(gè)數(shù)據(jù),就會(huì)導(dǎo)致ORE上溢錯(cuò)誤。

一旦產(chǎn)生上溢錯(cuò)誤后,就無(wú)法再觸發(fā) DAM 請(qǐng)求,及時(shí)之后再啟動(dòng) DMA 也不行,無(wú)法觸發(fā) DMA 請(qǐng)求就無(wú)法將數(shù)據(jù)寄存器內(nèi)的數(shù)據(jù)及時(shí)轉(zhuǎn)移走,如此陷入死鎖。這就是串口無(wú)法正常接收的原因。

所以,最后提醒大家,配置時(shí),請(qǐng)一定要注意這些細(xì)節(jié)。

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

    關(guān)注

    2293

    文章

    11032

    瀏覽量

    365031
  • uart
    +關(guān)注

    關(guān)注

    22

    文章

    1276

    瀏覽量

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

    關(guān)注

    3

    文章

    576

    瀏覽量

    103269
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    STM32F407多機(jī)RS485串口通訊+地址位喚醒+DMA空閑線接收,無(wú)法進(jìn)入中斷服務(wù)程序怎么處理?

    USART3_MspInit 1 / / USER CODE END USART3_MspInit 1 / } } 在主程序中開啟DMA接收和空閑線中斷: int main(void) { / USER
    發(fā)表于 07-10 07:28

    STM32串口下載軟件(FLYMCU)

    STM32串口下載軟件(FLYMCU),經(jīng)典版本,親試可用。
    發(fā)表于 04-09 15:59 ?2次下載

    使用串口dma環(huán)形接收+空閑中斷,觸發(fā)空閑中斷后進(jìn)入任務(wù)中拷貝數(shù)據(jù)發(fā)現(xiàn)拷貝的數(shù)據(jù)全為0,怎么處理?

    求助,我使用串口dma環(huán)形接收+空閑中斷,默認(rèn)應(yīng)該開了緩存,在觸發(fā)空閑中斷后進(jìn)入任務(wù)中拷貝數(shù)據(jù)發(fā)現(xiàn)拷貝的數(shù)據(jù)全為0,但是我掛上調(diào)試之后在拷貝
    發(fā)表于 03-27 06:17

    stm32f105串口數(shù)據(jù)丟失的原因?

    hal庫(kù)通過dma空閑中斷接收數(shù)據(jù),收到的數(shù)據(jù)直接通過串口打印出去,每隔一段時(shí)間出現(xiàn)接收到數(shù)據(jù)丟失是為啥呢
    發(fā)表于 03-14 13:38

    STM32F427串口接收和發(fā)送中斷同時(shí)使能,為什么會(huì)出現(xiàn)接收中斷丟數(shù)的情況?

    STM32F427芯片,針對(duì)UART7開啟串口接收緩存區(qū)非空中斷RXNE和串口傳輸完成中斷TC.
    發(fā)表于 03-11 07:05

    STM32F103在使用HAL庫(kù)1.8.5版本使用串口中斷發(fā)送數(shù)據(jù)的時(shí)候,出現(xiàn)huart2->TxXferCount為0了,為什么?

    STM32F103在使用HAL庫(kù)1.8.5版本使用串口中斷發(fā)送數(shù)據(jù)的時(shí)候,會(huì)出現(xiàn)huart2->TxXferCount為0了,但是并沒有清除掉TXEIE中斷也沒有使能TCIE中斷
    發(fā)表于 03-07 07:12

    STM32H743 UART DMA接收不到數(shù)據(jù),為什么?

    failed!\\n\", \"uart3\"); return RT_ERROR; } /* 以 DMA 接收及輪詢發(fā)送方式打開串口設(shè)備
    發(fā)表于 02-19 06:14

    串口中斷是內(nèi)部中斷還是外部中斷,串口中斷是怎么觸發(fā)的

    串口中斷通常被視為外部中斷。雖然串口控制器(如USART、UART等)可能集成在微控制器或處理器的內(nèi)部,但從中斷的角度來(lái)看,串口中斷是由處理
    的頭像 發(fā)表于 01-29 15:03 ?1799次閱讀

    串口中斷需要清除標(biāo)志位嗎,串口中斷標(biāo)志位會(huì)自動(dòng)清除嗎

    在電子通信領(lǐng)域,串口中斷作為一種重要的通信機(jī)制,廣泛應(yīng)用于各種嵌入式系統(tǒng)和計(jì)算機(jī)設(shè)備中。串口中斷標(biāo)志位的管理,尤其是是否需要手動(dòng)清除以及是否會(huì)自動(dòng)清除,是理解和實(shí)現(xiàn)串口通信的關(guān)鍵環(huán)節(jié)。
    的頭像 發(fā)表于 01-29 14:59 ?1892次閱讀

    串口中斷有什么用,串口中斷的觸發(fā)條件是什么

    在現(xiàn)代電子通信系統(tǒng)中,串口中斷作為一種高效的數(shù)據(jù)處理機(jī)制,扮演著至關(guān)重要的角色。它允許處理器在數(shù)據(jù)到達(dá)或發(fā)送完成時(shí)立即響應(yīng),從而提高系統(tǒng)的響應(yīng)速度和效率。
    的頭像 發(fā)表于 01-29 14:56 ?1879次閱讀

    STM32串口接受中斷使用C++STL中的queue導(dǎo)致所有中斷失效

    ,F(xiàn)reeRTOS的heap設(shè)置為8k 有兩個(gè)中斷,1s觸發(fā)的定時(shí)器中斷串口接收中斷 遇到問題 串口
    發(fā)表于 01-24 10:21

    STM32CUBEMX(8)--USART通過定時(shí)器中斷方式接收不定長(zhǎng)數(shù)據(jù)

    概述 本文利用中斷實(shí)現(xiàn)串口不定長(zhǎng)接收(非DMA),使用HAL庫(kù),將接收的數(shù)據(jù)打印出去。 DMA
    發(fā)表于 09-06 16:48

    STM32CUBEMX(6)--移植雅特力AT32F403AVGT7,雙串口通過DMA方式接收不定長(zhǎng)數(shù)據(jù)

    (&huart3, UART_IT_IDLE);//使能串口2 IDLE中斷 printf(\"雙串口DMA接收例程\\\\r\\
    發(fā)表于 09-06 16:37

    STM32CUBEMX(2)--USART通過DMA方式接收不定長(zhǎng)數(shù)據(jù)

    ,如下所示: 配置時(shí)鐘樹 STM32F0的最高主頻到48M,所以配置48即可: 串口配置 本次實(shí)驗(yàn)使用的串口1進(jìn)行串口通信,波特率配置為115200。 配置
    發(fā)表于 09-04 11:48

    STM32G030F6串口空閑中斷配置卡死怎么解決?

    本人在用STM32G030F6 串口空閑中斷+DMA接受的時(shí)候,CubeMX配置完成,在mian函數(shù)while(1)前初始化,使能空閑中斷_
    發(fā)表于 07-22 06:51