我将STM32F411中的char发送到PC时出现问题,但是当我执行相反的操作时,MCU会正确读取已发送的字符。
我执行以下操作:
USARTDIV
设置为16Mhz(HSI)时产生9600波特率* *我也试过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无法按预期工作?"
答案 0 :(得分:0)
在连接USART1 TX滤波器的PA9引脚的路上有一个电容器。我认为彼得哈里森很好地解释了这个问题。
http://www.micromouseonline.com/2013/05/05/using-usart1-on-the-stm32f4discovery/