標(biāo)題: USART 中斷方式接收無響應(yīng)問題的一種情況 及其處理方法 [打印本頁]
作者: 小融1號 時(shí)間: 2016-9-29 11:54
標(biāo)題: USART 中斷方式接收無響應(yīng)問題的一種情況 及其處理方法
11.webp.jpg (32.92 KB, 下載次數(shù): 26)
下載附件
2016-9-29 11:44 上傳
問題:
此問題由客戶工程師提出,客戶在使用STM32F103的USART做串口通訊時(shí),發(fā)現(xiàn)了一個(gè)問題,當(dāng)設(shè)備正常通信一段時(shí)間后,串口不響應(yīng)外部的通信請求了.
文中配圖引用自STM32F103的中文版本用戶手冊,下載鏈接為:
12.webp.jpg (39.66 KB, 下載次數(shù): 25)
下載附件
2016-9-29 11:44 上傳
調(diào)研:
一、經(jīng)過調(diào)研:
1.1 客戶除了使用USART做串口通信,還開啟了定時(shí)器中斷來進(jìn)行數(shù)據(jù)采集.
1.2 定時(shí)器的優(yōu)先級比串口接收的優(yōu)先級高.
1.3 定時(shí)器處理數(shù)據(jù)操作也比較頻繁.
1.4 客戶使用的STM32F1標(biāo)準(zhǔn)庫(版本V3.5.0).
二、經(jīng)過問題復(fù)現(xiàn)和使用ST-LINK在線調(diào)試和定位發(fā)現(xiàn):
2.1 在出現(xiàn)這個(gè)問題的時(shí)候,程序不斷的進(jìn)入串口接收中斷,不能夠運(yùn)行到main主函數(shù)處理其他任務(wù)了.
2.2 發(fā)現(xiàn)ORE標(biāo)志為‘1’,也就說明程序是發(fā)生了串口溢出錯誤.
2.3 客戶在進(jìn)入串口中斷后會調(diào)用USART_GetITStatus(USART2, USART_IT_RXNE)來獲取RXNE的值.如果RXNE為1則去讀取DR數(shù)據(jù)寄存器的數(shù)據(jù),讀取后RXNE為0,但是ORE的標(biāo)志依然為1,依然進(jìn)入了串口中斷.
三、經(jīng)過分析以及我們可以通過我們芯片的用戶手冊可以得到以下信息:
3.1 程序不斷進(jìn)入串口中斷是因?yàn)镺RE標(biāo)志始終為1,沒有被用戶清除掉:
13.webp.jpg (67.21 KB, 下載次數(shù): 19)
下載附件
2016-9-29 11:44 上傳
從上圖紅色部分我們可以看到,如果串口接收中斷開啟了,那么ORE為1時(shí)就會產(chǎn)生中斷.
3.2.從下圖我們可以看到,順序執(zhí)行對USART_SR和USART_DR的操作就會清除ORE的標(biāo)志,客戶在中斷中執(zhí)行了以下操作,那為什么ORE標(biāo)志還沒有被清除呢?(R1執(zhí)行了讀USART_SR操作,R2執(zhí)行了讀USART_DR操作).
14.jpg (57.09 KB, 下載次數(shù): 25)
下載附件
2016-9-29 11:44 上傳
3.3 我們可以看手冊中下表的解釋:
3.3.1 ORE表征的是一個(gè)歷史事件,當(dāng)ORE為1時(shí),表明至少有1個(gè)數(shù)據(jù)已經(jīng)丟失.
3.3.2這有2種可能發(fā)生的情況,RXNE為1的情況R3和RXNE為0的情況R4,如下圖中的解釋.
15.webp.jpg (92.57 KB, 下載次數(shù): 30)
下載附件
2016-9-29 11:44 上傳
3.3.3我們從上圖可以看出,3.2圖中的R1+R2操作只能處理RXNE為1的情況;
當(dāng)RXNE為0的特殊情況, 就是在讀序列器件(在USART_SR寄存器讀訪問和USART_DR讀訪問之間)接收到新的數(shù)據(jù),數(shù)據(jù)SR雖然被讀過了,但是overrun事件依然發(fā)生了,以上操作是不能夠處理的:
16.webp.jpg (43.29 KB, 下載次數(shù): 33)
下載附件
2016-9-29 11:44 上傳
3.4 因此我們要在應(yīng)用中對ORE標(biāo)志進(jìn)行處理,即當(dāng)判斷發(fā)生ORE中斷的時(shí)候,我們再讀一次USART_DR的值,這樣如果沒有新的Overrun溢出事件發(fā)生的時(shí)候,ORE會被清除,然后程序就不會因?yàn)镺RE未被清除一直不斷的進(jìn)入串口中斷了,代碼處理如下:
17.webp.jpg (46.86 KB, 下載次數(shù): 34)
下載附件
2016-9-29 11:44 上傳
結(jié)論:
對于這種情況,我們可以看到USART串口接收中斷使能了,那ORE中斷也就開啟了;為了消除在通過讀序列(USART_SR/USART_DR)的過程中產(chǎn)生的溢出錯誤,我們可以嘗試在應(yīng)用程序中需要針對ORE標(biāo)志做一個(gè)處理來清除ORE標(biāo)志,使得串口通信可以正常的繼續(xù)工作.
建議客戶在做串口通信時(shí)需要增加幀檢驗(yàn)功能,如CRC校驗(yàn)等...,當(dāng)發(fā)生ORE時(shí),幀校驗(yàn)肯定是通不過的,不會造成從機(jī)誤響應(yīng).
重要通知 - 請仔細(xì)閱讀
意法半導(dǎo)體公司及其子公司(“ST”)保留隨時(shí)對ST 產(chǎn)品和/ 或本文檔進(jìn)行變更、更正、增強(qiáng)、修改和改進(jìn)的權(quán)利,恕不另行通知。買方訂貨之前應(yīng)獲取關(guān)于ST 產(chǎn)品的最新信息。ST 產(chǎn)品的銷售依照訂單確認(rèn)時(shí)的相關(guān)ST 銷售條款。
買方自行負(fù)責(zé)對ST 產(chǎn)品的選擇和使用, ST 概不承擔(dān)與應(yīng)用協(xié)助或買方產(chǎn)品設(shè)計(jì)相關(guān)的任何責(zé)任。
ST 不對任何知識產(chǎn)權(quán)進(jìn)行任何明示或默示的授權(quán)或許可。
轉(zhuǎn)售的ST 產(chǎn)品如有不同于此處提供的信息的規(guī)定,將導(dǎo)致ST 針對該產(chǎn)品授予的任何保證失效。
ST 和ST 徽標(biāo)是ST 的商標(biāo)。所有其他產(chǎn)品或服務(wù)名稱均為其各自所有者的財(cái)產(chǎn)。
本文檔中的信息取代本文檔所有早期版本中提供的信息。
文章來源:微信公眾號 融創(chuàng)芯城(一站式電子元器件、PCB、PCBA購買服務(wù)平臺,項(xiàng)目眾包平臺)
作者: yhy08090 時(shí)間: 2021-9-28 14:10
然后呢?貼就沉了啊
作者: yhy08090 時(shí)間: 2021-9-28 15:03
為什么就沒有內(nèi)容了呢,我現(xiàn)在遇到問題了
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |