常用的6個函數,結構體:
-
USART 初始化結構體(USART_InitTypeDef)
-
USART 時鍾初始化結構體(USART_ClockInitTypeDef)
-
串口使能函數void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState)
-
數據發送函數void USART_SendData(USART_TypeDef* USARTx, uint16_t Data)
-
數據接收函數uint16_t USART_ReceiveData(USART_TypeDef* USARTx)
-
中斷狀態位獲取函數ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT)
USART 初始化結構體(USART_InitTypeDef)
初始化結構體定義在 stm32f10x_usart.h 文件中,初始化庫函數定義在 stm32f10x_usart.c 文件中,編程時我們可以結合這兩個文件內注釋使用。
typedef struct { uint32_t USART_BaudRate; // 波特率 uint16_t USART_WordLength; // 字長 uint16_t USART_StopBits; // 停止位 uint16_t USART_Parity; // 校驗位 uint16_t USART_Mode; // USART 模式 uint16_t USART_HardwareFlowControl; // 硬件流控制 } USART_InitTypeDef;
結構體成員:
1) USART_BaudRate:波特率設置。一般設置為 2400、9600、19200、115200。標准庫函數會根據設定值計算得到 USARTDIV 值,從而設置 USART_BRR 寄存器值。
2) USART_WordLength:數據幀字長,可選 8 位或 9 位。它設定 USART_CR1 寄存器的 M 位的值。如果沒有使能奇偶校驗控制,一般使用 8 數據位;如果使能了奇偶校驗則一般設置為 9 數據位。
3) USART_StopBits:停止位設置,可選 0.5 個、1 個、1.5 個和 2 個停止位,它設定 USART_CR2 寄存器的 STOP[1:0]位的值,一般我們選擇 1 個停止位。
4) USART_Parity : 奇 偶 校 驗 控 制 選 擇 , 可 選 USART_Parity_No( 無校驗 ) 、 USART_Parity_Even( 偶校驗 ) 以 及 USART_Parity_Odd( 奇 校 驗 ) , 它 設 定 USART_CR1 寄存器的 PCE 位和 PS 位的值。
5) USART_Mode:USART 模式選擇,有 USART_Mode_Rx 和 USART_Mode_Tx,允許使用邏輯或運算選擇兩個,它設定 USART_CR1 寄存器的 RE 位和 TE 位。
6) USART_HardwareFlowControl:硬件流控制選擇,只有在硬件流控制模式才有效,可選有⑴使能 RTS、⑵使能 CTS、⑶同時使能 RTS 和 CTS、⑷不使能硬件流。
USART 時鍾初始化結構體(USART_ClockInitTypeDef)
使用同步模式時需要配置 SCLK 引腳輸出脈沖的屬性,標准庫使用一個時鍾初始化結構體 USART_ClockInitTypeDef 來設置,該結構體內容也只有在同步模式才需要設置。
typedef struct { uint16_t USART_Clock; // 時鍾使能控制 uint16_t USART_CPOL; // 時鍾極性 uint16_t USART_CPHA; // 時鍾相位 uint16_t USART_LastBit; // 最尾位時鍾脈沖 } USART_ClockInitTypeDef;
極性和相位是配合這使用:極性表示串口空閑時候是高電平還是低電平,相位指的是第一個邊緣采集數據還是第二個邊緣采集數據.
結構體成員:
1) USART_Clock:同步模式下 SCLK 引腳上時鍾輸出使能控制,可選禁止時鍾輸出 (USART_Clock_Disable)或開啟時鍾輸出(USART_Clock_Enable);如果使用同步模式發送,一般都需要開啟時鍾。它設定 USART_CR2 寄存器的 CLKEN 位的值。
2) USART_CPOL:同步模式下 SCLK 引腳上輸出時鍾極性設置,可設置在空閑時 SCLK 引腳為低電平(USART_CPOL_Low)或高電平(USART_CPOL_High)。它設定 USART_CR2 寄存器的 CPOL 位的值。
3) USART_CPHA:同步模式下 SCLK 引腳上輸出時鍾相位設置,可設置在時鍾第一個變化沿捕獲數據(USART_CPHA_1Edge)或在時鍾第二個變化沿捕獲數據。它設定 USART_CR2 寄存器的 CPHA 位的值。USART_CPHA 與 USART_CPOL 配合使用可以獲得多種模式時鍾關系。
4) USART_LastBit:選擇在發送最后一個數據位的時候時鍾脈沖是否在 SCLK 引腳輸 出 , 可 以 是 不 輸 出 脈 沖 (USART_LastBit_Disable) 、 輸 出 脈 沖 (USART_LastBit_Enable)。它設定 USART_CR2 寄存器的 LBCL 位的值。
串口使能函數
void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState)
USART_Cmd函數的功能是使能或失能USART串口外設。
例:使能USART1 USART_Cmd(USART1,ENABLE);
數據發送函數
void USART_SendData(USART_TypeDef* USARTx, uint16_t Data)
USART_SendData函數的功能是通過外設USARTx發送單個數據。
例:從USART3發送一個字符0x26
USART_SendData(USART3,0X26);
數據接收函數
uint16_t USART_ReceiveData(USART_TypeDef* USARTx)
USART_ReceiveData函數的功能是返回USARTx最近接收到的數據。
例:從USART2讀取接收到的數據
u8 RxData;
RxData = USART_ReceiveData(USART2);
中斷狀態位獲取函數
ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT)
函數的功能是檢查指定的USART標志位設置與否
USART_FLAG_CTS CTS標志位
USART_FLAG_LBD LIN中斷檢測標志位
USART_FLAG_TXE 發送數據寄存器空標志位
USART_FLAG_TC 發送完成標志位
USART_FLAG_RXNE 接收數據寄存器非空標志位
USART_FLAG_IDLE 空閑總線標志位
USART_FLAG_ORE 溢出錯誤標志位
USART_FLAG_NE 噪聲錯誤標志位
USART_FLAG_FE 幀錯誤標志位
USART_FLAG_PE 奇偶錯誤標志位
例:檢查USART1發送標志位的值
FlagStatus Status;
Status = USART_GetFlagStatus(USART1,USART_FLAG_TXE);
USART_ClearFlag函數的功能是清除USARTx的待處理標志位。
例:清除USART1的溢出錯誤標志位
USART_ClearFlag(USART1,USART_FLAG_ORE);
USART_GetITStatus函數的功能是檢查指定的USART中斷發生與否。
USART_IT_PE 奇偶錯誤中斷
USART_IT_TXE 發送中斷
USART_IT_TC 發送完成中斷
USART_IT_RXNE 接收中斷
USART_IT_IDLE 空閑總線中斷
USART_IT_LBD LIN中斷探測中斷
USART_IT_CTS CTS中斷
USART_IT_ORE 溢出錯誤中斷
USART_IT_NE 噪音錯誤中斷
USART_IT_FE 幀錯誤中斷
例:檢查USART1的中斷類型
ITStatus ErrorITstatus;
ErrorITstatus = USART_GetITStatus(USART1,USART_IT_OverrunError);
使能或者失能指定的USART串口中斷
void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState)
USART_IT_PE 奇偶錯誤中斷
USART_IT_TXE 發送中斷
USART_IT_TC 傳輸完成中斷
USART_IT_RXNE 接收中斷
USART_IT_IDLE 空閑總線中斷
USART_IT_LBD LIN中斷檢測中斷
USART_IT_CTS CTS中斷
USART_IT_ERR 錯誤中斷
例:使能USART1接收中斷
USART_Cmd(USART1,USART_IT_RXNE,ENABLE);