关于STM32F2的USART使用DMA的问题,请教一下大家

[复制链接]
 楼主| kuyu20 发表于 2013-6-26 10:26 | 显示全部楼层 |阅读模式
usart3,接收和发送都用DMA,都是非循环模式,接收完成有中断,波特率115200,用的是带自动切换方向的max13487芯片(RS485)。
问题是这样的:1.接收完后了,中断里设个标志,主程序里判断这个标志,将接收到的数据立马用DMA再发送出去,但是电脑串口接收到的数据不是其发发出的数据。如果stm32接收完毕后,延时一点点时间再发送出去,则电脑接收到的数据是正确的。不知道是max13487切换来不及导致的数据错误,还是stm32接收完成后,要等一段时间才能转发?
2.DMA的发送在非循环模式下,只能发送一次(已经执行了关闭DMA-设置发送数据量-开启DMA的动作),必须重新初始化设置DMA通道后,才能再次发送。是不是必须这样?stm32F1就不需要重新初始化通道,只需要执行关闭DMA-设置发送数据量-开启DMA的动作就可以再次发送。是什么原因呢?
airwill 发表于 2013-6-26 12:37 | 显示全部楼层
不知道是max13487切换来不及导致的数据错误,还是stm32接收完成后,要等一段时间才能转发?
都有可能, 可以用示波器观测波形验证一下
 楼主| kuyu20 发表于 2013-6-26 19:38 | 显示全部楼层
我认为可以忽略13487的切换方向导致的问题,因为自动切换是它的特点,如果自动切换前还要延时一段时间,那这个功能就太失败了,还不如不要!
cjhk 发表于 2013-6-26 20:45 | 显示全部楼层
不是很了解   楼主  帮你顶一个   不错哦   
qingqiu647 发表于 2013-7-4 01:32 | 显示全部楼层
切换485收发状态时,加点延时
baiyunfei.k.f 发表于 2013-7-4 13:45 | 显示全部楼层
应该是485切换的原因,至于DMA发送,F2我没用过,F1正如你所说
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

65

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部