UART的Rx和Tx引脚如何互换,电平如何反转( SWAP-交换算法)

今天给大家分享关于STM32关于UART的一些新特性,主要针对较新系列STM32(如:STM32H7、F0、G0、G4等)的UART,可通过软件改变Rx和Tx引脚、电平反转、高低反序、介绍超时等。有些时候,我们在外接RS232芯片时,会犯这类低级错误,可能会将RXD和TXD两根线接反。如果发生错误,部分STM32型号可不必再修改硬件,只需直接在软件中将RXD和TXD的管脚反转过来即可修正错误。

第一新特性:支持RXD和TXD管脚互换。

参考下图,设置SWAP位,即可将RXD和TXD管脚互换。

UART的Rx和Tx引脚如何互换,电平如何反转( SWAP-交换算法)_第1张图片

以STMF10系列库函数为例:

stm32f0xx_usart.c中找到下面函数:

/**
  * @brief  Enables or disables the swap Tx/Rx pins.
  * @param  USARTx: where x can be 1 or 2 to select the USART peripheral.
  * @param  NewState: new state of the USARTx TX/RX pins pinout.
  *          This parameter can be:
  *            @arg ENABLE: The TX and RX pins functions are swapped.
  *            @arg DISABLE: TX/RX pins are used as defined in standard pinout
  * @note   This function has to be called before calling USART_Cmd() function.  
  * @retval None
  */
void USART_SWAPPinCmd(USART_TypeDef* USARTx, FunctionalState NewState)
{
  /* Check the parameters */
  assert_param(IS_USART_ALL_PERIPH(USARTx));
  assert_param(IS_FUNCTIONAL_STATE(NewState));


  if (NewState != DISABLE)
  {
    /* Enable the SWAP feature by setting the SWAP bit in the CR2 register */
    USARTx->CR2 |= USART_CR2_SWAP;
  }
  else
  {
    /* Disable the SWAP feature by clearing the SWAP bit in the CR2 register */
    USARTx->CR2 &= (uint32_t)~((uint32_t)USART_CR2_SWAP);
  }
}


于是在串口初始化后调用 USART_SWAPPinCmd(COM_USART[COM1], ENABLE);
  NVIC_InitTypeDef NVIC_InitStructure;
  USART_InitTypeDef USART_InitStructure;
  USART_InitStructure.USART_BaudRate = 115200;
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  USART_InitStructure.USART_StopBits = USART_StopBits_1;
  USART_InitStructure.USART_Parity = USART_Parity_No;
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  STM_COMInit(COM1, &USART_InitStructure);
        
  USART_SWAPPinCmd(COM_USART[COM1], ENABLE);   // 这里使能SWAP交换功能,便可以实现TXD & RXD交换!

第二个新特性:Tx和Rx电平极性反转。
通常默认串口电平是高电平为逻辑1,低电平为逻辑0。而在STM32的USART新特性中是可以将高电平设置为逻辑0,低电平设置为逻辑1的。
这一特性,让我们在一些特殊的场景下灵活使用,如:USART外接了反相器时就可以直接使用。
在数据接收发送寄存器中,数据也是可以反转的,原来的0变为1,原来的1变为0,这和电平极性反转是类似。需要特别注意的是,在极性反转的时候,起始位和结束位也都反转了,所有的信号电平都反转;而在数据寄存器中只反转了数据位,其中也包含了校验位,没有反转信号的起始位和结束位的极性。

UART的Rx和Tx引脚如何互换,电平如何反转( SWAP-交换算法)_第2张图片

参考上图,在USART_CR2寄存器中TXINV、RXINV和DATAINV位来进行设置。

第三个新特性:发送和接收数据时,可在寄存器中设置是先发低位还是先发高位。

默认的配置都是先发送或接收低位的信号(bit 0),实际应用中,通过USART_CR2中的MSBFIRST设置后,也可以让USART先发送或接收高位信号(bit 7/8),这一点在对数据进行反序的时候会经常用到它。

UART的Rx和Tx引脚如何互换,电平如何反转( SWAP-交换算法)_第3张图片

我们可以考虑这种情况,如果需要把串口接收到的数据先进行反序操作之后,再进行计算,那这个硬件的功能就可以帮助我们节省很多软件的工作量。

