完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
usart.c串口中断处理函数: void USART1_IRQHandler(void) { u8 res; if(USART1->SR&(1<<5))//接收到数据 { res=USART1->DR; if(USART1_Recv_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主函数 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!=' |