前言:
博主所选用上位机为匿名上位机v7,下位机为stm32,所用MCU为f103c8t6,进行一个简单的上位机显示数据的波形和对单片机指定参数的调试。
大概的思路为匿名上位机与stm32串口通信,在windows端匿名上位机绘制实时数据波形,并实现在遵循通信协议的前提下实现对下位机的某指定参数的修改,从而达到便捷调试的目的。
接线图:
匿名上位机接收stm32发送数据的通信帧格式:
DATA 数据内容中的数据,采用小端模式,低字节在前,高字节在后。
注意:不能发送小数,需要将小数乘以10的n次方再发送,之后在匿名上位机v7端设置接收数据的放大倍数为1/10^n即可接收到原始数据。
和校验 SUM CHECK 计算方法:
从帧头 0xAA 字节开始,一直到 DATA 区结束,对每一字节进行累加操作,只取低 8 位
◼
附加校验 ADD CHECK 计算方法:
计算和校验时,每进行一字节的加法运算,同时进行一次 SUM CHECK 的累加操作,只取低 8 位。
◼
校验计算示例:
假设数据帧缓存为 data_buf 数组,0xAA 存放于数组起始位置,那么 data_buf[3]存放的是数据长度,校验程序
如下:
uint8_t sumcheck
= 0
;
uint8_t addcheck
= 0
;
for
(u8 i
=0
; I
< (data_buf
[3
]+4
); i
++)
{
sumcheck
+= data_buf
[i
];
//从帧头开始,对每一字节进行求和,直到DATA区结束
addcheck
+= sumcheck
;
//每一字节的求和操作,进行一次sumcheck的累加
}
//如果计算出的sumcheck和addcheck和接收到的check数据相等,代表校验通过,反之数据有误
if
(sumcheck
== data_buf
[data_buf
[3
]+4
] && addcheck
== data_buf
[data_buf
[3
]+5
])
return true
;
//校验通过
else
return false
; //校验失败
采取灵活格式帧
stm32接收匿名上位机发送的数据通信帧格式:
帧头1 |