上方是发送数据的例子,那么串口接收又该如何配置,又要在串口发送的例子上做哪些更改呢?
这里我们可以通过查询或者中断的方式来进行接收数据的两种方式。
- 查询方式就是通过不断的查询RXNE标志位,通过判断RXNE位的状态来确定数据是否接收。
- 中断方式就是通过配置接收输出控制通道,配置NVIC,在中断服务子函数里进行数据的接收。
1. 需要更改的地方
既然我们要实现串口的接收,那么就要配置串口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 发送模式 RX 接收模式
2. 查询RXNE标志位
这里我们还是来看一看RXNE标志位的描述

上图描述,为0时数据没有收到,为1时收到了数据,数据可以从RDR里读出
所以在主程序里不断读取RXNE标志位,如果为1,表示数据可以读出
uint8_t RX_Data;
int main()
{
Serial_Init();
Serial_SendByte(0x16);
while(1)
{
if(USART_GetFlagStatus(USART2,USART_FLAG_RXNE)==SET) //0 循环等待 1 可以接收数据
{
RX_Data=USART_ReceiveData(USART2);
Serial_SendByte(RX_Data);
}
}
}
下图为程序现象:pc向单片机发送数据0x15,单片机接收数据0x15,并且把接收到的数据作为数据发送到pc,在pc上显示0x15。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
STM32
+关注
关注
2305文章
11121浏览量
371175 -
中断
+关注
关注
5文章
913浏览量
43565 -
串口通信
+关注
关注
34文章
1657浏览量
57639
发布评论请先 登录
相关推荐
热点推荐
labview与51串口通信的两种方式
Labview串口通信要学会两种方法,一种是利用visa(虚拟仪器软件构架),另一种是调用activeX控件。第一种方法(VISA)程序如图
发表于 09-06 16:03
51单片机与上位机通讯的两种串口通讯方式
51系列单片机与上位机通讯有两种串口通讯方式: 方式一.使用自带串口通讯模块,使用RxD/TxD口,用内置定时器产生波特率,通过中断
发表于 07-19 08:22
vnc和xrdp两种远程连接的方式
[zju嵌入式]树莓派之远程桌面 之前两篇介绍了通过串口和ssh登陆到树莓派的方法,这两种方式的有点在于连接方面,响应速度快,但是也有不够直观的缺点,没办法看到图形界面.在这篇博文中,
发表于 12-24 07:54
【科普】常见的两种串口通信
在串行通信中,数据通常是在两个站之间传送,按照数据在通信线路上的传送方向可分为3种基本的传送方式:单工、半双工和全双工。单工通信使用一根导线
发表于 11-16 13:50
•7826次阅读
labview串口接收数据_labview串口被动接收数据
字节的数据。最后,用一个状态机来实现相邻两个字符串的判断。如果串口在相邻两个字符串之间接收时间大于50ms,则判断为
发表于 01-15 15:49
•6.9w次阅读
MATLAB/simulink中两种实现建模方式的优势
导读:本期文章主要介绍在MATLAB/simulink中建模时的两种不同实现方式,一种是直接用现成的文件库中的模块进行搭建,一种是用Sfunction代码实现。接下来以电压型磁链观测器

串口接收数据的两种方式是什么
评论