色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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ù)圈 ? 來源:黃工的嵌入式技術(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)志位寫入零來清零;

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

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

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

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

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

2.ORE上溢錯(cuò)誤

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

其實(shí),上面這種長時(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ù)來,MCU是不能接收的。如果此時(shí)數(shù)據(jù)寄存器 USART_DR 存在一個(gè)數(shù)據(jù),再來一個(gè)數(shù)據(jù),就會(huì)導(dǎo)致ORE上溢錯(cuò)誤。

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

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

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

    關(guān)注

    2270

    文章

    10895

    瀏覽量

    355729
  • uart
    +關(guān)注

    關(guān)注

    22

    文章

    1235

    瀏覽量

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

    關(guān)注

    3

    文章

    560

    瀏覽量

    100544
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM32G030F6用串口中斷函數(shù)接收數(shù)據(jù),發(fā)送數(shù)據(jù)就死機(jī)怎么解決?

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

    STM32G030不能再次進(jìn)入串口中斷的原因?

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

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

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

    stm32的modbus.c文件,如何觸發(fā)串口發(fā)送中斷?

    ModRcv(void);//modbus信息接收,放在串口接收中斷 3.void ModSend(void);//modbus信息接收
    發(fā)表于 05-10 06:50

    STM32串口DMA通訊接收不到數(shù)據(jù)的原因?

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

    stm32cubemx的串口中斷接收時(shí),過一段時(shí)間串口中斷不進(jìn)了怎么解決?

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

    STM32L051使用HAL庫串口中斷的疑問求解

    使用STM32CUB生成原始代碼,然后采用串口中斷接收 L051有兩個(gè)串口串口1,串口2,以
    發(fā)表于 04-08 07:17

    STM32F030F4串口空閑中斷接收不定長數(shù)據(jù),發(fā)生中斷后不知道如何計(jì)算接收到的字節(jié)數(shù)?

    我用STM32F030F4串口空閑中斷接收不定長數(shù)據(jù),發(fā)生中斷后不知道怎樣計(jì)算接收到的字節(jié)數(shù)。
    發(fā)表于 04-03 07:12

    關(guān)于STM32L051C8T6芯片LPUART+DMA接收問題求解

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

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

    STM32F103ZET6開發(fā)過程中,用到HAL庫中的串口1DMA空閑中斷處理數(shù)據(jù)時(shí)發(fā)現(xiàn): 當(dāng)接收數(shù)據(jù)長度超過16字節(jié)后,(__HAL_
    發(fā)表于 03-12 08:35

    STM32h7開啟Cache后,串口發(fā)送DMA會(huì)導(dǎo)致中斷觸發(fā)如何解決?

    STM32h7 開啟Cache后,串口使用發(fā)送DMA發(fā)送數(shù)據(jù)會(huì)導(dǎo)致中斷觸發(fā)(只開啟接收空閑中斷
    發(fā)表于 03-12 07:37

    STM32G030在使用串口中斷接收時(shí),發(fā)現(xiàn)串口接收一次數(shù)據(jù)后,第二次進(jìn)不去中斷的原因?

    在使用串口中斷接收時(shí),發(fā)現(xiàn)串口接收一次數(shù)據(jù)后,第二次進(jìn)不去中斷了,初始化開啟了中斷且在回調(diào)函數(shù)里
    發(fā)表于 03-08 07:40

    XMC4800串口中斷接收數(shù)據(jù)錯(cuò)誤如何解決?

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

    stm32串口接收中斷觸發(fā)原理

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

    用AT32F437ZMT7配置串口7的彈性dma接收一直配不好,dma接收中斷一直進(jìn)不去是為什么?

    我用AT32F437ZMT7 配置串口7的彈性dma 接收一直配不好,dma接收中斷一直進(jìn)不去
    發(fā)表于 01-16 07:12
    主站蜘蛛池模板: 中文字幕专区高清在线观看| Chinesetube国产中文| 国产精品久久久久秋霞影视| 久久99热在线观看7| 我要女人的全黄录像| cntv官网| 欧美乱妇狂野欧美在线视频| 亚洲手机在线人成视频| 精品一成人岛国片在线观看| 亚洲2023无矿砖码砖区| 极品少妇小泬50PTHEPON| 国产精品久久久久久久人热| 日韩中文亚洲欧美视频二| 91精品乱码一区二区三区| 国产偷国产偷亚洲高清人乐享| 波野结衣qvod| 欧美XXXX69学生HD| 123成人站| 久久永久影院免费| 伊人亚洲AV久久无码精品| 超级乱淫片午夜电影网99| 青青草原91| 成人影片大全| 天天狠狠弄夜夜狠狠躁·太爽了 | 秋霞网在线伦理影片| chinese东北老年tv视频| 日本XXXXZZX片免费观看| 99久久亚洲| 全黄H全肉细节文NP| 99热国产这里只有精品免费 | 国产在线精品亚洲视频在线| 亚洲XXX午休国产熟女屁| 黑吊大战白xxxxxx| 青青草伊人久久| 国产AV99激情久久无码天堂| 文中字幕一区二区三区视频播放| 国产成人免费视频| 亚洲性无码av在线| 理论片午午伦夜理片I| bl(高h)文| 无码成A毛片免费|