将字符从 STM32F411 发送到 PC 时出现问题,它会读入垃圾,但是当我执行相反的操作时,MCU 会正确读取发送的字符。
我执行以下操作:
- 启用 GPIOA 时钟并配置引脚 9 和 10 备用功能。
- 启用 USART1,保留 M(消息长度)、停止位、DMA 的默认值
- 设置
USARTDIV
为在 16Mhz (HSI) 时产生 9600 波特* - 配置 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 不能按预期工作?”