一、常見串口
• 常見的串口有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管腳)
- 使能Tx、Rx管腳對應的GPIO組時鐘,
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOx, ENABLE);
- 2.使能Tx、Rx管腳對應的UART時鐘,
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ UARTx, ENABLE);
- 定義一個GPIO初始化結構體型的變量和一個UART初始化結構體變量
GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure;
- 對GPIO初始化結構體變量的各成員賦值,設置GPIO爲TX推輓複用輸出模式,RX爲浮空輸入模式
GPIO_InitStructure.GPIO_Pin =; GPIO_InitStructure.GPIO_Mode =;
GPIO_InitStructure.GPIO_Speed =;
- 對UART初始化結構體變量各成員賦值,
USART_InitStructure.USART_BaudRate =;
USART_InitStructure.USART_WordLength =; USART_InitStructure.USART_StopBits= USART_InitStructure.USART_Parity =;USART_InitStructure.USART_Mode =;
- 調用初始化函數,初始化
GPIO,GPIO_Init(GPIO_Pin_n, &GPIO_InitStructure);
- 調用初始化函數,初始化UART,
USART_Init(USARTx, &USART_InitStructure);
- 配置串口中斷優先級,使能串口中斷,
NVIC_Configuration();
USART_ITConfig(DEBUG_USARTx, USART_IT_RXNE, ENABLE);
- 使能串口,
USART_Cmd(DEBUG_USARTx, ENABLE);
• (二)、在stm32f10x_it.c中編寫UART中斷程序: USART1_IRQHandler
• (三)、在主函數中,完成其他功能編程。
四、注意事項
- 使用UART需要將GPIO口配置爲複用模式。
- 使用UART需要同時打開GPIO口的時鐘和UART的時鐘。
- 如果使用UART中斷,需要配置中斷分組和中斷優先級,並使能中斷。
- 記住使用UART前,還需要使能UART串口通信。
- PC機可使用串口助手或自行編寫程序(c++/python等)向串口發送和接收數據。
- 與PC機串口通信時,需要將PC的USB口接到開發板的UART1(戰艦板USB_232口),不要與JTAG/SWD口搞混。並可能需要安裝usb轉串口驅動
- 單片機可以在程序中通過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);