上方是發(fā)送數(shù)據(jù)的例子,那么串口接收又該如何配置,又要在串口發(fā)送的例子上做哪些更改呢?
這里我們可以通過查詢或者中斷的方式來進行接收數(shù)據(jù)的兩種方式。
- 查詢方式就是通過不斷的查詢RXNE標志位,通過判斷RXNE位的狀態(tài)來確定數(shù)據(jù)是否接收。
- 中斷方式就是通過配置接收輸出控制通道,配置NVIC,在中斷服務子函數(shù)里進行數(shù)據(jù)的接收。
1. 需要更改的地方
既然我們要實現(xiàn)串口的接收,那么就要配置串口RX引腳,在串口模式中添加USART_Mode_RX模式。
- 初始化RX引腳
//RX端
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU; //上拉輸入
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //50MhZ
GPIO_Init(GPIOA,&GPIO_InitStructure);
- 添加串口模式
USART_InitStruct.USART_Mode=USART_Mode_Tx|USART_Mode_Rx; //TX 發(fā)送模式 RX 接收模式
2. 查詢RXNE標志位
這里我們還是來看一看RXNE標志位的描述
上圖描述,為0時數(shù)據(jù)沒有收到,為1時收到了數(shù)據(jù),數(shù)據(jù)可以從RDR里讀出
所以在主程序里不斷讀取RXNE標志位,如果為1,表示數(shù)據(jù)可以讀出
uint8_t RX_Data;
int main()
{
Serial_Init();
Serial_SendByte(0x16);
while(1)
{
if(USART_GetFlagStatus(USART2,USART_FLAG_RXNE)==SET) //0 循環(huán)等待 1 可以接收數(shù)據(jù)
{
RX_Data=USART_ReceiveData(USART2);
Serial_SendByte(RX_Data);
}
}
}
下圖為程序現(xiàn)象:pc向單片機發(fā)送數(shù)據(jù)0x15,單片機接收數(shù)據(jù)0x15,并且把接收到的數(shù)據(jù)作為數(shù)據(jù)發(fā)送到pc,在pc上顯示0x15。
-
STM32
+關注
關注
2270文章
10895瀏覽量
355740 -
中斷
+關注
關注
5文章
898瀏覽量
41470 -
串口通信
+關注
關注
34文章
1624瀏覽量
55508
發(fā)布評論請先 登錄
相關推薦
評論