串口初始化结构体和固件库讲解
串口初始化結構體和固件庫講解
常用的6個函數,結構體:
?
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);
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的串口初始化结构体和固件库讲解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STM32F0 定时器触发ADC,多通道
- 下一篇: STM32的时钟系统RCC详细整理