| 
 
初级会员 
 
	积分136金钱136 注册时间2017-6-12在线时间36 小时 | 
 
 
 楼主|
发表于 2017-11-23 09:36:09
|
显示全部楼层 
| void USART2_IRQHandler(void)    //串口2接收中断入口函数
 {
 static int ucRxCnt = 0;
 OSIntEnter();
 USART_ClearFlag(USART2,USART_FLAG_TC);
 if(USART_GetITStatus(USART2,USART_IT_RXNE)!=Bit_RESET)
 {
 USART_ClearFlag(USART2,USART_IT_RXNE);
 ucRxBuffer[ucRxCnt++] = USART_ReceiveData(USART2);
 if(ucRxCnt== 32)
 {
 OSQPost(PM25_MsgQueue, (void*)ucRxBuffer);
 ucRxCnt = 0;
 delay_ms(100);
 }
 }
 OSIntExit();
 }
 
 
 void USART3_IRQHandler(void)         //串口3中断入口函数
 {
 u8 Res=0;
 OSIntEnter();
 Res =USART_ReceiveData(USART3);
 Uart3_Buf[First_Int] = Res;                            //将接收到的字符串存到缓存中
 First_Int++;                                        //缓存指针向后移动
 if(First_Int > Buf3_Max)                               //如果缓存满,将缓存指针指向缓存的首地址
 {
 First_Int = 0;
 }
 OSIntExit();
 }
 
 void TIM2_IRQHandler(void) //定时器2中断入口函数
 {
 static u8 flag =1;
 OSIntEnter();
 if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)  //检查TIM2更新中断是否发生
 {
 
 TIM_ClearITPendingBit(TIM2, TIM_IT_Update  );  //清除TIMx中断标志位
 
 if(Timer0_start)
 Times++;
 if(Times > shijian)
 {
 Timer0_start = 0;
 Times = 0;
 }
 
 if(flag)
 {
 flag=0;
 }
 else
 {
 flag=1;
 }
 }
 OSIntExit();
 }
 
 void Second_AT_Command(char *b,char *a,u8 wait_time)
 {
 u8 i;
 char *c;
 c = b;                                                                                //保存字符串地址到c
 CLR_Buf3();
 i = 0;
 while(i == 0)
 {
 if(!Find(a))
 {
 if(Timer0_start == 0)
 {
 b = c;                                                        //将字符串地址给b
 for (; *b!='\0';b++)
 {
 while(USART_GetFlagStatus(USART3, USART_FLAG_TC)==RESET);
 USART_SendData(USART3,*b);
 }
 USART3_SendLR();
 Times = 0;
 shijian = wait_time;
 Timer0_start = 1;
 }
 }
 else
 {
 i = 1;
 Timer0_start = 0;
 }
 }
 CLR_Buf3();
 }
 原子哥,串口2,3的中断入口函数如上所示。串口2驱动粉尘传感器,串口3驱动GPRS模块,定时器2中断记时,用于判断串口3发送指令是否超时。移植uc/os-II分别调试两个传感器,均能正常工作。柔和起来就运行不起来了。
 求不吝赐教!!!!!
 
 
 
 
 
 | 
 |