stm32f407usart dma 向一个无限模块发送和接收数据

2019-03-23 18:29发布

要崩溃了,初学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这该怎么写程序啊一点思路都没有跪求大神帮忙指点
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
liuxingyan
2019-03-24 17:07
weizhongc 发表于 2015-8-13 19:33
我看你发的数据根本不多,你当串口用就行了,搞那么发杂干嘛,串口不会耗你多少时间的

协议是这样的
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 要求发送数据为止。马上发送一次数据过去。    相对应的,上位机,以接收到一次数据,表示获取编码完成。
你看这个协议只用串口就可以吗怎么实现半双工

一周热门 更多>