STM32学习——串口

来源:互联网 发布:凸包算法 时间复杂度 编辑:程序博客网 时间:2024/06/09 08:08

关于串口接收

1、实验发现发送端需发送‘\r\n’串口才能接收到,其实不然,我们使用的是中断模式来接收数据,每发一个字节数据都会触发一次中断,中断中使用库函数

Res =USART_ReceiveData(USART1)来接收一个字节数据,若发2个就触发两次。

2、通常会发送一连串数据,对于这一连串的数据,我们要知道什么时候收到数据的尾巴,所以采用“”\r\n“”来标记为这串数据结束,同时接收结束时点亮个标志位,在主函数可以一直查询这个标准,点亮就说明收到数据,同时还需要记录数据的长度,还要有收到\r的标志(用来在中断函数中判断下一次是否收到的是\n)

程序源码



u16 USART_RX_STA=0;       //接收状态标记void USART1_IRQHandler(void)                //串口1中断服务程序{u8 Res;#if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS为真,则需要支持OSOSIntEnter();    #endifif(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾){Res =USART_ReceiveData(USART1);//读取接收到的数据if((USART_RX_STA&0x8000)==0)//接收未完成{if(USART_RX_STA&0x4000)//接收到了0x0d  /r{if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始   /nelse USART_RX_STA|=0x8000;//接收完成了 }else //还没收到0X0D  /r{if(Res==0x0d)USART_RX_STA|=0x4000;else{USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;USART_RX_STA++;if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收  } }}         } #if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.OSIntExit();   #endif} 




原创粉丝点击