今天下午调试STM32407的串口时候发现在初始化函数完成后,

  • 直接使用库的发送数据函数发送一个字节没有问题
  • 重写了printf函数使用printf函数输出时在第一次输出的时候会出现丢失一个字节,后面输出正常的问题,

仿真发现时没有清除状态寄存器导致

在使能了UART的时钟的时候 TXE 与 TC会置位,

  • TXE状态位显示发送数据寄存器为空 ,
  • TC状态位显示发送是否完成,

而printf的重写字节输出函数中检测字节数据是否发送完成时通过检测TC位,在第一次发送的时候,TC位已经为1所有在第一次发送的时候直接就会运行完成,导致在第一次发送数据的时候会丢失一个字节,后面的数据正常的现象

int fputc(int ch, FILE *f)

{

/* Place your implementation of fputc here */

/* e.g. write a character to the USART */

USART_SendData(USART1, (uint8_t) ch);

/* Loop until the end of transmission */

while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)

{}

return ch;

}

发表评论

你的电子邮件地址不会被公开 * 为必填字段

提交评论