STM32串口配置步驟


串口設置的一般步驟可以總結為如下幾個步驟:

1) 串口時鍾使能, GPIO 時鍾使能
2) 串口復位
3) GPIO 端口模式設置
4) 串口參數初始化
5) 開啟中斷並且初始化 NVIC(如果需要開啟中斷才需要這個步驟)
6) 使能串口
7) 編寫中斷處理函數

 

1.串口時鍾使能。 串口是掛載在 APB2 下面的外設,所以使能函數為:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1)

2.串口復位。

void USART_DeInit(USART_TypeDef* USARTx);//串口復位

3.串口參數初始化。 串口初始化是通過 USART_Init()函數實現的,
void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct)

USART_InitStructure.USART_BaudRate = bound; //波特率設置;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字長為 8 位數據格式 

USART_InitStructure.USART_StopBits = USART_StopBits_1; //一個停止位

USART_InitStructure.USART_Parity = USART_Parity_No; //無奇偶校驗位

USART_InitStructure.USART_HardwareFlowControl
= USART_HardwareFlowControl_None; //無硬件數據流控制
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收發模式
USART_Init(USART1, &USART_InitStructure); //初始化串口

 

 

4.數據發送與接收。 發送與接收是通過數據寄存器 USART_DR 來實現的,這是
一個雙寄存器,包含了 TDR RDR
發送:void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);

接收:uint16_t USART_ReceiveData(USART_TypeDef* USARTx);

RXNE(讀數據寄存器非空),當該位被置 1 的時候,就是提示已經有數據被接收到了,並
且可以讀出來了。這時候我們要做的就是盡快去讀取 USART_DR,通過讀 USART_DR 可以將
該位清零,也可以向該位寫 0,直接清除。
TC(發送完成),當該位被置位的時候,表示 USART_DR 內的數據已經被發送完成了。如
果設置了這個位的中斷,則會產生中斷。該位也有兩種清零方式: 1)讀 USART_SR,寫
USART_DR2)直接向該位寫 0

在我們固件庫函數里面,讀取串口狀態的函數是:
FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG)

例如我們要判斷讀寄存器是否非空(RXNE), 操
作庫函數的方法是:
USART_GetFlagStatus(USART1, USART_FLAG_RXNE);
我們要判斷發送是否完成(TC),操作庫函數的方法是:
USART_GetFlagStatus(USART1, USART_FLAG_TC);

 

6.串口使能。 串口使能是通過函數 USART_Cmd()來實現的,這個很容易理解,使用方法
是:
USART_Cmd(USART1, ENABLE); //使能串口

7.開啟串口響應中斷。 有些時候當我們還需要開啟串口中斷,那么我們還需要使能串口中
斷,使能串口中斷的函數是:

void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT,
FunctionalState NewState)

比如在接收到數據的時候(RXNE 讀數據寄存器非空),我們要產生中斷,那么我
們開啟中斷的方法是:
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//開啟中斷,接收到數據中斷
我們在發送數據結束的時候(TC, 發送完成) 要產生中斷,那么方法是:
USART_ITConfig(USART1USART_IT_TCENABLE);
8.獲取相應中斷狀態。
經常我們在中斷處理函數中,要判斷該中斷是哪種中斷,使用的函數是:
ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT)
比如我們使能了串口發送完成中斷,那么當中斷發生了, 我們便可以在中斷處理函數中調用這
個函數來判斷到底是否是串口發送完成中斷,方法是:
USART_GetITStatus(USART1, USART_IT_TC)


參考來源:STM32F1開發指南-庫函數版本_V3.1 


免責聲明!

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



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