伦伦影院久久影视,天天操天天干天天射,ririsao久久精品一区 ,一本大道香蕉大久在红桃,999久久久免费精品国产色夜,色悠悠久久综合88,亚洲国产精品久久无套麻豆,亚洲香蕉毛片久久网站,一本一道久久综合狠狠老

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

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

3天內不再提示

STM32串口中斷及DMA接收常見的幾個問題

jf_pJlTbmA9 ? 來源:strongerHuang ? 作者:strongerHuang ? 2023-10-26 16:41 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

今天再給大家分享一些關于STM32串口中斷及DMA接收常見的幾個問題。

UART串口中斷接收

使能UART串口中斷之后,有接收到UART數據,進入中斷,此時要清除RXNE接收標志位:

1)通過軟件向該RXNE標志位寫入零來清零;

2)通過對 USART_DR 寄存器執行讀入操作將該位清零。

這里可以查看對應《參考手冊》,一般我們選擇第2種,通過讀取UART串口數據來清零。

1、中斷接收數據丟失

在UART串口中斷函數中,或者更高優先級中斷函數中長時間執行,導致接收丟失,所以,請勿在中斷函數中長時間執行。

特別有些人,還在中斷函數添加延時函數。實際應用中,只要不是特殊情況,比如測試某個功能可以添加延時函數,都不建議在中斷函數添加延時函數。

2、ORE上溢錯誤

ORE上溢錯誤是什么意思呢? 可能很多人不了解,簡單說就是:UART接收到有數據,沒有去取,但又來了數據,此時就會產生ORE上溢錯誤。(請看“參考手冊”)

其實,上面這種長時間在占用中斷,就會導致UART接收數據上溢。

很多人沒有在意這個,如果是使能了中斷接收,標志位沒有清除,又有ORE上溢錯誤的話,程序就會不停地進入UART中斷。(大家不妨試一下,看一下是不是你代碼一直在UART中斷里面不停運行)。

3、使能接收中斷前,先清除接收標志位

有時候,在程序初始化的時候,就會接收到數據,這個時候建議大家先清除接收標志位再使能接收中斷。類似如下:

wKgZomUD8ZyAcMFkAAOnWVM3tz4985.jpg

DMA接收串口數據

使用DMA接收串口數據,相信很多朋友都知道。這個可以理解為使用隊列,或者FIFO的形式,防止因高優先級中斷而打斷,導致接收數據丟失。

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

1、使能UART之前,先使能DMA相關配置

這個和清除標志位一樣的道理,使能UART之前,先使能DMA相關配置,防止在配置過程中有接收數據。

wKgZomUD8Z2AQ7HXAAEwkQrKiT4053.jpg

2、ORE上溢錯誤導致不能使用DMA接收數據

導致不能DMA接收不到數據的根源,有一種可能就是有ORE上溢錯誤。

若在串口初始化并使能后到 DMA 使能之前有數據來,MCU是不能接收的。如果此時數據寄存器 USART_DR 存在一個數據,再來一個數據,就會導致ORE上溢錯誤。

一旦產生上溢錯誤后,就無法再觸發 DAM 請求,即使之后再啟動 DMA 也不行,無法觸發 DMA 請求就無法將數據寄存器內的數據及時轉移走,如此陷入死鎖。這就是串口無法正常接收的原因。

所以,最后提醒大家,配置時,請一定要注意這些細節。

來源:嵌入式專欄(作者 | strongerHuang)
免責聲明:本文為轉載文章,轉載此文目的在于傳遞更多信息,版權歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權問題,請聯系小編進行處理

