初级会员

- 积分
- 57
- 金钱
- 57
- 注册时间
- 2019-8-4
- 在线时间
- 10 小时
|
10金钱
1.计划使用方法
探索板任务1发送AT给4G模块,串口中断接收后传到一个全局变量里边,然后任务1判断返回值是否正常,若正常则执行下一条AT
2.现在存在问题
任务1发送AT后,模块返回了OK,终端里边也有收到这个OK。但之后之后就不会继续往下执行其他AT了
3.不知道是任务和终端之间没有切换还是终端处理的问题,请帮忙看下是什么原因?
4.代码如下:
1)中断处理函数
void USART2_IRQHandler(void)
{
u8 res;
u8 *Rres;
#if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
OSIntEnter();
#endif
if(USART_GetITStatus(USART2,USART_IT_RXNE))
{
res=USART_ReceiveData(USART2);
USART_ClearITPendingBit(USART2,USART_IT_RXNE);
if (res==0x0D){
UART_Recv.gFlagForDisp=1;
UART_Recv.RevBuff[UART_Recv.i++]=res;
return;
}
if (res==0x0A)
{
if (UART_Recv.gFlagForDisp==1)
{
UART_Recv.RevBuff[UART_Recv.i++]=res;
memcpy(Analysis_Recv.AnaBuff, UART_Recv.RevBuff, UART_Recv.i+1);
Neoway_UART_PRINT(USART1,Analysis_Recv.AnaBuff,UART_Recv.i);
UART_Recv.i=0;
UART_Recv.gFlagForDisp=0;
memset(UART_Recv.RevBuff, 0,RevBuff_Len_MAX); //将该数组初始化
}
}
else
{
if (UART_Recv.gFlagForDisp==1)
{
UART_Recv.RevBuff[UART_Recv.i++]=res;
memcpy(Analysis_Recv.AnaBuff, UART_Recv.RevBuff, UART_Recv.i+1);
Neoway_UART_PRINT(USART1,Analysis_Recv.AnaBuff,UART_Recv.i);
memset(UART_Recv.RevBuff, 0,RevBuff_Len_MAX); //将该数组初始化
UART_Recv.i=0;
UART_Recv.RevBuff[UART_Recv.i++]=res;
UART_Recv.gFlagForDisp=0;
return;
}
else
{
UART_Recv.RevBuff[UART_Recv.i++]=res;
return;
}
}
}
#if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
OSIntExit();
#endif
}
2)任务函数:
void usart1_task(void *pdata)
{
while(1)
{
test=Neoway_Send_ATConmmand(USART2,"AT\r",3,"OK",Analysis_Recv.AnaBuff,4,3000);
if(test==0)
Neoway_Send_ATConmmand(USART2,"AT+CSQ\r",7,"OK",Analysis_Recv.AnaBuff,4,3000);
else
{
Neoway_Send_ATConmmand(USART2,"AT+CCID\r",8,"OK",Analysis_Recv.AnaBuff,4,3000);
}
OSTimeDly(500);
}
}
3)串口数据处理函数
u8 Neoway_Send_ATConmmand(USART_TypeDef* USARTx,u8 *send_string,u16 str_len,u8 *dst_string,u8 *recv_string,u8 check_times,u16 timeout)
{
int times=0; // 查询次数变量;
do
{
times++;
Neoway_USART_Send(USARTx,send_string,str_len);
delay_ms(timeout); // 延时300ms;
if( strstr((char *)recv_string,(char *)dst_string)!=NULL )
{
break;
}
}while(times<check_times);
if( timeout>=check_times )
{
return -1;//指令执行成功
}
return 0;//指令执行失败
}
4)附上串口log
[19:16:54.437]收←◆AT
[19:16:57.436]收←◆AT
[19:17:00.436]收←◆AT
[19:17:03.436]收←◆AT+CCID
[19:17:06.435]收←◆AT+CCID
[19:17:09.438]收←◆AT+CCID
[19:17:12.435]收←◆AT+CCID
[19:17:17.935]收←◆AT
[19:17:20.935]收←◆AT
[19:17:20.957]收←◆
OK
|
|