在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

一個隱秘的串口中斷BUG案例分享

嵌入式USB開發(fā) ? 來源:嵌入式USB開發(fā) ? 作者:嵌入式USB開發(fā) ? 2023-09-19 14:05 ? 次閱讀

本文轉(zhuǎn)自公眾號,歡迎關(guān)注
https://mp.weixin.qq.com/s/uzaGLFTDBAn8wyR84yaiIw

一. 前言

本文分享一個STM32L4平臺串口驅(qū)動比較隱秘的BUG,分享的目的不在結(jié)論本身,而在于問題的分析過程,和如何形成標(biāo)準(zhǔn),形成checklist,避免類似問題,以及在嵌入式開發(fā)中的思想。

二.問題描述

在某個項(xiàng)目代碼時發(fā)現(xiàn)以下問題, 串口中斷處理函數(shù)中,只對IDLE和RXNE標(biāo)志進(jìn)行了處理,而對溢出標(biāo)志沒有處理。 根據(jù)手冊描述如果使能接收非空中斷即RXNEIE=1時,則有ORE標(biāo)識溢出時也會進(jìn)入中斷,該標(biāo)志需要手動清除,如果不清除則會反復(fù)進(jìn)入中斷。項(xiàng)目中是使能接收非空中斷的即RXNEIE=1。

圖片

圖片

三.問題驗(yàn)證

在中斷服務(wù)函數(shù)中打斷點(diǎn),然后串口調(diào)試助手輸入1個字符,進(jìn)入中斷處理函數(shù)

圖片

此時ORE為0,RXN=1表示收到數(shù)據(jù)無溢出。

然后串口調(diào)試助手中輸入多個數(shù)據(jù),然后再運(yùn)行程序。

圖片

再次進(jìn)入中斷,此時ORE置位,由于沒有對ORE標(biāo)志清除,所以會一直進(jìn)中斷,導(dǎo)致程序運(yùn)行異常。

四.修改

對ORE標(biāo)志進(jìn)行清除,一般的清除時序是讀SR再讀DR 再寫1清除ORE標(biāo)志。

圖片

再進(jìn)行上述測試,ORE在每次中斷后都會清除,不再會出現(xiàn)該情況。

圖片

圖片

正確的處理應(yīng)該如下:即只要有任何標(biāo)志則清除相應(yīng)的標(biāo)志。

圖片

五.總結(jié)

1.中斷服務(wù)函數(shù)一般要清除所有的標(biāo)志,而不是只清除自己關(guān)心的標(biāo)志。但是要考慮可能會清掉別人沒有處理掉的標(biāo)志,所以具體問題具體分析。

2.中斷服務(wù)函數(shù)清標(biāo)志一定要按照手冊要求時序,有些是寫0清除,有些是寫1清除,有些是先讀狀態(tài)寄存器再讀數(shù)據(jù)寄存器清除等等。

3.一定要考慮異常,一般情況下沒有異常不代表任何情況沒有異常,溫度等環(huán)境改變則可能偶然的異常變?yōu)楸厝坏腻e誤。

4.一定要測試異常,實(shí)際該問題可以測試。比如結(jié)合仿真器白盒測試,也可以比如模擬RX引腳一直拉低模擬異常,生成任意PWM波形到RX引腳模擬干擾數(shù)據(jù),模擬大負(fù)載等進(jìn)行黑盒測試。

5.如果串口是先初始化使能,然后啟動Freertos時才使能中斷,那么使能中斷前可能就已經(jīng)有溢出ORE錯誤了。這個問題是隨機(jī)的,出現(xiàn)概率小,一出現(xiàn)就會導(dǎo)致系統(tǒng)不能啟動的假象,如果RX引腳浮空,或者上電瞬間有干擾,或者高低溫等環(huán)境因素改變導(dǎo)致RX引腳出現(xiàn)干擾數(shù)據(jù)的概率增加,則可能導(dǎo)致每次啟動都失敗原項(xiàng)目從代碼注釋來看初始化位置修改過了,應(yīng)該就是遇到過這個問題改的,但是系統(tǒng)啟動前還進(jìn)行了一大段外設(shè)初始化也需要考慮除了串口外其他外設(shè)是否有該問題。

6.不排除該問題與之前的接上串口導(dǎo)致不能啟動等問題相關(guān),并且有高溫等可能更容易出現(xiàn)的情況,實(shí)際高溫應(yīng)該跟波特率無關(guān),而可能是高溫更容易產(chǎn)生干擾數(shù)據(jù)等。

