要崩溃了,初学stm32,老师让弄一个项目中用到的无线模块通信,我想用stm32f407 usart 和dma发送与接收数据,通信协议的一部分
1、优化器(就是stm32)部分平时都处于接收状态,不得随意发送数据。接收到0a aa f0 后,后面接收3个字节优化器编码数据。 如 00 00 01 表示第一个优化器,后面接一个两位的校验和 05 55。(按字进行校验)。(0a aa +f0 00 +00 01 = fa ab 10000-faab=05 55) 0a aa f0 00 00 01 05 55这该怎么写程序啊一点思路都没有跪求大神帮忙指点
此帖出自
小平头技术问答
协议是这样的
1、优化器部分平时都处于接收状态,不得随意发送数据。
接收到0a aa f0 后,后面接收3个字节优化器编码数据。 如 00 00 01 表示第一个优化器,后面接一个两位的校验和 05 55。(按字进行校验)。(0a aa +f0 00 +00 01 = fa ab 10000-faab=05 55) 0a aa f0 00 00 01 05 55
2、接收的编码数据是本优化器编码,则立刻回答数据。 Aa a0 0f 00 00 01 1C 2C 81 27 00 1F +a8 ed ,第一部分包头Aa a0 0f,第二部分是自己的编码00 00 01,第三部分是升压后电压1C 2C,第四部分是电池板电压81 27,第五部分是总电流00 1F,最后一个是校验和a8 ed。 其中:数据是先发低字节,再发高字节。如: 2c1c 化为二进制10110000.011100 升压后电压 后6位为小数 176.76 V
2781 10011110.000001 电池板电压 后6位为小数 158.17V
1F00 11.11100000000 总体电流 后11位为小数 3.877A
校验和计算:AA A0 0F 00 00 01 01 01 D6 75 00 C0 88 0F 注意中间数据高低字节AAA0 + 0F00 + 0001+ 0101 + 75D6 + C000+ 0F88 = 0
3、接收到的编码为ff ff ff,表示要求把优化器编码发送回去。这时候,随机延时一段时间,20秒之内,检测到没有收到数据时,发送,如果有数据,则再延时,再检测,再发送。直到收到本文的 1 要求发送数据为止。马上发送一次数据过去。 相对应的,上位机,以接收到一次数据,表示获取编码完成。
你看这个协议只用串口就可以吗怎么实现半双工
一周热门 更多>