UART的Rx和Tx引脚如何互换,电平如何反转

今天给大家分享关于STM32关于UART的一些新特性,主要针对较新系列STM32(如:STM32H7、G0、G4等)的UART,可通过软件改变Rx和Tx引脚、电平反转、高低反序、介绍超时等。

支持RXD和TXD管脚互换

有些时候,我们在外接RS232芯片时,可能会将RXD和TXD两根线接反。这类低级错误,一般是老司机才会犯640?wx_fmt=png

如果大家知道USART的TXD和RXD管脚可以互换,那么在连接外设RS232芯片时,如果发生错误,就不必再修改硬件,只需直接在软件中将RXD和TXD的管脚反转过来即可修正错误。

640?wx_fmt=jpeg

640?wx_fmt=png

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

支持接收和发送的电平极性反转

第二个新特性:Tx和Rx电平极性反转。

通常默认串口电平是高电平为逻辑1,低电平为逻辑0。而在STM32的USART新特性中是可以将高电平设置为逻辑0,低电平设置为逻辑1的。

这一特性,让我们在一些特殊的场景下灵活使用,如:USART外接了反相器时就可以直接使用。

在数据接收发送寄存器中,数据也是可以反转的,原来的0变为1,原来的1变为0,这和电平极性反转是类似。需要特别注意的是,在极性反转的时候,起始位和结束位也都反转了,所有的信号电平都反转;而在数据寄存器中只反转了数据位,其中也包含了校验位,没有反转信号的起始位和结束位的极性。

640?wx_fmt=jpeg

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

支持数据高位与低位反序发送或接收

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

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

640?wx_fmt=jpeg

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

USART支持DMA传输

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

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

640?wx_fmt=gif

USART 新特性小结

640?wx_fmt=gif

  • 支持RXD和TXD管脚的互换

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

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

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


推荐阅读:

从ASCII码->Unicode->UTF-8历史变迁

STM32网址大全

关注公众号『strongerHuang』,在后台回复“1024”,查看更多精彩内容,回复“加群”,可加入黄工的技术交流群。

640?wx_fmt=jpeg

长按识别图中二维码关注

<think>好的,我现在需要处理用户关于STM32F103微控制器中RXTX引脚配置及用法的问题。首先,用户提到了参考引用中的内容,里面提到了USART1、USART2UART4的TX/RX引脚分配。我需要确认这些信息是否正确,并补充更多细节。 首先,我应该回忆STM32F103系列微控制器的USART模块情况。STM32F103C8T6通常有3个USART(USART1、USART2、USART3)2个UARTUART4、UART5),但具体型号可能有差异。需要确认用户提到的UART4是否存在于该型号中,因为有些资料可能显示STM32F103C8T6没有UART4,这可能是引用中的错误。 接下来,用户需要引脚配置使用方法。USART的TXRX引脚是用于串行通信的,TX发送数据,RX接收数据。配置这些引脚通常需要启用对应的GPIO时钟USART时钟,设置GPIO为复用推挽输出(TX浮空输入或上拉输入(RX),然后配置USART参数,如波特率、数据位、停止位等。 此外,可能涉及复用功能的重映射。例如,USART1的默认引脚是PA9PA10,但可以通过重映射到PB6PB7。需要提到AFIO时钟的启用重映射寄存器的配置。 还要考虑用户可能的实际应用场景,比如使用库函数(标准库或HAL库)进行配置,或者直接操作寄存器。举一个示例代码会更有帮助,比如使用标准库初始化USART1的步骤。 另外,需要注意不同USART模块所在的APB总线,时钟配置可能不同,比如USART1在APB2,其他可能在APB1,这会影响时钟使能波特率计算。 可能用户遇到的问题包括引脚冲突、重映射配置错误、波特率不匹配等,需要简单提及常见问题及解决方法。 最后,生成相关问题,帮助用户深入理解,比如多串口使用、DMA配置、中断处理等。</think>### STM32F103 RX/TX引脚配置及使用方法 #### 一、引脚定义功能 STM32F103C8T6的**USART模块**对应的RX/TX引脚如下: 1. **USART1**(APB2总线) - TX:PA9(默认)或 **PB6**(重映射) - RX:PA10(默认)或 **PB7**(重映射) 2. **USART2**(APB1总线) - TX:PA2(默认)或 **PD5**(重映射) - RX:PA3(默认)或 **PD6**(重映射) 3. **USART3**(APB1总线) - TX:PB10(默认)或 **PC10**(部分重映射) - RX:PB11(默认)或 **PC11**(部分重映射) ⚠️ 注意:原引用中提到的**UART4**在STM32F103C8T6中不存在,应为笔误[^1]。 #### 二、配置步骤(以USART1为例) 1. **启用时钟** ```c RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE); ``` 2. **GPIO模式设置** - TX引脚:复用推挽输出 - RX引脚:浮空输入(或上拉输入) ```c GPIO_InitTypeDef GPIO_InitStruct; // 配置TX(PA9) GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStruct); // 配置RX(PA10) GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStruct); ``` 3. **USART参数配置** ```c USART_InitTypeDef USART_InitStruct; USART_InitStruct.USART_BaudRate = 115200; USART_InitStruct.USART_WordLength = USART_WordLength_8b; USART_InitStruct.USART_StopBits = USART_StopBits_1; USART_InitStruct.USART_Parity = USART_Parity_No; USART_InitStruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; USART_Init(USART1, &USART_InitStruct); USART_Cmd(USART1, ENABLE); ``` #### 三、引脚重映射方法 若需使用PB6/PB7作为USART1引脚: 1. 启用AFIO时钟 ```c RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); ``` 2. 执行重映射 ```c GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE); ``` #### 四、典型应用场景 1. 通过USB转TTL模块PC通信 2. 连接GPS/BLE/WiFi等串口外设 3. 多设备级联通信(需注意电平匹配)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值