7.對于使用RTOS的系統(tǒng),不要在OsStart之前初始化驅(qū)動使能外設(shè),因?yàn)橐话鉕sStart之前都是不使能中斷的,OsStart之前使能外設(shè)則再使能中斷的一剎那可能會出現(xiàn)未預(yù)料的中斷導(dǎo)致異常。

從原項(xiàng)目代碼注釋來看應(yīng)該是遇到過這個問題后面改了,使能接收改到了初始化任務(wù)中。

圖片

但是從原項(xiàng)目代碼來看main函數(shù)之后,系統(tǒng)啟動之前還是進(jìn)行了太多的處理,甚至進(jìn)行了文件系統(tǒng)的操作等,這種處理比較危險,建議除了系統(tǒng)啟動必要的初始化其他的都放在初始化任務(wù)重初始化。

圖片

如系統(tǒng)啟動前只進(jìn)行底層系統(tǒng)必要初始化然后創(chuàng)建shell任務(wù),其他初始化都在shell任務(wù)中進(jìn)行。

圖片

7.解決問題一定要找到根本原因而不是消除現(xiàn)象,比如上述問題原來項(xiàng)目其實(shí)發(fā)現(xiàn)有問題但是都是在修改串口初始化位置消除現(xiàn)象,而沒有去找根本原因。這在嵌入式開發(fā)中是大忌。

審核編輯:湯梓紅

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

    關(guān)注

    5120

    文章

    19408

    瀏覽量

    312318
  • 中斷
    +關(guān)注

    關(guān)注

    5

    文章

    902

    瀏覽量

    42301
  • 串口
    +關(guān)注

    關(guān)注

    14

    文章

    1578

    瀏覽量

    78210
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4361

    瀏覽量

    63643
  • BUG
    BUG
    +關(guān)注

    關(guān)注

    0

    文章

    156

    瀏覽量

    15869
