完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
//需使能接收非空 和 总线空闲中断 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){//将字符装入字符串,从第一个' |