stm32串列埠通訊 飛控應用

2021-07-26 20:07:30 字數 1953 閱讀 5269

一.串列埠簡介串列埠通訊是非常常見的一種序列通訊方式,在無人機上我們可以通過電腦的串列埠除錯工具與飛機上的微控制器進行通訊以及傳送資料。其傳送資料有通用的協議,由傳送方的txd傳送到接收方的rxd,其協議層也規定了資料報的格式,如圖所示,包括起始位、資料主體、校驗位以及停止位。

這也就要求接收方與傳送方對應的資料格式包括奇偶校驗位等一定要約定一致,才可以成功通訊。如果我們的通訊方式為非同步通訊,由於沒有時鐘訊號,我們還要提前約定好乙個統一的波特率,其實不用知道波特率是如何計算出的,因為stm32官方的韌體庫中有相應函式會幫我們計算,我們只需記住常用的波特率即可:4800、9600、115200。

二.usart功能框圖

串列埠的功能框圖無疑是最核心的部分,掌握框圖,對有乙個清晰的程式設計思路也有很大的幫助。下面介紹一下usart功能框圖。

這個框圖取自官方中文手冊,主要有四部分構成:

1.引腳端:其實在這裡我接觸到的只有傳送引腳和接收引腳,即tx和rx。我們在接收傳送資料時好像一般都是用軟體處理,用不到硬體流控制,暫時是這樣。這裡還涉及到乙個問題,對於stm32來說,有十幾組gpio,上百個引腳,我們怎麼知道哪個是接收,哪個是傳送。其實在英文資料手冊中就可以查到每個引腳的復用功能。在用到相應的引腳,對其初始化即可。

2.資料暫存器:這也是資料傳送接收的核心部分,我們應該熟悉相應暫存器。在框圖中我們可以看到,這部分有兩條通道,一條是傳送資料,一條是接收資料,下面進行介紹。

首先是資料傳送,首先是cpu將資料傳送到傳送資料暫存器中,一般為八位資料字長,即uint8_t,由於是序列通訊所以資料是一位一位傳送的。接下來,傳送資料暫存器會將這個資料傳送到傳送移位暫存器,當傳送完時,在狀態暫存器usart_sr中的txe位會置1,當我們使能usart_cr1中的txeie位,則傳送資料暫存器為空時會產生中斷,我們可以通過編寫中斷服務函式來告訴微控制器中斷時乾點啥。然後傳送移位暫存器會將資料傳到傳送引腳,將資料傳給串列埠外設。同樣,當傳送移位暫存器為空時,也可以產生相應中斷,其暫存器對應的位叫tc位,當然還是要先使能usart_cr1中的tcie位。

3.控制器:其實在第二部分我們已經介紹了,其對應的暫存器就是usart_crx,值得注意的是傳送器有兩個中斷,乙個是傳送資料暫存器為空,乙個是傳送移位暫存器為空,但接收器只有乙個中斷,就是接收為空。

4.波特率生成器:這一部分上面也說了,個人覺得不必過分學習,在框圖中也可以推得計算公式:

三.飛控中的串列埠通訊

個人認為其中最重要的就是中斷服務函式的編寫,以**摘自烈火開源飛控,對其做了詳細的注釋。

void usart1_irqhandler(void)

if(usart1->sr & usart_sr_tc)//檢查傳送移位暫存器是否傳送完成,若完成則產生中斷 }

if(usart1->sr & usart_sr_rxne)//檢查是否接收到資料,若接收非空則產生中斷

}

其中需要說明的是,在編寫中,我們如何能區分此時的資料暫存器是作接收還是傳送呢?我的小技巧是如果當暫存器為左運算元就是傳送資料,如果為右運算元那麼就是接收資料。

stm32串列埠通訊

通訊方式 1 同步通訊 帶時鐘同步訊號傳輸 spi,iic等 2 非同步通訊 不帶時鐘用途訊號 usrt,單匯流排 stm32串列埠引腳表 串口號 rxd txd 1 pa10 pa9 2 pa3pa2 3 pb11 pb10 4 pc11 pc10 5 pd2pc12 通訊過程 接收過程 由rx入...

STM32串列埠通訊

1.常用的串列埠相關暫存器 1 usart sr狀態暫存器,對應的庫函式 flagstatus usart getflagstatus usart typedef usartx,uint16 t usart flag 2 usart dr資料暫存器,對應的庫函式 void usart senddat...

STM32串列埠通訊

串列埠作為mcu最重要的外部介面,同時也是軟體開發重要的除錯手段,其重要性不言而喻。在這裡我們主要從庫函式的角度來講述如何設定串列埠,來達到最基本的通訊功能。串列埠的設定一般可以歸結為以下幾個步驟 1 串列埠時鐘使能,gpio時鐘使能。2 設定引腳復用器對映,呼叫gpio pinafconfig函式...