收藏 人收藏

    評論

    相關(guān)推薦

    外部中斷串口中斷問題

    目標(biāo) :今天試著編寫了 兩外部中斷 分別往串口發(fā)a和b串口接收
    發(fā)表于 04-28 09:59

    51單片機(jī)串口中斷使用總結(jié)

    51單片機(jī)串口中斷使用總結(jié),有程序,可以參考。
    發(fā)表于 03-28 10:00 ?13次下載

    串口中斷丟失數(shù)據(jù)問題

    關(guān)于51單片機(jī),串口中斷發(fā)送與接收出現(xiàn)數(shù)據(jù)丟失問題串口中斷的接收器具有雙緩沖結(jié)構(gòu),即在從接收寄存器中讀出前已收到的字節(jié)之前,便能接收第2
    發(fā)表于 02-17 00:13 ?3719次閱讀

    單片機(jī)學(xué)習(xí)教程之外部中斷和定時器及串口中斷的資料和程序說明

    本文檔的主要內(nèi)容詳細(xì)介紹的是單片機(jī)學(xué)習(xí)教程之外部中斷和定時器及串口中斷的資料和程序說明。CPU收到中斷請求,停下正在處理的工作A,去處理事件B,處理完后繼續(xù)回到中斷的地方繼續(xù)執(zhí)行事件A
    發(fā)表于 04-18 17:27 ?5次下載
    單片機(jī)學(xué)習(xí)教程之外部<b class='flag-5'>中斷</b>和定時器及<b class='flag-5'>串口中斷</b>的資料和程序說明

    STM32串口中斷 DMA接收的幾點(diǎn)注意地方

    STM32串口中斷、DMA接收的幾點(diǎn)注意地方
    的頭像 發(fā)表于 03-04 13:57 ?2.1w次閱讀

    Arduino的實(shí)驗(yàn)例程之串口中斷的程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是Arduino的實(shí)驗(yàn)例程之串口中斷的程序免費(fèi)下載。
    發(fā)表于 02-25 17:39 ?13次下載

    IAP15F2K61S2串口中斷快速編程問題

    在講串口中斷問題之前,需要明白串口中斷內(nèi)容包括哪些部分,我概括為主要3部分:串口中斷的初始化,串口
    發(fā)表于 11-23 17:36 ?10次下載
    IAP15F2K61S2<b class='flag-5'>串口中斷</b>快速編程問題

    STM32使用CubeMAX配置的串口中斷接收方法

    STM32使用CubeMAX配置的串口中斷接收方法目錄1.定位串口中斷發(fā)生的地方2.處理串口中斷接收的流程是:(1)初始化串口(2)在main中第
    發(fā)表于 12-14 18:45 ?28次下載
    STM32使用CubeMAX配置的<b class='flag-5'>串口中斷</b>接收方法

    STM32f103------串口中斷及其配置

    提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔STM32f103------串口中斷及其配置使能串口時鐘和GPIO時鐘配置GPIO(TX、RX)配置串口開啟中斷,初始
    發(fā)表于 12-27 19:30 ?22次下載
    STM32f103------<b class='flag-5'>串口中斷</b>及其配置

    串口中斷服務(wù)函數(shù)的觸發(fā)

    串口中斷服務(wù)函數(shù)的觸發(fā)USART1_IRQHandler(void)1. 串口發(fā)送中斷下圖為狀態(tài)寄存器(USART_SR)中的位7、位6說明,發(fā)送完幀并且發(fā)送數(shù)據(jù)寄存器為空時,位6置
    發(fā)表于 12-28 19:01 ?19次下載
    <b class='flag-5'>串口中斷</b>服務(wù)函數(shù)的觸發(fā)

    STM32G0開發(fā)筆記:串口中斷的使用

    使用Platformio平臺的libopencm3開發(fā)框架來開發(fā)STM32G0,以下為串口中斷的使用。
    的頭像 發(fā)表于 01-17 10:46 ?2658次閱讀

    STM32串口中斷應(yīng)用實(shí)例

    本文將介紹如何使用STM32F4的串口接收中斷,通過串口助手模擬上位機(jī)發(fā)送指令、STM32F4串口中斷接收到指令后根據(jù)指令選擇開關(guān)LED小燈。
    的頭像 發(fā)表于 04-20 11:45 ?2583次閱讀
    STM32<b class='flag-5'>串口中斷</b>應(yīng)用實(shí)例

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

    STM32串口中斷及DMA接收常見的幾個問題
    的頭像 發(fā)表于 10-26 16:41 ?4096次閱讀
    STM32<b class='flag-5'>串口中斷</b>及DMA接收常見的幾個問題

    串口中斷需要清除標(biāo)志位嗎,串口中斷標(biāo)志位會自動清除嗎

    在電子通信領(lǐng)域,串口中斷作為種重要的通信機(jī)制,廣泛應(yīng)用于各種嵌入式系統(tǒng)和計(jì)算機(jī)設(shè)備中。串口中斷標(biāo)志位的管理,尤其是是否需要手動清除以及是否會自動清除,是理解和實(shí)現(xiàn)串口通信的關(guān)鍵環(huán)節(jié)。
    的頭像 發(fā)表于 01-29 14:59 ?879次閱讀

    串口中斷是內(nèi)部中斷還是外部中斷串口中斷是怎么觸發(fā)的

    串口中斷通常被視為外部中斷。雖然串口控制器(如USART、UART等)可能集成在微控制器或處理器的內(nèi)部,但從中斷的角度來看,串口中斷是由處理
    的頭像 發(fā)表于 01-29 15:03 ?951次閱讀
    主站蜘蛛池模板: 国产嫩草影院在线观看 | 怡红院日本 | 萌白酱香蕉白丝护士服喷浆 | 午夜免费观看福利片一区二区三区 | 四虎免费影院4hu永久免费 | 国产午夜视频在线观看网站 | 一级毛片在线 | 日产国产精品亚洲系列 | 国产免费好大好硬视频 | 天天拍夜夜添久久精品中文 | 在线观看黄日本高清视频 | 狠狠干狠狠爱 | 黄色在线观看视频网站 | 奇米影视亚洲四色8888 | 一级日本高清视频免费观看 | 久久精品国产精品亚洲红杏 | 一级做a爱片特黄在线观看 一级做a爱片特黄在线观看免费看 | 男人的视频网站 | 不卡午夜 | 在线观看视频色 | 看片在线 | 亚洲国产精品久久精品怡红院 | 亚洲成a人一区二区三区 | 91九色porny蝌蚪 | 亚洲天天做日日做天天欢毛片 | 美女网站一区二区三区 | 亚洲国产精品国产自在在线 | 激情综合五月网 | 亚洲一卡2卡3卡4卡5卡乱码 | 嫩草影院www | 午夜骚 | 国产精品久久国产三级国不卡顿 | 最新版天堂资源8网 | 国产手机在线国内精品 | 人人澡人| 九九热国产 | 男人j进人女人j 的视频 | 五月婷婷六月天 | 午夜免费福利影院 | 亚洲国产日韩欧美在线as乱码 | 国产成人综合网 |