微控制器用了很多年,也做過很多案例,有做心得筆記的習慣,以此分享給大家。
一 、靈動微mm32f103+串列埠點對點雷射雷達實現電單車後測距系統
專案採用上海靈動微的mm32f103 m3晶元,用串列埠1~3,連線3個點對點的雷射模組,實現到魔托車正後方與後左右兩邊各30度的測距,目的是在後方10公尺內出現車子等障礙物時,根據障礙物的距離,前後指示燈做出閃光等警示動作,提醒後車及電單車手注意。
程式除錯過程**現以下問題:
1.程式總是出現收到資料延後,查程式,用dma,中斷等方式接收都是這樣,後來用中斷接收發現,程式總是進入if(uart_getitstatus(uart1, uart_it_err) != reset),說明串列埠出現大量錯誤,用邏輯分析儀採集,發現串列埠資料是對的,只是將採集頻率用1m去採集,顯示雷達發出的資料幀錯誤,2m就不會,懷疑雷達的timer不准,問廠家,雷達內沒有用晶振,且這邊主機板上也沒有用晶振,兩邊誤差一加起來,可能就超過了串列埠的允許誤差,為了驗證這個問題,工作時將晶元加熱,果然更嚴重,將波特率改為9600,有會所改善,但還是不能解決這個問題,將主機板重新設計,加上晶振,這個問題解決。
此問題的最終原因是,晶元與led指示燈是同一塊板子上,指示燈又很多,指示燈點亮時,板子很快就會發熱,熱了後,mcu內部的振盪器會出現偏差,導致串列埠波特率誤差太大,不斷出現資料錯誤,所以以加晶振來解決。
心得:對於類似於串列埠通訊這種對時鐘精度較嚴格的應用,最好還是使用晶振,以免以後出現問題。
2.改過後的主機板,串列埠不出錯,但工作一段時間,隨機出現宕機,用**器**,宕機後停止程式,發現程式停在以下,出現harkfault
同時發現,雷達照近距離物體,所有燈全亮時,很快出現這個問題,於是將串列埠與dma全部disable掉,只是led燈工作,加熱晶元,馬上宕機,但**器出現以下
懷凝是不是所有io上的總電流太大,因為所有io規格不能大於25ma,查電路圖發現io驅動led的電阻,有4個錯成1k,這4路就有17ma的電流,將這些電阻改為10k,工作一下午,再也沒有出現harkfault,問題解決。
心得:所有指示燈有28顆led,這時就要考慮所有io上的總電流不能超過晶元的規格值,本例問題出在有4個led燈的限流電阻出錯,造成io總電流超限,出現莫名其妙的錯誤。
微控制器中段程式 微控制器程式的存放
1 對於燒錄在微控制器裡面的程式,程式的 段,data段,bss段,rodata段等都存放在微控制器的flash中。當微控制器上電後,初始化彙編 將data段,bss段,複製到微控制器的ram中,並建立好堆疊,開始呼叫程式的main函式。以後,便有了程式儲存器和資料儲存器之分,程式執行時從flash...
微控制器中段程式 51微控制器中斷程式大全
例項 用定時器 t0查詢方式p2口 位控制led 閃爍 include 包含微控制器暫存器定義的標頭檔案 void main void ea 1 開總中斷 et0 1 定時器t0 中斷允許 tmod 0x01 使用定時器 t0的模式 th0 65536 46083 256 定時器t0 的高位賦初值 ...
微控制器中段程式 微控制器中乙個程式的執行過程
微控制器中乙個程式的執行過程 微控制器中乙個程式的執行過程分為取指令,分析指令和執行指令幾個步 驟。取指令的任務是 根據程式計數器 pc中的值從程式儲存器讀出現行指 令,送到指令暫存器。分析指令階段的任務是 將指令暫存器中的指令操作碼取出後進行解碼,分析其指令性質。如指令要求運算元,則尋找運算元位址...