一、串口啟用流程
開講前,先找?guī)卓?a href="http://www.xsypw.cn/v/tag/137/" target="_blank">芯片的串口demo程序瞄一眼。
依次有STM32的V3.5標(biāo)準(zhǔn)庫、nRF52832的官方demo以及51核的STC15系列單片機的官方DEMO。
從以上的部分demo例程來看,在啟用串口的時候,需要配置的那幾個參數(shù)有波特率、數(shù)據(jù)位、校驗位、停止位等,從demo的源碼中也是能夠體現(xiàn)出來的。
而略有不同的是,在引腳配置靈活的ARM中,需要針對引腳進行配置。
二、驗證輸入輸出
完成了串口的初始化,即可對輸入輸出進行操作,來驗證串口是否可以正常的發(fā)送和接收數(shù)據(jù)。
一般的,最直接的方式就是向輸出寄存器寫入數(shù)據(jù),就可以讓芯片去完成UART信號輸出到對應(yīng)的引腳上。
如下圖依次有STM32的V3.5標(biāo)準(zhǔn)庫、nRF52832的官方demo以及51核的STC15系列單片機的官方DEMO。
驗證串口的輸出,即在串口初始化成功后,對串口的輸出寄存器寫入數(shù)據(jù),而芯片引腳則使用USB轉(zhuǎn)TTL模塊連接,USB端插入計算機的USB口,利用計算機的串口助手軟件實現(xiàn)對數(shù)據(jù)的收發(fā)。
三、調(diào)試-輸出
開發(fā)調(diào)試過程中,輸出的內(nèi)容基本上就是想查看的變量值、代碼的執(zhí)行位置跟蹤、算法或者某些運算的結(jié)果等等。這些輸出,僅用于調(diào)試階段,而在人機調(diào)試過程中,使用計算機的串口助手軟件進行交互,則輸出的數(shù)據(jù)應(yīng)該便于識讀和判斷。
1. C庫函數(shù)printf格式輸出重定向到串口輸出
輸出串口數(shù)據(jù)過程中,需要向寄存器逐字節(jié)傳入數(shù)據(jù)的,而在傳送之前必不可少的,就是將要發(fā)送的數(shù)據(jù)、字符放到同一個Buffer后,執(zhí)行輪詢的方式傳送直到buffer內(nèi)容全部被傳送。
而這個“放”的過程也是需要做些計算、判斷,尤其是增加必要的字符來描述輸出信息,保證信息的可識讀。
在C標(biāo)準(zhǔn)庫printf函數(shù)就有格式輸出的功能,利用這個接口更便于調(diào)試輸出這個過程。
這就需要將printf函數(shù)重定向到串口輸出上!
實現(xiàn)重定向只需3步:
- Options for target選項卡內(nèi)勾選UseMicroLIB
-
- 在串口實現(xiàn)的 .c文件內(nèi),將stdio.h文件和stdarg.h文件包含進來* *
- 重新定義int fputc函數(shù)的內(nèi)部實現(xiàn)
完成以上3步,即可利用printf函數(shù)來格式化輸出,并且能夠在串口上接收到。
2. ANSI C標(biāo)準(zhǔn)中有幾個標(biāo)準(zhǔn)預(yù)定義宏:
LINE :源代碼中的行號(字符串形式)
FILE :當(dāng)前*.c源碼文件的文件名(字符串形式)
DATE :編譯日期(字符串形式)
TIME :編譯時間(字符串形式)
STDC :當(dāng)要求程序嚴格遵循ANSI C標(biāo)準(zhǔn)時該標(biāo)識被賦值為1;
__cplusplus:當(dāng)編寫C++程序時該標(biāo)識符被定義。
有了上一步實現(xiàn)printf函數(shù)的重定向到串口后,基本就可以完美使用串口進行調(diào)試程序。
調(diào)試過程中可利用ANSIC標(biāo)準(zhǔn)中的內(nèi)置宏,比如__LINE__可以很方便跟蹤代碼執(zhí)行到哪一行。
四、調(diào)試-輸入
串口的接收,有輪詢、中斷、DMA等方式。
輪詢方式,特點是消耗芯片資源,否則容易丟數(shù)據(jù);
中斷方式,特點是響應(yīng)快、資源占用低;
DMA方式,各個芯片的配置不同而無法每款芯片都有該功能,所以代碼兼容性可移植性較差。
一般地,對輸入的數(shù)據(jù)進行分析判斷時,如果是輪詢的方式,則直接在收到后即判斷;中斷和DMA方式,都可以考慮存到buffer后再分析處理。
五、初見數(shù)據(jù)協(xié)議解析
如果是簡單幾個字符的指令,可以用上述那樣簡單判斷,但是在稍微中等級別的工程項目中,用那樣的方式都已經(jīng)很不便于處理和擴展了。
比如有一串?dāng)?shù)據(jù),并且長度不確定,將會超過10個字節(jié)、20個字節(jié)、100個字節(jié)甚至更多,那么這時候就必須使用協(xié)議解析的方式。
通常的,數(shù)據(jù)協(xié)議都會有協(xié)議頭、長度、校驗、數(shù)據(jù)內(nèi)容等部分組成,數(shù)據(jù)將以包的形式進行收發(fā),這時候使用解析的方式,對數(shù)據(jù)包進行解析。
這就是廣泛使用的“ 起始式協(xié)議 ”。
實際的產(chǎn)品中有IC/ID讀卡器模塊的接口協(xié)議:
也有使用在PM2.5傳感器上的:
這些都屬于開發(fā)的模塊產(chǎn)品,對外使用串口通信,并且數(shù)據(jù)協(xié)議采樣了“起始式”的幀結(jié)構(gòu)模式。
-
寄存器
+關(guān)注
關(guān)注
31文章
5359瀏覽量
120784 -
STM32單片機
+關(guān)注
關(guān)注
59文章
549瀏覽量
58750 -
射頻讀卡器
+關(guān)注
關(guān)注
0文章
4瀏覽量
6606 -
nRF52832
+關(guān)注
關(guān)注
11文章
206瀏覽量
32371 -
嵌入式通信
+關(guān)注
關(guān)注
0文章
2瀏覽量
2146
發(fā)布評論請先 登錄
相關(guān)推薦
評論