STM32中的USART通訊
阿新 • • 發佈:2020-08-06
在嵌入式通訊中,我們比較常用的通訊方式有USART,I2C,SPI等,這次來簡單地總結最經典也最常用的USART通訊方式。
串列埠通訊(物理層):
首先是最常見的串列埠通訊,在STM32中,我們使用的串列埠通訊是TTL電平標準,使用2.4-5V表示邏輯1,0-0.5V表示邏輯0(在STM32中,TTL電平為3.3V邏輯1,0V邏輯0),當然也有其他的一些串列埠標準,比如說RS232——一種傳輸距離更加遠的串列埠標準。
TTL與RS232的典型示例(圖片源自網路):
串列埠通訊(協議層):
串列埠通訊是一種全雙工的通訊方式,一般我們會使用TXD,RXD兩根訊號線,分別為傳送與接收。
串列埠通訊的資料包由起始位,多個數據位,校驗位和停止位組成。
起始位:由一個邏輯0組成。停止位:由0.5-2個邏輯1表示。資料位:長度通常被髮送,接收雙方約定為5-8位長。
資料校驗位:通常有偶校驗(有效資料位和校驗位邏輯1的總和為偶數)奇校驗(類同,和為奇數)0校驗(校驗位0)1校驗(校驗位1)
STM32中的USART:
USART:同步非同步收發器。UART:非同步收發器。我們平時學習開發使用到的基本上都是UART,其剪裁掉了同步功能,更加簡單。
使用UART時,上位機上會顯示一些資料選項:
其中,波特率,資料位,停止位都是是雙方約定的,在UART_Init(串列埠初始化)中定義,部分程式碼如下:
USART_InitStructure.USART_BaudRate = 115200 ; //波特率,這裡為115200 USART_InitStructure.USART_WordLength=USART_WordLength_8b; //資料幀字長 8位 USART_InitStructure.USART_StopBits=USART_StopBits_1; //配置停止位 1個 USART_InitStructure.USART_Parity=USART_Parity_No; //校驗位,無校驗位
USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None; //不使用用硬體流控制 USART_InitStructure.USART_Mode=USART_Mode_Tx|USART_Mode_Rx; //收發一體 USART_Init(USART2,&USART_InitStructure); //完成初始化 USART_Cmd(USART2,ENABLE); //使能串列埠
使用UART的其他注意事項:需要共地線。在串列埠轉USB介面中,常使用CH340等晶片轉接。