您的位置 首页 模拟

STM32串口超时判别方法接纳不知道长度数据

usart.c串口中断处理函数:voidUSART1_IRQHandler(void){u8res;if(USART1->SR(15))//接收到数据{res=USART1->DR;…

usart.c串口中止处理函数:

void USART1_IRQHandler(void){    u8 res;	    if(USART1->SR&(1<<5))//接纳到数据{	 res=USART1->DR; 			 if(USART1_Recv_LenCNT=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主函数

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);	 //串口初始化为57600LED_Init();		  	 //初始化与LED衔接的硬件接口 Timerx_Init(99,7199);  //10kHz的技能频率,计数到100为10mswhile(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;tDR=*ptr++;while((USART1->SR&0X40)==0);//等候发送完毕}USART1->DR=\n;}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/moni/277361.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部