stm32_常見串口、串口通信分類、UART編程套路以及注意事項

一、常見串口

• 常見的串口有UART口(Universal Asynchronous Receiver Transmitter:通用異步收發器, 一對一,以位爲單位發送)和COM( cluster communication port :串行通訊端口), 嵌入式裏面說的串口,一般是指UART口。計算機上的串口常指RS232電平標準的COM口。
• UART口和COM口是指的物理接口形式(硬件),而TTL、RS-232、RS-485是指的電平標準(電信號)。
在這裏插入圖片描述

二、串口通信分類

按照數據傳送方向分爲:

• 單工:
數據傳輸只支持數據在一個方向上傳輸
• 半雙工:
允許數據在兩個方向上傳輸,但是,在某一時刻,只允許數據在一個方向上傳輸,
它實際上是一種切換方向的單工通信;
• 全雙工:
允許數據同時在兩個方向上傳輸,因此,全雙工通信是兩個單工通信方式的結合,
它要求發送設備和接收設備都有獨立的接收和發送能力。

按通信方式分爲:

同步通信:帶時鐘同步信號傳輸。-SPI,IIC通信接口
異步通信:不帶時鐘同步信號。-UART(通用異步收發器),單總線

常見串行通信接口
在這裏插入圖片描述

三、UART編程套路

• (一)、配置GPIO口及UART1口 (APB2, PA9, PA10管腳)

  1. 使能Tx、Rx管腳對應的GPIO組時鐘,RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOx, ENABLE);
  2. 2.使能Tx、Rx管腳對應的UART時鐘, RCC_APB2PeriphClockCmd(RCC_APB2Periph_ UARTx, ENABLE);
  3. 定義一個GPIO初始化結構體型的變量和一個UART初始化結構體變量
    GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure;
  4. 對GPIO初始化結構體變量的各成員賦值,設置GPIO爲TX推輓複用輸出模式,RX爲浮空輸入模式
    GPIO_InitStructure.GPIO_Pin =; GPIO_InitStructure.GPIO_Mode =; GPIO_InitStructure.GPIO_Speed =;
  5. 對UART初始化結構體變量各成員賦值,
    USART_InitStructure.USART_BaudRate =;
    USART_InitStructure.USART_WordLength =; USART_InitStructure.USART_StopBits= USART_InitStructure.USART_Parity =;USART_InitStructure.USART_Mode =;
  6. 調用初始化函數,初始化GPIO,GPIO_Init(GPIO_Pin_n, &GPIO_InitStructure);
  7. 調用初始化函數,初始化UART,USART_Init(USARTx, &USART_InitStructure);
  8. 配置串口中斷優先級,使能串口中斷,NVIC_Configuration(); USART_ITConfig(DEBUG_USARTx, USART_IT_RXNE, ENABLE);
  9. 使能串口,USART_Cmd(DEBUG_USARTx, ENABLE);
    • (二)、在stm32f10x_it.c中編寫UART中斷程序: USART1_IRQHandler
    • (三)、在主函數中,完成其他功能編程。

四、注意事項

  1. 使用UART需要將GPIO口配置爲複用模式。
  2. 使用UART需要同時打開GPIO口的時鐘和UART的時鐘。
  3. 如果使用UART中斷,需要配置中斷分組和中斷優先級,並使能中斷。
  4. 記住使用UART前,還需要使能UART串口通信。
  5. PC機可使用串口助手或自行編寫程序(c++/python等)向串口發送和接收數據。
  6. 與PC機串口通信時,需要將PC的USB口接到開發板的UART1(戰艦板USB_232口),不要與JTAG/SWD口搞混。並可能需要安裝usb轉串口驅動
  7. 單片機可以在程序中通過C標準庫中的printf()函數向串口發送數據,但必須重定向到串口(因爲C標準printf()函數是定向到屏幕,而不是串口)。格式:
///重定向c庫函數printf到串口,重定向後可使用printf函數
int fputc(int ch, FILE *f) {
/* 發送一個字節數據到串口 */
USART_SendData(DEBUG_USARTx, (uint8_t) ch);
/* 等待發送完畢 */
while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_TXE) == RESET);
return (ch);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章