您现在的位置: 主页 > MCU > 单片机应用 > STM32单片机串口接收不定长无标志位字符串定时器判断结束 -
本文所属标签:
为本文创立个标签吧:

STM32单片机串口接收不定长无标志位字符串定时器判断结束 -

来源: 网络用户发布,如有版权联系网管删除 2018-09-08 

[导读]写在前面的话,以警示所有程序员。你们或许还没有发现,随着我们深入编程领域的时间越久,我们程序员的思维越来越简单,情商也越来越低,这就是编程行业对我们自身的影响。整体跟逻辑的东西打交道,思维当然会固化。

写在前面的话,以警示所有程序员。

本文引用地址: http://www.21ic.com/app/mcu/201808/778965.htm


你们或许还没有发现,随着我们深入编程领域的时间越久,我们程序员的思维越来越简单,情商也越来越低,这就是编程行业对我们自身的影响。整体跟逻辑的东西打交道,思维当然会固化。如何避免呢?想知道的话留个言,我会在下一篇博文中更新。


还要警示的是:做一个程序员的能力是有限的,一个程序员团队才可以做成大事。无论哪种语言,哪种程序,都不重要,重要的是我们的思路和逻辑,语言只是工具,不是目的!

//串口1中断服务程序

void USART1_IRQHandler(void)

{

u8 rec_data;

u8 i=0;

if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断

{

rec_data =(u8)USART_ReceiveData(USART1); //(USART1->DR) 读取接收到的数据

if((USART_RX_STA & 0x80)==0) //接收未完成,未检测到 0x0d 0x0a的结束符

{

USART_RX_BUF[USART_RX_STA & 0X7F]=rec_data;

USART_RX_STA++;

if(USART_RX_STA>127){USART_RX_STA=0;}//接收超过127,直接复位,重新接收

else {U1_Rx_Tout=0;Tout_Start=1;} //置零,开始计时

}

}

}

//定时器2中断服务函数

void TIM2_IRQHandler(void)

{

if(TIM_GetITStatus(TIM2,TIM_IT_Update)==SET) //溢出中断

{

if(Tout_Start==1){

U1_Rx_Tout++;//接收超时累加

if(U1_Rx_Tout>=2){USART_RX_STA|=0x80;Tout_Start=0;}}//超过20ms,接收结束

}

TIM_ClearITPendingBit(TIM2,TIM_IT_Update); //清除中断标志位

}

//主循环:接收到数据,判断结束后,及时发送到电脑

while(1)

{

if(USART_RX_STA&0x80)

{

len=USART_RX_STA&0x7F;//读取接收数据的长度

uart1SendChars(USART_RX_BUF,len);//发送

USART_RX_STA=0; //一定要清零,否则重复执行if以及无法接收新数据

}

}




              查看评论 回复



嵌入式交流网主页 > MCU > 单片机应用 > STM32单片机串口接收不定长无标志位字符串定时器判断结束 -
 

"STM32单片机串口接收不定长无标志位字符串定时器判断结束 -"的相关文章

网站地图

围观()