1. 程式人生 > 實用技巧 >STM32中的USART通訊

STM32中的USART通訊

  在嵌入式通訊中,我們比較常用的通訊方式有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等晶片轉接。