社区导航

 

搜索
查看: 2131|回复: 8

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

[复制链接]

6

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2015-8-12 17:34 | 显示全部楼层 |阅读模式
要崩溃了,初学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
这该怎么写程序啊一点思路都没有跪求大神帮忙指点

此帖出自stm32/stm8论坛

回复

使用道具 举报

1万

TA的帖子

143

TA的资源

版主

Rank: 6Rank: 6

技术导师勋章

发表于 2015-8-12 17:42 | 显示全部楼层
启用串口中断模式,具体的去看书。
上传了一些书籍资料,也许有你想要的:http://download.eeworld.com.cn/user/chunyang

回复

使用道具 举报

502

TA的帖子

0

TA的资源

版主

Rank: 6Rank: 6

发表于 2015-8-12 22:45 | 显示全部楼层
你直接网上找24L01就行啦,spi接口,例程很多的,RF模块内部带有crc校验,所以数据的正确性你都不用去理了,你跟着别人的例程用起来就好了

回复

使用道具 举报

6

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

 楼主| 发表于 2015-8-13 09:15 | 显示全部楼层
weizhongc 发表于 2015-8-12 22:45
你直接网上找24L01就行啦,spi接口,例程很多的,RF模块内部带有crc校验,所以数据的正确性你都不用去理了 ...

我用的那个无线模块只有usart的接口,只能用usart

点评

那还用搞么,别人做好的模块,转uart了。你直接往里面丢数据,收数据就好了  详情 回复 发表于 2015-8-13 09:18

回复

使用道具 举报

502

TA的帖子

0

TA的资源

版主

Rank: 6Rank: 6

发表于 2015-8-13 09:18 | 显示全部楼层
liuxingyan 发表于 2015-8-13 09:15
我用的那个无线模块只有usart的接口,只能用usart

那还用搞么,别人做好的模块,转uart了。你直接往里面丢数据,收数据就好了

回复

使用道具 举报

6

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

 楼主| 发表于 2015-8-13 19:18 | 显示全部楼层
weizhongc 发表于 2015-8-13 09:18
那还用搞么,别人做好的模块,转uart了。你直接往里面丢数据,收数据就好了

嗯,就是我自己太差劲,脑子不够使,我还是赶紧学吧

回复

使用道具 举报

6

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

 楼主| 发表于 2015-8-13 19:22 | 显示全部楼层
liuxingyan 发表于 2015-8-13 19:18
嗯,就是我自己太差劲,脑子不够使,我还是赶紧学吧

可不可以结合DMA发送数据,串口总线空闲中断的时候接收数据?这样是双线的半双工吗

点评

我看你发的数据根本不多,你当串口用就行了,搞那么发杂干嘛,串口不会耗你多少时间的  详情 回复 发表于 2015-8-13 19:33

回复

使用道具 举报

502

TA的帖子

0

TA的资源

版主

Rank: 6Rank: 6

发表于 2015-8-13 19:33 | 显示全部楼层
liuxingyan 发表于 2015-8-13 19:22
可不可以结合DMA发送数据,串口总线空闲中断的时候接收数据?这样是双线的半双工吗

我看你发的数据根本不多,你当串口用就行了,搞那么发杂干嘛,串口不会耗你多少时间的

回复

使用道具 举报

6

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

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

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐上一条 1/7 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2020-6-1 23:17 , Processed in 0.302315 second(s), 30 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表