大家好,很高興和各位一起分享我的第45篇原創(chuàng)文章,喜歡和支持我的工程師,歡迎給我點贊、收藏、分享。
加微信[xyzn3333]與作者溝通交流,免費獲取更多單片機與嵌入式的海量電子資料。
歡迎關注【玩轉(zhuǎn)單片機與嵌入式】公眾號,回復關鍵字獲取更多免費資料。
回復【3D封裝庫】,常用元器件的3D封裝庫;
回復【電容】,獲取電容、元器件選型相關的內(nèi)容;
回復【阻抗匹配】,獲取電磁兼容性、阻抗匹配相關的資料
回復【資料】,獲取全部電子設計、單片機開發(fā)相關的資料
回復【終端電阻】,獲取CAN終端電阻相關的資料
回復【單片機】,獲取單片機全套視頻教程和參考設計
回復【STM32】,獲取STM32相關設計和視頻教程
回復【PCB】,獲取PCB設計相關的資料
回復【硬件知識】、【硬件設計】,獲取硬件開發(fā)工程必備手冊
回復【經(jīng)典電路】,獲取5000個經(jīng)典電路
回復【論文】,獲取畢業(yè)設計、電子競賽、學術專業(yè)等相關論文資料
…………
歡迎關注【玩轉(zhuǎn)單片機與嵌入式】公眾號,本公眾號會以連載的形式對電容進行深入講解,歡迎持續(xù)關注。
0、前言
某天,正在公司專心上班,為了一行代碼應該如何優(yōu)化絞盡腦汁;突然接到售后服務同事的電話:"告訴你一個不好的消息,xx客戶處的設備,出現(xiàn)上電后慢速行駛燈會無規(guī)律閃爍的情況"。
由于從事的行業(yè)比較特殊,任何的異常都有可能導致涉及人命的安全事故;再加上“事出異常必有妖”,這種心態(tài)的作用??蛻舴答伒氖虑樗查g提升到最高優(yōu)先級。
趕緊放下手頭事情,整個人被“中斷”出去處理緊急異常事故。
1、故障復現(xiàn)
按照現(xiàn)場的工作條件,在公司搭建測試環(huán)境后,發(fā)現(xiàn)異常果然存在。但是只在A設備搭配B設備通信時出現(xiàn)異常。
2、排查事故影響范圍
由于閃爍的是慢速行駛燈,若正常在快速行駛狀態(tài)中,突然出現(xiàn)慢速行駛,會由于突然的速度變化導致不可預估的風險;
在測試中發(fā)現(xiàn),僅僅是指示燈閃爍了一下,但實際行走模式未發(fā)生改變。懸著的心突然有了一絲絲安慰。
3、排查原因及步驟
1、A設備燈的狀態(tài)是由B設備的工作模式來決定,B設備將自身的工作模式和模式狀態(tài)實時(每10ms)發(fā)送給A設備,A設備僅僅負責根據(jù)數(shù)據(jù)執(zhí)行即可。
2、監(jiān)聽A設備和B設備通信的數(shù)據(jù),發(fā)現(xiàn)B設備發(fā)送數(shù)據(jù)有丟失。按照理論來看,B設備發(fā)送數(shù)據(jù)有丟失,A設備應該不解析本報數(shù)據(jù),本次10ms周期不進行指示燈狀態(tài)切換即可,不應該出現(xiàn)閃爍。
3、模擬B設備故意每次均少發(fā)指示燈狀態(tài)的數(shù)據(jù);現(xiàn)象為A設備的指示燈完全不亮,符合邏輯;
4、模擬B設備僅少發(fā)1個周期的指示燈狀態(tài)數(shù)據(jù),其余周期正常;測試現(xiàn)象與故障現(xiàn)場的現(xiàn)象完全一致,B設備數(shù)據(jù)導致導致了本次事故。
5、基于以上的分析,將問題鎖定在2個方向:
-
B設備為什么會丟失數(shù)據(jù)?
-
B設備丟失數(shù)據(jù)時,A指示燈為何會閃爍?
4、問題的根源定位
檢查A設備的程序后,很快發(fā)現(xiàn)了問題原因:僅丟失一包數(shù)據(jù)時,由于后面的數(shù)據(jù)校驗錯誤,解析數(shù)據(jù)時將CRC值當做正常數(shù)據(jù)進行了解析;
通過更新A設備的程序,故障不再復現(xiàn)。
檢查B設備的程序查找數(shù)據(jù)丟失的根本原因。因為簡單的知識點盲區(qū),卡住了2天。最終查到的問題原因如下:
B設備發(fā)送使用了串口發(fā)送中斷,更改前的流程:
更改后的流程:
5、知識點掃盲
STM32的串口發(fā)送中斷是TC,即Transmission Complete。發(fā)送一個字節(jié)后才進入中斷,這里稱為“發(fā)送后中斷”。和原來8051的TI方式一樣,都是發(fā)送后才進中斷,需要在發(fā)送函數(shù)中先發(fā)送一個字節(jié)觸發(fā)中斷。并不是開啟發(fā)送中斷后自動進入發(fā)送中斷。
End