问题:在首次启动,程序发送数组时,会丢失第一个,但是第二次发送就正常。如下图
问题程序:
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);
}
}
正确现象