关于单片机与上位机串口通信的问题

记录最近在开发上位机软件时出现了一些问题以及原因和解决过程

现象

在使用串口进行通信时,能够使上位机在文本框内打印出字符,但读取不到发送的数据。

自己规定的数据帧格式为:[12 58 00 00 00 00 68]即帧头占两个字节,帧尾占两个字节,中间有四个字节的数据。上位机在接收数据时根据这个格式检验帧头和帧尾就能在一堆信息中识别出哪些是数据信息,并把这四字节数据保存到缓存数组(若没有识别到帧头和帧尾,或识别到帧头后,隔固定字节后没有收到帧尾,则缓存清零)。

然而在调试过程中发现上位机文本框能够打印出来接收到的信息,但无法收到数据帧的数据(文本框内能够打印出来数据帧),现象是不管发送什么数据,接收缓存的数据都是0。

解决过程

后来通过让上位机吧接受到的字节全都输出显示,发现很多"49","50"这种数。然后发现49是字符"1"对应的ASCII码,50是字符"2"对应的ASCII码。然后在接收到的字节中也发现了"5""8"和"6""8"对应的ASCII。由于上位机的程序里面对数据帧进行校验,只有正确的帧头和帧尾中间的数据才会被存入缓存数组进行进一步处理,若格式错误则不会被写入缓存数组,或将缓存清零。这也就是出现上述现象的原因。

我发现我为了图省事,把单片机的printf映射到USART0,并将USART0接到电脑进行打印数据,这样是为了方便调试和打印日志信息。但是如果用printf来发送数据,例如:

cpp 复制代码
u8 a = 12;//定义八位二进制数a=12,及对应16进制数"0x0C"
printf("%d",a);

本来这样串口能够发送数字"12",但实际上发送的是字符"1"和"2".

老老实实改为用串口发送函数来发送就好了。

相关推荐
车载测试牛马笔记2 分钟前
CAN一致性-物理层--高压通信范围测试
单片机·嵌入式硬件
国产电子元器件10 分钟前
ACS770还能打吗?最近测试了一款国产霍尔电流传感器
嵌入式硬件
www.stcai.com15 分钟前
《单片机原理与应用》,详细介绍。基于 STC, Ai8051U, 8位/32位 双核 全支持 AiCube 图形化配置外设,自动生成程序框架
单片机·嵌入式硬件
嵌入式老牛10 小时前
HC32F460_ADC驱动(三)
单片机·嵌入式硬件
秀秀更健康11 小时前
stm32: 系统时钟如何配置为72Mhz
stm32·单片机·嵌入式硬件
QAQ小菜鸟14 小时前
一、安装Altium Designer 26.1
嵌入式硬件
嵌入式-老费16 小时前
esp32开发与应用(用面包板去学模块)
嵌入式硬件
归零鸟16 小时前
WD Elements移动硬盘能识别出盘但不能出盘的修复记录
stm32·单片机·嵌入式硬件
追兮兮17 小时前
MCUQuickStart v1.1.0发布,一键生成Keil工程+RTOS模板
stm32·单片机·嵌入式硬件·freertos·gd32·keil5
国科安芯18 小时前
ASP7A84AS与主流架构兼容替代及系统级电源完整性解决方案的深度研究
单片机·嵌入式硬件·架构