串口是MCU最重要的一個通信端口,幾乎所有的嵌入式產品都會用到串口,可能是產品預研的時候用來調試,可能是與某一個外設連接收發數據,還可能用來對產品進行固件升級。這篇文章主要給大家介紹一下如何用串口進行調試,也就是打印log。
打印log最常用的方法是printf,所以要解決的問題是將printf的輸出重定向到串口,然后通過串口將數據發送出去。
首先要配置串口,串口的配置包括:
1、 開啟串口和GPIO時鐘
2、 GPIO引腳模式配置
3、 串口波特率、數據位、停止位、校驗位的配置
4、 使能串口
代碼如下(使用stm32 LL庫):
此時,已經可以通過串口來收發數據了,但是只能通過庫函數一個一個從數據寄存器讀寫單個字符,非常的不方便。
下面說一下如何重定向printf。這里我在Ubuntu下用make編譯源碼,所以重定向的方式與用keil有所區別。
首先要在源碼文件開頭包含頭文件#include ,然后在串口初始化時調用setvbuf(stdout, NULL, _IONBF, 0),設置buffer緩存為0,這樣一有數據就發送,不然會等到緩存滿或有回車換行符才發送。如果沒有這句,你的printf又沒n,log就會打不出來。
接下來是重定向的代碼
這里有兩個地方需要注意,第一,用gcc編譯需要加_write()函數,然后在函數內部調用__io_putchar()函數將字符串一個一個發送出去。第二,使用LL庫發送數據,要查看發送寄存器是否為空或者發送是否完成標志,否則發的太快會導致前面的數據還沒發完,后邊的數據又來了,后邊的覆蓋掉前面的,導致發送錯誤。
到此,就可以盡情使用printf調試了。
-
mcu
+關注
關注
146文章
17019瀏覽量
350373 -
時鐘
+關注
關注
10文章
1721瀏覽量
131377 -
調試
+關注
關注
7文章
574瀏覽量
33899 -
串口
+關注
關注
14文章
1547瀏覽量
76229 -
GPIO
+關注
關注
16文章
1196瀏覽量
51927
發布評論請先 登錄
相關推薦
評論