審核編輯 黃宇

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

    關注

    31

    文章

    5612

    瀏覽量

    130223
  • STM32
    +關注

    關注

    2311

    文章

    11178

    瀏覽量

    374042
  • 串口
    +關注

    關注

    15

    文章

    1624

    瀏覽量

    83109
  • dma
    dma
    +關注

    關注

    3

    文章

    582

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    串口中斷和定時中斷,外部中斷在一起如何調用?

    /9600=20ms 也就是說,處理了定時中斷后,再處理的串口中斷 時間上:實際是定時+串口 如果是1s內,那么定時中斷內嵌套串口中斷
    發表于 01-14 06:25

    CW32F030的DMA問題求解

    應用很簡單,通過DMA把UART接收到的數據放到指定的內存緩沖區rx_buffer[]. 每次接收8個字節數據,下一次數據覆蓋上一次. 這個過程本來可以無需CPU參與自動完成.無論串口
    發表于 12-08 08:07

    串口空閑中斷串口超時中斷介紹

    1. 空閑中斷(Idle Interrupt) 觸發條件 當串口總線在接收數據后持續保持空閑狀態(如高電平)超過一幀時間(即一個字符傳輸時間)時觸發。 硬件自動檢測總線空閑狀態,與數據長度無關
    發表于 11-21 08:31

    E203串口中斷使用總結

    以上函數的設置后,就可以在中斷服務函數中寫下自己需要的中斷處理功能,并且在 main() 函數中寫下“my_uart_init()”,就能實現串口中斷。 二、串口
    發表于 10-22 07:34

    rt-thread 在使用串口DMA模式的時候,接收數據接收不到00,為什么?

    硬件為STM32F103ZET6: 在使用串口通訊時,在DMA接收模式下,收不到00數據,遇到00數據,好像DMA模式就認為是數據已經結束了
    發表于 10-14 06:20

    串口DMA接收方式打開,為什么在開啟IDLE中斷的情況下還需要開啟DMA中斷呢?

    如圖,在以 RT_DEVICE_FLAG_DMA_RX 方式打開串口時,底層會配置串口IDLE中斷,同時也會打開DMA
    發表于 09-29 08:30

    串口DMA接收數據包丟失怎么解決?

    RTT串口DMA接收數據,超過緩沖區后為什么會吞掉一個數據包呢,不能每次處理完后清除緩沖區數據嗎,感覺接收的數據是累計的,累計滿之后會重新覆蓋,在最后一個包
    發表于 09-29 07:50

    RTT5.2.0串口接收中斷死機怎么解決?

    RT_DEVICE_FLAG_DMA_RX 和 RT_DEVICE_FLAG_INT_RX 問題一樣, 如果不使用中斷就不會出現這個問題, 開始中斷如果沒有數據接收不會報錯, 有
    發表于 09-22 06:16

    STM32H743 UART DMA接收不到數據是為什么?

    ;find %s failed!n\", \"uart3\"); return RT_ERROR; } /* 以 DMA 接收及輪詢發送方式打開串口設備
    發表于 09-11 07:14

    關于stm32f4zgt6和mspm0g3507串口通信問題

    本人在使用stm32f4zgt6和mspm0g3507串口通信時出現問題,情況如下: m0芯片使用軟件超時解析進行數據接收,使用標準庫的transmit函數進行數據發送。 stm32使
    發表于 09-01 11:11

    CYT2B7串口接收會漏接數據怎么解決?

    串口中斷方式接收會漏接數據如串口工具發送 :1234567芯片接收到 :1357硬件是CYTVII-B-E-1M-SK開發板軟件是SDL v8.3 中的
    發表于 08-14 07:29

    求助,關于stm32H7多DMA數據流問題求解

    情況如下:stm32H7配置了一個adc進行采樣,通過dma進行數據傳輸,串口接收和發送命令,用兩個dma數據流通道,采用的空閑
    發表于 07-29 15:02

    STM32407使用串口閑時中斷+DMA方式接收最大接收字節是多少?

    使用串口閑時中斷+DMA方式接收數據,波特率為460800,DMA接收長度為1024個字節,并開
    發表于 07-22 08:16

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

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

    STM32串口下載軟件(FLYMCU)

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