zoukankan      html  css  js  c++  java
  • STM32串口发送第一个字符丢失解决之道

    stm32用printf函数重定向到串口USART1发现第一个字符没打印出来具体如下:

    刚开始修改fputc函数如下:

    int fputc(int ch,FILE *f)
    {
    USART_SendData(USART1,(uint8_t)ch);
    while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
    return(ch);
    }

    然后其他外设配置好之后直接使用printf(“abc");发现a打印不出来,具体原因为stm32的usart的sr寄存器的TC为初始为1,导致第一次while时的第一个数据被覆盖,所以打印不出;

    具体改进方法:

    1.直接修改while的等待条件,while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)==RESET);把TC改为TXE,因为TXE只能硬件清零,在数据写进DR时就置0,数据移出时置1,可以保证数据不会在DR被覆盖;

    2.既然TC位初始为1导致的问题,那么我们在发送每一个字节前把TC置0也可以解决问题,

    写多一句USART_ClearFlag(UART4, USART_FLAG_TC);

    3.条件允许情况下,也可以委屈自己一下,在输出字符前面加一没用字符,也可以解决;

  • 相关阅读:
    2
    1
    nginx隐藏版本号
    全面对比主流 .NET 报表控件 (转)
    前端的发展和未来趋势
    NPM初学者指南 (转)
    一文解读MySQL事务
    如何高效的学习技术
    重新统一的 .NET平台-.NET 5
    为啥要有微服务?啥是微服务?
  • 原文地址:https://www.cnblogs.com/god-of-death/p/6893555.html
Copyright © 2011-2022 走看看