请教一个stm32采用dma方式进行485控制切换发送时会自动接收00

2019-12-20 21:30发布

本帖最后由 小溪 于 2014-12-17 19:26 编辑

详细情况是这样的,stm32芯片控制485,接收设置成DMA自动循环方式,发送设置成单次dma方式,没有发送数据时接收数据循环接收覆盖都没有问题,但是在需要发送时,切换485发送使能后,此时dma接收设置都没有改变,但会接收到1字节00。单步调式时,发现发送使能(和接收使能接在一起的)变高后,dma接收缓冲区会自动多一字节00,此后想办法在切换前先关闭接收dma接收通道使能或usart接收dma关联,虽然485发送使能时不出现00了,但此后再恢复dma接收后还会出现1次00,另想办法在几处加延时,担心切换发送使能时485芯片接收线路不稳定,都没有效果,苦思冥想找不到解决办法,难道usart方式dma自动接收连接485芯片不能一直开着,会受485发送使能影响,换句话说切换会在接收通信线上产生1个00?怎么直接在usart中断接收发送方式下没发现这个问题呢?
====================================
把问题简单化,免得描述太多,说的太多反而别人看了不理解

如果把stm32某一usart固定设置为dma中断接收模式dma_mode_circular,这个usart是连接rs485芯片的,我使用的是磁隔离adm2587,应该和其他485驱动芯片差不多,如果程序中其他什么都不做或者做点点灯的事情,外界也不要向内发送数据,避免一切其他可能产生的干扰动作,也不要改变要测试的usart设置就行,将程序运行后暂停在主程序某一处后,通过调试软件中peripherals->general purpose I/O->GPIOx改变485发送接收使能控制连接的gpio引脚输出,注意了此时程序是不运行的,反复改变几次使能端,DMA接收缓存区就会接收到几个00字节(当然接下来要单步运行几步,要不单片机没有驱动时钟,也没法自动更新dma接收缓冲区),似乎是只有将485驱动使能由接收变为发送时,stm32的dma接收缓冲区就收到一个00,有没有办法不让产生这个问题?
有stm32带485的学习板的不妨简单测试一下,看我描述遇到的问题是不是普遍现象,搞不清怎么产生的,此时用示波器测量,该段时间内接收线路上也没有波动即没有数据流
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
23条回答
小溪
2019-12-21 20:59
cht-rtos 发表于 2014-12-17 13:53
如何发送?什么时候切换的?

其实什么时候需要发送就切换啊:
很简单2个条件下切换:
1.目前调试肯定在外部没有给STM32通过485线发送数据时,进行切换,比较这边要切换发送,是要让线路空闲才能进行切换的;
2.实际应用时,肯定是在接收到相关数据解析后,外部需要释放485总线等待响应,这边根据接收后的要求,需要响应时再立即切换发送使能,对外发送数据啊;
这个应该不用细说这些细节吧?应该都可以想到的

一周热门 更多>