打印

STM32的USART单线半双工通信

[复制链接]
12935|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhxi|  楼主 | 2012-9-20 15:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
参考资料里面是这样描述的,非常简单单线半双方模式通过设置USART_CR3寄存器的HDSEL位选择。在这个模式里,下面的位必须保持清零状态:
● USART_CR2寄存器的LINEN和CLKEN位
● USART_CR3寄存器的SCEN和IREN位
USART可以配置成遵循单线半双工协议。在单线半双工模式下,TX和RX引脚在芯片内部互连。使用控制位”HALF DUPLEX SEL”(USART_CR3中的HDSEL位)选择半双工和全双工通信。
当HDSEL为’1’时
● RX不再被使用
● 当没有数据传输时,TX总是被释放。因此,它在空闲状态的或接收状态时表现为一个标准I/O口。这就意味该I/O在不被USART驱动时,必须配置成悬空输入(或开漏的输出高)。
除此以外,通信与正常USART模式类似。由软件来管理线上的冲突(例如通过使用一个中央仲裁器)。特别的是,发送从不会被硬件所阻碍。当TE位被设置时,只要数据一写到数据寄存器上,发送就继续。

这是我用逻辑分析仪捕捉到的串口数据,红色的是STM32发送的,绿色的是设备返回的。

这是我在MDK中设断点调试,看到的内容,串口接收使用DMA循环方式。
总结:由上面的两幅图可以看出,串口工作在单线半双工模式下时,串口的接收是一直有效的(串口初始化时使能),串口通过TX引脚发送出去的数据,串口也会受到,所以半双工方式下,硬件没有关闭接收的功能。


不知道我的理解是否正确

未命名.jpg (29.48 KB )

未命名.jpg

未命名2.jpg (11.81 KB )

未命名2.jpg
沙发
zhxi|  楼主 | 2012-9-20 15:51 | 只看该作者
把USART_CR1的RE清零后,串口收不到数据。所以在使用STM32的串口进行单线半双工通讯时,需要在发送数据前把RE清零,禁止接收数据;在发送完数据后,再把RE设置为1,开启数据接收。这个需要软件敢于,硬件没有实现自动的禁止与使能。

使用特权

评论回复
板凳
dongranmengming| | 2014-2-27 16:23 | 只看该作者
make 外加驱动,降低波特率,不知道传输距离能增加到多少

使用特权

评论回复
地板
海角儿| | 2014-10-22 21:36 | 只看该作者
求楼主贴出来半双工的具体做法和程序,在网上找了很长时间也没找到介绍详细的   拜谢

使用特权

评论回复
5
wuxiaoming217| | 2015-8-14 13:06 | 只看该作者
那如何存储机器返回的信息呢?

使用特权

评论回复
6
767904101| | 2015-9-16 21:23 | 只看该作者
同问

使用特权

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

本版积分规则

34

主题

146

帖子

1

粉丝