[STM32F0]

STM32F0系列RS485的自动收发控制

[复制链接]
4818|6
手机看帖
扫描二维码
随时随地手机跟帖
fzyuan|  楼主 | 2017-9-13 13:00 | 显示全部楼层 |阅读模式
STM32F0系列的USART具有RS485的自动收发控制功能,但,怎么用呢?
手册上说其控制(DE)引脚与USART1_RTS复用,那么USART1_RTS引脚还需要配置吗?
目前遇到的问题是USART1_RTS引脚怎么都不会变。
下面是关于使能(收发控制)功能的配置:
        USART_DECmd(USART1, ENABLE);
        USART_DEPolarityConfig(USART1, USART_DEPolarity_High);
        USART_SetDEAssertionTime(USART1, 10);
        USART_SetDEDeassertionTime(USART1, 10);

USART1的数据发送是采用DMA的。
USART1的发送接收完全正常,就是RS485的DE不对。

请各位大侠帮忙了。
mmuuss586| | 2017-9-13 20:05 | 显示全部楼层

没试过这个功能呢;

使用特权

评论回复
jimmhu| | 2017-9-13 22:49 | 显示全部楼层
控制引脚设置了吗

使用特权

评论回复
jimmhu| | 2017-9-13 22:52 | 显示全部楼层
485发送完成后,是需要释放总线的。

使用特权

评论回复
fzyuan|  楼主 | 2017-9-16 09:48 | 显示全部楼层
如果用软件去控制DE(采用直接操作GPIO的形式)是可以的,但由于数据是DMA在操作,
当DMA完成时,实际的UART数据并没有完全从端口送出(DMA只是完成了将数据从内存转移到UART的发送寄存器),
而此时是不可以直接禁止DE的,必须等待数据真正的发送结束(可以查询USART的控制寄存器),才能禁止DE,
所以,很不希望采用这种方式。
手册上说其RS485模式下的DE与RTS共用,并且可以提前若干个波特率的采样周期使能DE,并且在数据的最后一位的中间位置之后延时若干个波特率采样周期后禁止。

使用特权

评论回复
patator| | 2021-6-11 13:54 | 显示全部楼层

使用特权

评论回复
東南博士| | 2021-6-14 13:23 | 显示全部楼层
当DMA完成时,实际的UART数据并没有完全从端口送出(DMA只是完成了将数据从内存转移到UART的发送寄存器),
而此时是不可以直接禁止DE的,必须等待数据真正的发送结束(可以查询USART的控制寄存器),才能禁止DE

学到了!

学习学习!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

1960

帖子

16

粉丝