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

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

现象

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

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

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

相关推荐
悠哉悠哉愿意5 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
Lester_11015 天前
STM32霍尔传感器输入口设置为复用功能输入口时,还能用GPIO函数直接读取IO的状态吗
stm32·单片机·嵌入式硬件·电机控制
LCG元5 天前
低功耗显示方案:STM32L0驱动OLED,动态波形绘制与优化
stm32·嵌入式硬件·信息可视化
三佛科技-187366133975 天前
120W小体积碳化硅电源方案(LP8841SC极简方案12V10A/24V5A输出)
单片机·嵌入式硬件
z20348315205 天前
STM32F103系列单片机定时器介绍(二)
stm32·单片机·嵌入式硬件
Alaso_shuang5 天前
STM32 核心输入、输出模式
stm32·单片机·嵌入式硬件
脚后跟5 天前
AI助力嵌入式物联网项目全栈开发
嵌入式硬件·物联网·ai编程
2501_918126915 天前
stm32死锁是怎么实现的
stm32·单片机·嵌入式硬件·学习·个人开发
z20348315205 天前
STM32F103系列单片机定时器介绍(一)
stm32·单片机
星马梦缘5 天前
驱动层开发——蜂鸣器驱动
stm32·单片机·嵌入式硬件·hal·驱动