精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

    文章

    5317

    瀏覽量

    120002
  • STM32
    +關注

    關注

    2266

    文章

    10871

    瀏覽量

    354789
  • 串口
    +關注

    關注

    14

    文章

    1543

    瀏覽量

    76186
  • dma
    dma
    +關注

    關注

    3

    文章

    559

    瀏覽量

    100420
收藏 人收藏

    評論

    相關推薦

    STM32G030F6用串口中斷函數接收數據,發送數據就死機怎么解決?

    平臺介紹: 芯片是使用的STM32G030F6,系統是rt-thread nano-v3.1.5, 使用rtthread studio + cubemx生成工程項目 問題描述:想使用串口中斷方式去
    發表于 07-11 06:44

    STM32G030不能再次進入串口中斷的原因?

    在使用串口時數據發送完畢 將串口設置為外部中斷,然后MCU進入停止模式。在觸發外部喚醒后,進入外部觸發中斷 ,再次初始化串口后,再
    發表于 05-17 10:38

    如何在STM32F439 DMA中斷中區分是哪個通道產生的中斷

    STM32F439有兩個DMA控制器DMA1和DMA2,每個控制器有8個流,每個流有8個通道,我做的是采用串口1
    發表于 05-17 08:20

    STM32串口DMA通訊接收不到數據的原因?

    //STM32串口DMA通訊接收不到數據 //請各位大神幫忙看看,下面的DMA配置問題出在哪里 //程序編寫思路是:用
    發表于 05-09 06:40

    stm32cubemx的串口中斷接收時,過一段時間串口中斷不進了怎么解決?

    個小時多串口中斷進不去了,我用兩根線掛在總線上在電腦上用串口助手監聽收發的數據,發送和應答的過程還在持續,其他功能也都正常只是cubemx的程序認為沒有收到數據。很難定位是哪里的問題。
    發表于 04-17 06:48

    常見串口通信的幾個問題請教?

    有關常見串口通信的幾個問題請教論壇里的專家? 1、常見串口通信CAN,DP,PN,ETHER IP/TCP,ETHERCAT等,這些
    發表于 04-04 16:30

    STM32F030F4串口空閑中斷接收不定長數據,發生中斷后不知道如何計算接收到的字節數?

    我用STM32F030F4串口空閑中斷接收不定長數據,發生中斷后不知道怎樣計算接收到的字節數。
    發表于 04-03 07:12

    關于STM32L051C8T6芯片LPUART+DMA接收問題求解

    STM32L051C8T6芯片低功耗串口LPUART+DMA。 我用STM32CUBEMX 生成了程序LPUART以及UART2串口+
    發表于 03-28 07:05

    STM32F103ZET6 HAL庫使用串口1DMA空閑中斷接收數據時CNDTR寄存器問題如何解決?

    STM32F103ZET6開發過程中,用到HAL庫中的串口1DMA空閑中斷處理數據時發現: 當接收數據長度超過16字節后,(__HAL_
    發表于 03-12 08:35

    STM32h7開啟Cache后,串口發送DMA會導致中斷觸發如何解決?

    STM32h7 開啟Cache后,串口使用發送DMA發送數據會導致中斷觸發(只開啟接收空閑中斷
    發表于 03-12 07:37

    STM32G030在使用串口中斷接收時,發現串口接收一次數據后,第二次進不去中斷的原因?

    在使用串口中斷接收時,發現串口接收一次數據后,第二次進不去中斷了,初始化開啟了中斷且在回調函數里
    發表于 03-08 07:40

    XMC4800串口中斷接收數據錯誤如何解決?

    串口中斷數據,接收到的數據為3個字節。接收到的數據為上一幀的最后一個字節和本數據幀的頭兩個字節。請問該問題如何解決?通過邏輯分析儀抓取數據,RX數據是正常,但是軟件中收到數據的數組中數據是異常的。
    發表于 01-26 08:10

    stm32串口接收中斷觸發原理

    配置串口接收中斷使能:在初始化串口時,需要設置相應的控制寄存器來使能串口接收
    發表于 01-17 15:42 ?7867次閱讀
    <b class='flag-5'>stm32</b><b class='flag-5'>串口</b><b class='flag-5'>接收</b><b class='flag-5'>中斷</b>觸發原理

    stm32虛擬串口接收的數據處理

    ,我們需要了解虛擬串口的工作原理。虛擬串口是通過軟件模擬的串口,數據通過USB端口傳輸。在STM32中,我們可以使用USB CDC(Communication Device Class
    的頭像 發表于 12-20 11:22 ?2180次閱讀

    STM32 DMA傳輸的問題分析

    用戶使用STM32G473RET6芯片,開發環境STM32CubeMX+Keil(LL庫)。使用DMA1通道1,在半傳輸中斷和完全傳輸中斷
    的頭像 發表于 12-01 09:19 ?2705次閱讀
    <b class='flag-5'>STM32</b> <b class='flag-5'>DMA</b>傳輸的問題分析