串口初始化結構體和固件庫講解


常用的6個函數,結構體:

  1. USART 初始化結構體(USART_InitTypeDef)
  2. USART 時鍾初始化結構體(USART_ClockInitTypeDef)
  3. 串口使能函數void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState)
  4. 數據發送函數void USART_SendData(USART_TypeDef* USARTx, uint16_t Data)
  5. 數據接收函數uint16_t USART_ReceiveData(USART_TypeDef* USARTx)
  6. 中斷狀態位獲取函數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

結構體成員:

     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);

                   

                   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM