stm32在使用中断方式进行串口接收数据的时候,官方库中可以调用USART_ReceiveData(USART1),似乎并没有现成的功能可以使用,而且keil中使用一般意义上的字符串又很困难,所以这些东西大多需要自己现写,分享一下我写的思路。
比如接收四个字符,如下代码编译器需要进入四次中断来完整接收四个字节的数据,这里简单的接收到最后一位的时候转回头一位来接收。
void USART1_IRQHandler(void) { if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) { USART_ClearITPendingBit(USART2,USART_IT_RXNE); data[i] = USART_ReceiveData(USART1); i++; if(i==4)i=0; }
}
这样容易产生丢包,而且对于长度不同的消息很难处理,所以更多的时候需要自己灵活定义一个协议,例如#abcdef*,然后通过判断起始和结尾的字符,把中间的内容存到数组里面来实现多位数据或者字符串的接收。
原文:http://www.cnblogs.com/kyasever/p/5234329.html