stm32串口之存储与解析
最近在做一个小项目,需要用stm32串口接受Arduino发送的一个不定长的数据,并且解析数据,执行其中的命令;秉着不在中断中做过多任务的思想,我们将从串口中接受到的字符放到一个数组当中。
定义数组
#define MAX_LENTH 100 #define u8 unsigned char u8 getCharFromArduino[MAX_LENTH];
串口中断函数
u8 *theNextCharAddress = getCharFromArduino; //指针指向下一个存储位置
void USART1_IRQHandler(void) { static u8 n=0; if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) { *theNextCharAddress = USART_ReceiveData(USART1); //存储数据 theNextCharAddress++; //指针指向下一个存储位置
if(theNextCharAddress < getCharFromArduino[MAX_LENTH]) //形成一个环形的存储空间 { //do noting } else{theNextCharAddress = GETCHARNUMBER;} theNextCharAddress = &getCharFromArduino[n]; } }
主函数中的解析函数
void dealDataFromArduino() { static u8 *p = getCharFromArduino; if(p == theNextCharAddress) //解析完毕 { //Do Nothing } else { //解析 } p++; //指针指向下一个解析位置 if(p < &getCharFromArduino[GETCHARNUMBER]) { //do noting } else { p = getCharFromArduino; } }
这是一种比较简单的接受,处理串口数据的方法;缺点是若存储的速度>>读取的速度时,数据发生了丢失却没有报错;
第一次发博客,希望各路看官批评指导。