参考资料里面是这样描述的,非常简单单线半双方模式通过设置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引脚发送出去的数据,串口也会受到,所以半双工方式下,硬件没有关闭接收的功能。
不知道我的理解是否正确
|