哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

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

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

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

STM32串口中斷 DMA接收的幾點注意地方

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

掃碼添加小助手

加入工程師交流群

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

1UART串口中斷接收

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

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

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

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

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

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

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

2.ORE上溢錯誤

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

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

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

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

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

2

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

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

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

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

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

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

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

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

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

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

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

    關(guān)注

    2312

    文章

    11187

    瀏覽量

    374422
  • uart
    +關(guān)注

    關(guān)注

    22

    文章

    1319

    瀏覽量

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

    關(guān)注

    3

    文章

    582

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    cs32A010串口通訊問題

    串口中斷接收數(shù)據(jù),第一個數(shù)據(jù)是0,第二個才是正確的數(shù)據(jù),而且最后一個字節(jié)放到了下一幀數(shù)據(jù)第一個。 pack包的串口中斷例程跑的也有問題,讀取串口數(shù)據(jù)為什么是兩條一樣的語句,是什么意思?
    發(fā)表于 04-13 12:35

    串口中斷和定時中斷,外部中斷在一起如何調(diào)用?

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

    為什么串口接收數(shù)據(jù)就會觸發(fā)中斷呢?

    為什么串口接收數(shù)據(jù)就會觸發(fā)中斷呢? 串口接收喚醒機制有哪些注意事項?
    發(fā)表于 01-08 06:45

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

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

    E203串口中斷使用總結(jié)

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

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

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

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

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

    串口DMA接收數(shù)據(jù)包丟失怎么解決?

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

    配置了串口DMA,現(xiàn)在是接收可以,發(fā)送不行,是什么地方沒有設(shè)置對嗎?

    配置了串口DMA,現(xiàn)在是接收可以,發(fā)送不行,是什么地方沒有設(shè)置對嗎?當(dāng)配置DMA_TX 不能發(fā)送數(shù)據(jù),默認輪詢發(fā)送就可以。配置如下圖:
    發(fā)表于 09-28 07:41

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

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

    關(guān)于stm32f4zgt6和mspm0g3507串口通信問題

    本人在使用stm32f4zgt6和mspm0g3507串口通信時出現(xiàn)問題,情況如下: m0芯片使用軟件超時解析進行數(shù)據(jù)接收,使用標(biāo)準(zhǔn)庫的transmit函數(shù)進行數(shù)據(jù)發(fā)送。 stm32使
    發(fā)表于 09-01 11:11

    CYT2B7串口接收會漏接數(shù)據(jù)怎么解決?

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

    求助,關(guān)于stm32H7多DMA數(shù)據(jù)流問題求解

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

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

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

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

    USART3_MspInit 1 / / USER CODE END USART3_MspInit 1 / } } 在主程序中開啟DMA接收和空閑線中斷: int main(void) { / USER
    發(fā)表于 07-10 07:28
    青岛市| 德兴市| 金寨县| 旌德县| 绍兴县| 襄汾县| 丹凤县| 郴州市| 商都县| 静宁县| 浦县| 嵊泗县| 南投县| 南宁市| 尚志市| 广河县| 建始县| 滦南县| 象州县| 洪洞县| 鹤峰县| 连山| 鹤山市| 保亭| 济南市| 阿勒泰市| 遂昌县| 师宗县| 柏乡县| 鄱阳县| 重庆市| 曲沃县| 惠安县| 福贡县| 昌平区| 海盐县| 炎陵县| 永仁县| 广灵县| 阜阳市| 林州市|