usart.c串口中断处理函数: [cpp] view plaincopy void USART1_IRQHandler(void) { u8 res; if(USART1->SR&(1<<5))//接收到数据 { res=USART1->DR; if(USART1_Recv_LenCV_LEN) //还可以接收数据 { TIM3->CNT=0; //计数器清空 if(Rec_Over_Flag==0)TIM3_Set(1); //使能定时器4的中断 USART1_RX_BUF[USART1_Recv_Len++]=res; //记录接收到的值 }else { Rec_Over_Flag=1; //强制标记接收完成 } } } timer.c定时器中断函数 //定时器3中断服务程序 void TIM3_IRQHandler(void) { if(TIM3->SR&0X0001)//溢出中断 { Rec_Over_Flag=1; TIM3->SR&=~(1<<0); //清除中断标志位 TIM3_Set(0); LED1=!LED1; //RxTimeout等于0,变换LED1表明该次发送结束 } } //设置TIM4的开关 //sta:0,关闭;1,开启; void TIM3_Set(u8 sta) { if(sta) { TIM3->CNT=0; //计数器清空 TIM3->CR1|=1<<0; //使能定时器3 }else TIM3->CR1&=~(1<<0);//关闭定时器3 } main.c主函数 [cpp] view plaincopy int main(void) { u8 t; u8 Password[7]="123456"; u8 Tishi1[]="操作码长度不对"; u8 Tishi2[]="操作码不正确"; u8 Tishi3[]="指令成功执行!"; u16 times=0; Stm32_Clock_Init(9); //系统时钟设置 delay_init(72); //延时初始化 uart_init(72,57600); //串口初始化为57600 LED_Init(); //初始化与LED连接的硬件接口 Timerx_Init(99,7199); //10kHz的技术频率,计数到100为10ms while(1) { if(Rec_Over_Flag==1) { if(USART1_Recv_Len!=0x06) //USART1_Recv_Len接收数据的长度不等于6 { Putstrings(Tishi1); } else // USART1_Recv_Len接收数据的长度等于6 { for(t=0;t { if(USART1_RX_BUF[t]!=Password[t]) { Putstrings(Tishi2); break; } else if(t==(USART1_Recv_Len-1)) { Putstrings(Tishi3); LED0=!LED0; } } } Rec_Over_Flag=0; USART1_Recv_Len=0; } else { times++; // if(times%30==0)LED1=!LED1;//闪烁LED,提示系统正在运行. // if(times%30==0)RxTimeout--; delay_ms(10); } } } //------------输出字符串到串口------------------- void Putstrings(u8 *ptr) { while(*ptr!='') { USART1->DR=*ptr++; while((USART1->SR&0X40)==0);//等待发送结束 } USART1->DR='n'; }
导读:目前正在解读《STM32-串口超时判断方式接收未知长度数据》的相关信息,《STM32-串口超时判断方式接收未知长度数据》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《STM32-串口超时判断方式接收未知长度数据》的详细说明。
简介:本文给大家介绍了STM32-串口超时判断方式接收未知长度数据。
提醒:《STM32-串口超时判断方式接收未知长度数据》最后刷新时间 2024-03-14 00:57:54,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《STM32-串口超时判断方式接收未知长度数据》该内容的真实性请自行鉴别。