stm32 串口中斷讀取一幀數(shù)據(jù)(中斷接收不定長數(shù)據(jù))
單片機(jī)開發(fā)板上的例程中對串口講解大都很簡單.
通常只會講解收發(fā)操作.就是接收一個字符,然后把這個字符發(fā)送出去.
但是在實(shí)際應(yīng)用串口中通常是用于接收指令或發(fā)送指令的.
這就需要用到"幀"的概念了.
其實(shí)說的更白話一點(diǎn),就是接收一條指令.這里一幀就是一條指令.

通常接收一幀,如果有包頭和包尾的數(shù)據(jù)還好,就是弄一個環(huán)形的緩存,無論串口傳過來是什么,統(tǒng)統(tǒng)接收,然后在根據(jù)包頭和包尾去摘出其中的一條完整數(shù)據(jù),但是如果一個器件沒有包頭或包尾,并且傳過來的數(shù)據(jù)是不定長的?,這時就需要用到接收一幀的功能了.
這個功能自己編寫起來是比較麻煩的,stm32單片機(jī)集成了硬件上判斷一幀的功能(IDLE).

用起來也很簡單,(我這里用了條件編譯)
首先配置串口的引腳:

然后配置串口功能:(這里也打開了串口中斷)

注意:上面打開中斷,用了兩條語句,

配置串口的nvic:

經(jīng)過上面這些,串口的功能基本配置好了.
下面就是串口的中斷函數(shù)了.


參考文檔:
https://blog.csdn.net/qq_43765237/article/details/107599234
http://www.voidcn.com/article/p-wtykumrm-bag.html
標(biāo)簽: