STM32F103发送数据时丢失第一个

问题:在首次启动,程序发送数组时,会丢失第一个,但是第二次发送就正常。如下图
串口丢失.png
问题程序:
int main (void){
    RCC_Configuration();
    USART1_Init();
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
    PWR_WakeUpPinCmd(ENABLE);
    SendData();      //第一次发送
    delay_ms(2000);
    SendData();     //第二次发送
    PWR_EnterSTANDBYMode();
}
void SendData() {
    u8 hex[] = {0xFC, 0x0A, 0x03, 0x02, 0x00, 0x00, 0xF4, 0x01, 0x00, 0x00, 0x00, 0x00};
    for(u8 i=0; i<12; i++) {
        USART_SendData(USART1, hex[i]);
        while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
    }
}

解决办法:在SendData()前面加USART_ClearFlag(USART1,USART_FLAG_TC);

正确程序
void SendData() {
    u8 hex[] = {0xFC, 0x0A, 0x03, 0x02, 0x00, 0x00, 0xF4, 0x01, 0x00, 0x00, 0x00, 0x00};
    for(u8 i=0; i<12; i++) {
        USART_ClearFlag(USART1,USART_FLAG_TC);    //添加这一句
        USART_SendData(USART1, hex[i]);
        while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
    }
}
正确现象
串口正常.png
posted @ 2023-02-07 17:57  skypang  阅读(63)  评论(0)    收藏  举报  来源