關於嵌入式學習隨筆 8《UART序列通訊原理》

2022-07-27 17:36:13 字數 3563 閱讀 3994

1、什麼是串列埠

串列埠是mcu(microcontroller unit;微控制單元)重要的外部介面,同時也是軟體開發重要的除錯手段,現如今基本上所有的mcu都會帶有串列埠。以stm32f767為例,它的串列埠資源相當豐富,功能也十分強大,stm32f767igt6最多可以提供8路串列埠,支援8/16倍過取樣、支援自動波特率檢測、支援modbus通訊、支援同步單線通訊和半雙工單線通訊、支援lin、支援數據機操作、智慧卡協議和irda sir endec規範、具有dma等。

處理器與外部裝置通訊的兩種方式:

--》並行通訊

-傳輸原理:資料各個位同時傳輸。

-優點:速度快

-缺點:占用引腳資源多

--》序列通訊

-傳輸原理:資料按位順序傳輸。

-優點:占用引腳資源少

-缺點:速度相對較慢

2、序列通訊

按照資料傳送方向,分為:

--》單工:資料傳輸只支援資料在乙個方向上傳輸

--》半雙工:允許資料在兩個方向上傳輸,但是,在某一時刻,只允許資料在乙個方向上傳輸,它實際上是一種切換方向的單工通訊;

--》全雙工:允許資料同時在兩個方向上傳輸,因此,全雙工通訊是兩個單工通訊方式的結合,它要求傳送裝置和接收裝置都有獨立的接收和傳送能力。

序列通訊的通訊方式:

--》同步通訊:帶時鐘同步訊號傳輸(spi,iic通訊 )

--》非同步通訊:不帶時鐘同步訊號(uart串列埠通訊(通用非同步收發器),單匯流排通訊)

常見的序列通訊介面:

通訊標準

引腳說明

通訊方式

通訊方向

uart

txd:傳送端

rxd:接收端

gnd:公共地

非同步通訊

全雙工單匯流排

dq:傳送/接收端

非同步通訊

半雙工spi

sck:同步時鐘

miso:主機輸入,從機輸出

mosi:主機輸出,從機輸入

同步通訊

全雙工iic

scl:同步時鐘

sda:資料輸入/輸出端

同步通訊

半雙工3、非同步串列埠通訊uart

--》物理層(電氣層:介面決定):通訊介面(rs232,rs485,rs422,ttl)

-rxd:資料輸入引腳。接收資料。

-txd:資料傳送引腳。傳送資料。

ttl串列埠  &  rs232  & rs485  & rs422通訊介面:

介面型別

邏輯1典型值

邏輯0典型值

說明優缺點

ttl+5/3.3v

0v一般的mcu串列埠引腳都支援ttl

優點:介面簡單

缺點:距離在1.5公尺以內

rs232

-3v~-15v

3v~15v

三線,全雙工

優點:距離在1.5~30公尺

缺點:最高傳輸速率20kb/s

rs485

-3v~-15v

3v~15v

兩線,利用壓差傳輸

優點:距離可達1219公尺,

最大傳輸速率10mb/s(12公尺內)

rs422

-3v~-15v

3v~15v

不用共地,兩線,

平衡驅動差分接收,兩組電源獨立

優點:隔離抗干擾性能強,

距離可達1219公尺,最大傳輸速率10mb/s

--》 資料格式(資料層:晶元決定)stm32串列埠非同步通訊資料格式:

-->起始位:1個邏輯0資料位開始

-->資料位(8位或者9位)

-->奇偶校驗位(第9位)

-->停止位(1,1.5,2位)

-->波特率設定

stm32串列埠通訊過程:

--》通訊協議(協議層:程式決定)

通訊協議往往由使用者自己根據需要來編寫。

1

2 else

/*起始符錯誤*/

12

15break;

16case waitfordata:

17 usart2_rx_buf[usart2_rx_sta] = arxbuffer2[0];

18 usart2_rx_sta++;

19if (usart2_rx_sta == 6) /*資料接收完成,校驗*/

20

23break;

24case waitforchksum:

25 usart2_rx_buf[6] = arxbuffer2[0];

26if (wifi_cheak(usart2_rx_buf)) /*校驗正確,判斷結束符*/

27 else

30

33break;

34case waitforend:

35if (arxbuffer2[0] == 0x99) /*結束符正確*/

36 else

43

47 rxstate = waitforstart;

48break;

49default:

50break;

51 }

5253 }

串列埠接收資料解析

1

void wifidatahandle(void)

2 else //一鍵起飛 先置1,1秒後置0

8if((usart2_rx_buf[5]&0x02)==0)else //一鍵降落 先置1,1秒後置0

9if((usart2_rx_buf[5]&0x04)==0)else //緊急停機 每次取反

10if((usart2_rx_buf[5]&0x08)==0)else //固定翻轉

11if((usart2_rx_buf[5]&0x10)==0)else //1無頭 0有頭

12if((usart2_rx_buf[5]&0x20)==0)else //一鍵翻轉 點選後置1,當方向鍵移動過一半時清0

13if((usart2_rx_buf[5]&0x40)==0)else //光控制

14if((usart2_rx_buf[5]&0x80)==0)else //陀螺儀校準 先置1,1秒後置0

1516

17 }

通訊協議

嵌入式程式設計學習隨筆

1.1arm介紹1 0 為什麼要推出arm彙編 0.1 對比x86,8051彙編,從更底層的角度去理解相關的知識的 0.2 為後續嵌入式課程作準備 s3c2440,stm32f103,exynos4412 0.3 學習目標 了解arm的體系結構,能看懂arm彙編 1 arm分類 參考官方 1.1版本...

關於嵌入式學習隨筆 1《STM32簡介》

什麼是stm32?新的基於arm核心的32位mcu系列 核心為arm公司為要求高效能 低成本 低功耗的嵌入式應用專門設計的contex m核心 標準的arm架構 cortex m7採用armv7 me 2007年後 架構 armv7架構定義了三大分工明確的系列 1 a 系列 面向尖端的基於虛擬記憶體...

關於嵌入式int型資料的討論學習

嵌入式如果用int關鍵字才是真正不懂嵌入式,如果想做到軟體可以移植,應該將型別給定義清晰,如typedef unsigned char int8u typedef signed char int8s 編碼時使用int8u去定義資料型別。明知道int在不同的機器上可能有不同的字長,還使用int,自找苦...