2021-12-9 10:52:24
//需使能接收非空 和 总线空闲中断
char USART2_IT_string[400];
//全局变量,最终收到的字符串放入,通过判断是否为空来判断是否接收到数据,使用完这个字符串后**务必清零**
char USART2_IT_string_buf[400];
//全局变量,接收字符串的缓存
void USART2_IRQHandler(void){//接收字符串的中断处理函数
//u8 char_buf;//改为了全局变量
if(SET == USART_GetITStatus(USART2,USART_IT_RXNE)){
USART_ClearITPendingBit(USART2,USART_IT_RXNE);
//清除接收非空中断标志
char_buf = USART_ReceiveData(USART2);
//接收这一个字符
put_char(char_buf,USART2_IT_string_buf);
//将接收到的字符放入字符串缓存
}
if(SET == USART_GetITStatus(USART2,USART_IT_IDLE)){
//USART_ClearITPendingBit(USART2,USART_IT_IDLE);
//上面的清除操作不会生效,只能通过下2句清除
USART1->SR;//先读SR
USART_ReceiveData(USART2);//再读DR
//通过读SR,DR清除USART_IT_IDLE标志位
strcpy(USART2_IT_string,USART2_IT_string_buf);
//将接收完成的字符串缓存放入实际字符串
mbzero(USART2_IT_string_buf,sizeof(USART2_IT_string_buf));
//将字符串缓存清零,以便下一次从头开始拼接,避免溢出
}
}
void put_char(char char_buf, char * char_str){//将字符装入字符串,从第一个'