在嵌入式開發領域講的串列埠通常指的是uart,uart即為通用非同步收發傳輸器(universal asynchronous receiver/transmitter)。是一種通用序列資料匯流排,用於非同步通訊。該匯流排雙向通訊,可以實現全雙工傳輸和接收。
uart常常用於兩個微控制器之間進行資料傳輸,如下圖所示。
其通訊過程如下圖所示。
stm32f103提供了3路串列埠,支援同步單線通訊和半雙工單線通訊、支援lin、支援數據機操作、智慧卡協議和irda sir endec規範、具有dma等。可配置為串列埠的引腳是有限制的,所以在設計硬體電路時需要注意哪些引腳可以配置為串列埠引腳,如下表所示。
串列埠管腳對映
串口號rxd
txd1
pa10
pa92
pa3pa2
3pb11
pb10
串列埠通訊過程中一幀資料報含了起始位、資料位、停止位以及可有可無的奇偶校驗位,除了需要知道這些概念外,還需要理解波特率的概念。
起始位,當未有資料傳送時,資料線處於邏輯「1」狀態;先發出乙個邏輯「0」訊號,表示開始傳輸字元;
資料位,緊接著起始位之後的8個資料。從最低位開始傳送;
奇偶校驗位,一般不用;
停止位,一般為1位(也可以是1.5位或者2位),為高電平。作為結束的標誌;
波特率,波特率表示每秒鐘傳送的碼元符號的個數,是衡量資料傳送速率的指標。
如下圖所示,為一幀串列埠資料的幀組成。
stm32f103與串列埠相關的暫存器眾多,這裡只講解重要的幾個暫存器。
usart_sr:狀態
暫存器,
如下圖所示
需要了解的位有:txe:傳送暫存器為空;tc:傳送完成;rxne:讀取資料暫存器不為空;ore:上溢錯誤;fe:幀錯誤;pe:奇偶校驗錯誤。
usart_dr
:該暫存器只有低8位有效,而且具有讀寫操作,有關該暫存器中的資料
是要傳送的資料還是接受到的資料取決於執行的操作是「讀取」還是「寫入」。 如下圖所示
usart_brr:波特率暫存器,用於設定串列埠通訊的波特率,如下圖所示:
其中在暫存器中會設定相應的值,div_mantissa[11:0]用來設定分頻係數的整數部分,div_fraction[3,0]用來設定分頻係數的小數部分。
串列埠的波特率計算公式如下:
這裡的fpclkx(x=1、2)是給外設的時鐘(pclk1用於usart2、3、4、5,pclk2用於usart1,這裡stm32f103cbt6沒有的串列埠就不講解)。usartdiv是乙個無符號的浮點數。假設串列埠波特率為115200,使用的是串列埠1,串列埠的時鐘為pclk2的時鐘(即apb2匯流排的時鐘)為72mhz,如下圖所示。
根據公式可得:
usartdiv=72000000/(115200*16)=39.0625
所以小數部分div_fraction=0.0625*16=1=0x01。
整數部分div_mantissa=39=0x27。
串列埠收發實驗使用stm32的串列埠1即uart1,通過串列埠模組連線電腦,使用串列埠除錯助手來進行通訊,stm32收到資料後把收到的資料在發回電腦。串列埠引腳如下圖所示:
兩個串列埠引腳分別與pa9與pa10引腳相連,那麼我們就對pa9與pa10引腳以及串列埠模組進行配置,配置**(通過呼叫官方庫)。
**編寫的思路如下:
程式設計思路
1管腳配置
1、定義結構體;
2、使能時鐘;
3、填充結構體;
4、裝載結構體。
2串列埠配置
1、定義結構體;
2、使能時鐘;
3、填充結構體;
4、裝載結構體
5、開啟中斷;
6、使能串列埠。
3中斷優先順序管理
1、定義結構體;
2、填充結構體;
3、裝載結構體。
4邏輯處理
等待接收以及傳送資料
串列埠初始化**如下:
串列埠中斷函式**如下:
設定串列埠1的波特率為115200,**如下:
然後在把usb轉串模組插到電腦的usb口,開啟電腦端的串列埠除錯助手,找到對應的com口(前提是安裝了usb轉串列埠驅動),設定波特率為115200,開啟,在串列埠除錯助手的輸入框內輸入「www.fengke.club」,點傳送,然後可以看到串列埠除錯助手收到來自stm32的回發資訊,也是「www.fengke.club」,如下圖所示。
瘋殼AI開源無人機PID基礎
pid控制是自動控制系統中最常用的一種控制手段,它的誕生主要是為了解決自動控制系統的快 穩 準的問題。pid控制中的p指的是proportion 比例 即對輸入的偏差乘以乙個係數 i指的是integral 積分 即對輸入偏差進行積分運算 而d指的是derivative 微分 即對輸入偏差進行微分運算...
瘋殼AI開源無人機串列埠(視覺資料獲取)
openmv是乙個開源 低成本 功能強大的機器視覺模組。以stm32f767為核心,整合了ov7725攝像頭晶元,在小巧的硬體模組上,用c語言高效地實現了核心機器視覺演算法,提供python程式設計介面。開發者 電子發燒友以及智慧型裝置開發商都可以用python語言使用openmv提供的機器視覺功能...
瘋殼AI開源無人機PWM(電機控制)
脈衝寬度調製 pwm 是英文 pulse width modulation 的縮寫,簡稱脈寬調變,是利用微處理器的數字輸出來對模擬電路進行控制的一種非常有效的技術,廣泛應用在從測量 通訊到功率控制與變換的許多領域中。pwm在生活中非常的常見,小到呼吸燈的閃爍,達到航天飛船都會應用到pwm技術。pwm...