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

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

现象

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

自己规定的数据帧格式为: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".

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

相关推荐
AOI小白新手上路1 天前
江科协51单片机 17-2 红外遥控电机调速实验调试总结
单片机·嵌入式硬件·51单片机
oshan20121 天前
零基础STM32入门教程--10-PWM 呼吸灯
stm32·单片机·嵌入式硬件
记帖1 天前
STM32C5A3R开发(7)----ADC电压采集
嵌入式硬件·adc·dac·stm32cubeide·stm32c5·stm32cubemx2·stm32c5a3rgt6
自小吃多2 天前
器件移动、旋转、镜像、对齐、等间距操作笔记
笔记·嵌入式硬件
jianqiang.xue2 天前
智能体整体架构设计:四大模块与目录组织
单片机·嵌入式硬件·物联网·架构·esp32
花 满 楼2 天前
国芯科技CCFC3008PCS BIST (内建自测试) 分析总结
mcu·嵌入式·bist
Messy create2 天前
【BMS-AFE-温度检测】
stm32·单片机·能源
东莞市永盛电气2 天前
三相208V变380V变压器,出海工业设备供电适配方案
python·单片机·嵌入式硬件
Learn-Share_HY2 天前
[IT Network]如何配置反向路徑過濾器(rp_filter),以解決路由不對稱問題?
linux·嵌入式硬件·物联网·网络协议·tcp/ip·http·iot
深圳市宝华视联2 天前
医院内网部署手术示教系统注意事项
嵌入式硬件·实时互动·音视频·实时音视频·视频编解码·嵌入式实时数据库