初级会员
- 积分
- 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分别调试两个传感器,均能正常工作。柔和起来就运行不起来了。
求不吝赐教!!!!!
|
|