stm32f4中串口接收数据处理解读
·
最近在项目中,使用到了两个串口之间进行通信试验。即一端串口与PC端相连,接收上位机发送的数据,通过控制板另一个422串口,将来自上位机的数据发送到待试设备;并通过422串口接收设备数据,通过另一个串口将接收的数据,显示到PC端的上位机中。相应的示意图如下:

其中调试过程遇到的主要问题在于,接收待试设备向外发送的数据处理。根据DMA缓存区接收到的数据分析,设备发送的数据一帧共32字节,不过发送的方式为不连续发送(有固定的帧头和校验位)。因此处理时,采用逐段累积再解析的方式,具体的代码如下:
datalength=uart_receive_length;
memcpy(&buffer(recv_num),&dma_buffer[0],datalength);
recv_num=recv_num+uart_receive_length;
if(recv_num>=64)
{
while(recv_num--)
{
static int i=0;
if(i<32)
{
i++;
}
if(buffer[i-1]==0xF0&&buffer[i]==0x0F)
{
int a=buffer[i+1];
}
if(i==31)
{
i=0;
}
}
recv_num=0;
memset(&buffer[recv_num],0,sizeof(buffer));
}
另外,由于接收到的是16进制的数据,上位机没有解析数据的功能,因此在控制板中又加入了进制转换的功能,即将int型数据转换成char型数据,再逐位发送到上位机显示。总体来说,通过这个试验的小项目,得以深入地理解了stm32f4中串口的调试流程。也为以后的底层调试做好了基础。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)