0

将字符从 STM32F411 发送到 PC 时出现问题,它会读入垃圾,但是当我执行相反的操作时,MCU 会正确读取发送的字符。

我执行以下操作:

  1. 启用 GPIOA 时钟并配置引脚 9 和 10 备用功能。
  2. 启用 USART1,保留 M(消息长度)、停止位、DMA 的默认值
  3. 设置USARTDIV为在 16Mhz (HSI) 时产生 9600 波特*
  4. 配置 USART 以发送空闲帧作为第一次传输

* 我也尝试过 100MhzAPB2总线频率,结果相同。

配置 USART

// 1. Enable USART
SET_BIT(USART1->CR1, USART_CR1_UE);
// 5. Select the desired baud rate in BRR
SET_BIT(USART1->BRR, 0x683);        // USARTDIV
// 6. Set TE in CR1 to send an idle frame as first transmission
SET_BIT(USART1->CR1, USART_CR1_TE);

之后,我尝试接受具有以下配置的RealTerm2.0a字符:9600 8N1 None

字符通过以下代码发送:

void SendChar_USART(char pChar)
{
    // Transmitter 7, 8
    // 7. Write the data to send in the DR register (this clears TXE)
    USART1->DR = pChar;
    while(!READ_BIT(USART1->SR, USART_SR_TXE));
}

更新 1

切换到具有完全相同配置的 USART2 可以解决问题,并且可以从串行终端恢复文本,但是这个问题没有得到解答“为什么 USART1 不能按预期工作?”

4

1 回答 1

0

在连接扩展连接器的 PA9 引脚的路上有一个电容,可以过滤掉 USART1 TX。我认为彼得哈里森很好地解释了这个问题。

http://www.micromouseonline.com/2013/05/05/using-usart1-on-the-stm32f4discovery/

于 2017-12-14T08:42:52.330 回答