今天我与大家分享一些关于STM32中UART的特性,特别是针对较新系列的STM32(如:STM32H7、G0、G4等)的UART。在这些系列的UART中,我们可以通过软件来改变Rx和Tx引脚、电平反转、高低反序以及设置超时等功能。
支持RXD和TXD管脚互换
在连接外部RS232芯片时,有时会出现将RXD和TXD两根线接反的情况。虽然这种错误通常是只有经验丰富的人才会犯的低级错误,但如果您知道USART的TXD和RXD管脚可以互换,那么当出现这样的错误时,您就不必再修改硬件了。只需在软件中直接将RXD和TXD的管脚反转过来,即可轻松纠正错误。
参考上图,设置SWAP位,即可将RXD和TXD管脚互换。
支持接收和发送的电平极性反转
第二个新特性:Tx和Rx****电平极性反转。
通常默认串口电平是高电平为逻辑1,低电平为逻辑0。而在STM32的USART新特性中是可以将高电平设置为逻辑0,低电平设置为逻辑1的。
这一特性,让我们在一些特殊的场景下灵活使用,如:USART外接了反相器时就可以直接使用。
在数据接收发送寄存器中,数据也是可以反转的,原来的0变为1,原来的1变为0,这和电平极性反转是类似。需要特别注意的是,在极性反转的时候,起始位和结束位也都反转了,所有的信号电平都反转;而在数据寄存器中只反转了数据位,其中也包含了校验位,没有反转信号的起始位和结束位的极性。
参考上图,在USART_CR2寄存器中TXINV、RXINV和DATAINV位来进行设置。
支持数据高位与低位反序发送或接收
第三个新特性:发送和接收数据时,可在寄存器中设置是先发低位还是先发高位。
默认的配置都是先发送或接收低位的信号(bit 0),实际应用中,通过USART_CR2中的MSBFIRST设置后,也可以让USART先发送或接收高位信号(bit 7/8),这一点在对数据进行反序的时候会经常用到它。
我们可以考虑这种情况,如果需要把串口接收到的数据先进行反序操作之后,再进行计算,那这个硬件的功能就可以帮助我们节省很多软件的工作量。
USART支持DMA传输
最后,STM32的USART都是支持DMA的,这一点有利于做数据的连续发送和数据的缓冲接收。在某些STM32产品系列中,如STM32F4和H7系列具有专门的串口FIFO,这就可以用来做串口唤醒,先让MCU进入到Sleep模式,当接收到一个完整的数据包,这个数据包可能是100个字节或者200个字节,之后再唤醒单片机,这样既可以做到不丢数据又可以降低MCU的唤醒频率。
另外,USART的接收还具有超时功能,可以人为设定一个时间,在USART的RTOR寄存器中进行设置,当串口接收的数据帧之间超过了这个设定值,就会引发一个超时中断,串口中会有一个叫RTOF的标志位来显示发生的超时事件,我们通过这个中断中应用的代码就可以知道串口的数据发生了中断现象,近似可认为对方的数据已经发送完成。这种方式,在串口上层协议的开发中,有很多应用场景。
USART 新特性小结
-
支持RXD和TXD管脚的互换 -
支持管脚上的电平逻辑反转和数据寄存器中的逻辑反转 -
支持数据高位与低位反序发送或接收,既可以先发送或接收低位,也可以先发送或接收高位 -
支持接收数据的超时功能,并且每个USART都可以支持DMA传输
以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !