STM32F4 USART1发送垃圾

时间:2017-04-16 19:08:42

标签: stm32 cortex-m cmsis

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

我执行以下操作:

  1. 启用GPIOA时钟并配置引脚9和10的备用功能。
  2. 启用USART1,保留M(消息长度),停止位,DMA
  3. 的默认值
  4. USARTDIV设置为16Mhz(HSI)时产生9600波特率*
  5. 配置USART以发送空闲帧作为第一次传输
  6. *我也试过100Mhz APB2总线频率,结果相同。

    配置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.0 接受a字符: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无法按预期工作?"

1 个答案:

答案 0 :(得分:0)

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

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