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,自找苦...