第四个新特性:USART支持DMA传输
最后,STM32的USART都是支持DMA的,这一点有利于做数据的连续发送和数据的缓冲接收。在某些STM32产品系列中,如STM32F4和H7系列具有专门的串口FIFO,这就可以用来做串口唤醒,先让MCU进入到Sleep模式,当接收到一个完整的数据包,这个数据包可能是100个字节或者200个字节,之后再唤醒单片机,这样既可以做到不丢数据又可以降低MCU的唤醒频率。

另外,USART的接收还具有超时功能,可以人为设定一个时间,在USART的RTOR寄存器中进行设置,当串口接收的数据帧之间超过了这个设定值,就会引发一个超时中断,串口中会有一个叫RTOF的标志位来显示发生的超时事件,我们通过这个中断中应用的代码就可以知道串口的数据发生了中断现象,近似可认为对方的数据已经发送完成。这种方式,在串口上层协议的开发中,有很多应用场景。

USART 新特性小结

支持RXD和TXD管脚的互换

支持管脚上的电平逻辑反转和数据寄存器中的逻辑反转

支持数据高位与低位反序发送或接收,既可以先发送或接收低位,也可以先发送或接收高位

支持接收数据的超时功能,并且每个USART都可以支持DMA传输

STM32网址大全(快速定位网址查找资料)

一、网站
ST官网:www.st.com
ST社区:www.stmcu.org.cn
ST中文网:www.stmcu.com.cn
查找STM32的软件工具、文档资料,推荐到以上三个网站,但强烈建议到ST官网查找(最新、最权威)。

二、ST官网
ST官网:www.st.com

许多小伙伴觉得ST官网是英文(有中文版,但基本也是英文),而且比较“卡”,查找STM32的资料比较麻烦。
其实不然,ST网站经过多次改版,在ST官网找资料软件是最容易的,而且是最新、最权威的。

工具:STM32CubeMX、STM32CubeProg等。

比如STM32F103ZE:
https://www.st.com/en/microcontrollers-microprocessors/stm32f103ze.html

假如你想查找STM32F407VE的资料工具,修改网址中MCU型号即可。
https://www.st.com/en/microcontrollers-microprocessors/stm32f407ve.html

同样道理,针对STM8也是类似,比如STM8S103F3:
https://www.st.com/en/microcontrollers-microprocessors/stm8s103f3.html

提示:
开发MCU所需资料工具,基本能从这个网址下找到(记住这个网址很重要)。

三、ST常用网址
ST网址其实有很多规律,找到其中规律,你可以快速定位网址,也就能快速找到对应的资料、软件。
这里罗列一些常用网址(请大家仔细查看网址,你也能发现其中规律)。

1.STM8、32标准外设库(SPL)
A.STM8标准外设库
http://www.st.com/en/embedded-software/stm8-embedded-software.html?querycriteria=productId=SC1807

包含STM8S、STM8AF、STM8L、STM8AL全系列标准外设库,展开即可看见。

B.STM32标准外设库

http://www.st.com/en/embedded-software/stm32-embedded-software.html?querycriteria=productId=SC961

选择STM32 Standard Peripherals Librarys即可看见STM32F0、F1、F2、F3、F4、L1的库(F7、L0、L4官网只提供HAL库)。

2.STM32CubeIDE
https://www.st.com/en/development-tools/stm32cubeide.html

3.STM8、32CubeMX
https://www.st.com/en/development-tools/stm8cubemx.html

https://www.st.com/en/development-tools/stm32cubemx.html

4.STM32CubeProgrammer

https://www.st.com/en/development-tools/stm32cubeprog.html

5.STM32 ST-LINK Utility

https://www.st.com/en/development-tools/stsw-link004.html

6.STM32 Flash loader

https://www.st.com/en/development-tools/flasher-stm32.html
(公众号不支持外链接,请复制网址到浏览器打开)

当然,还要更多内容,后续我会在公众号底部菜单整理出来。
提示:
ST的网址后续可能会改版,网址可能会变化,但不用担心,改版之后依然可继续使用之前网址(映射,兼容)。

你可能感兴趣的:(UART的Rx和Tx引脚如何互换,电平如何反转( SWAP-交换算法))