STM32的USART的硬件设计与软件设计技巧

我是兼任硬件设计和软件开发,在项目中遇到一些问题,主要是硬件设置中遇到的一些问题,最后解决是硬件和软件相配合去解决的

硬件 STM32F429

1 保留一个UART对外输出信息,但是IO口不好走线,或者被占用怎么处理?

可以使用UART的重定向(重映射)功能,比如USART1,常规使用的是PA9 PA10,但是可以将USART1 重映射到 PB6 PB7上

 这个是常规的。还可以在保持TX和RX不变的情况喜,将待映射的管教自由组合。

USART1PA9-TX 
USART1PA10-RX从两组TX和两组RX中选择一个进行组合
USART1PB6 -TX也是可以的
USART1PB7-RX

  比如 USART1的TX/RX可以是PA9/PB7,也可以是 PA10/PB6,这样组合也是可以的,可以得到如下组合

串口可重映射IO重映射组说明
USART1PA9-TXPA9-TX  PA10-RX常规设计
PA10-RXPA9-TX  PB7-RX可选设计
PB6 -TXPB6 -TX PB7-RX常规设计
PB7-RXPB6 -TX  PA10-RX可选设计

关于验证是否正确的问题,可以在STM32CubeMX中确定,选择上表中的可选设计来验证下:PA9-TX  PB7-RX

下图是我的默认设置,使用PA9/ PA10.

重新设置后 如下

 2.USART的TXRX外接串口转接芯片,TXRX设计接反

我们在外接RS232芯片时,会犯这类低级错误,可能会将RXD和TXD两根线接反。如果发生错误,部分STM32型号可不必再修改硬件,注意是部分STM32型号

比如STM32F42系列就没有此功能

 在一些比较新的MCU中就可以在结构框图中看到

 在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交换!

 3.TX RX 电平极性反转

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

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

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

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值