【雅特力AT-START-F435】USART实现AT指令方式
首先看效果:
- 使用usart1,开启串口接收中断。
- 每次接收中断一个字符,保存到接收缓冲区 uint8_t usart1_rec_data_buff[128];
- 结束标志为字符 '\n'
实现步骤:
一、判断中断类型
在中断服务函数中,判断是否为接收中断标志:
如果usart1的状态寄存器(sts)的rdbf(receive data buffer full,接收数据寄存器满),则跳转到回调函数 USART1_CallBack() 完成判断操作。
二、读接收寄存器
*(usart1_rec_data_buff+buff_index) = USART1->dt;
读取接收寄存器后,自动清除接收中断标志位。
二、判断是否为有效AT指令
第一层 if( *(usart1_rec_data_buff+buff_index) == '\n' ) 判断是否接收完成 (‘\n’结尾)。如果接收指令完成,进入第二次判断
第二层 指令 if( strstr( (const char*)usart1_rec_data_buff, "AT+SD" ) != NULL ) 判断AT指令的类型,在循环体里进行相应操作
/* 输入的命令为AT+SD */
if( strstr( (const char*)usart1_rec_data_buff, "AT+SD" ) != NULL )
{
...
}
/* 输入的命令为AT+SPD */
else if( strstr( (const char*)usart1_rec_data_buff, "AT+SPD" ) != NULL )
{
...
}
/* 错误输入 */
else
{
...
}
三、跳过AT指令,读取AT后的数据
如果需要增加其他AT指令,在回调函数的第二层循环中,添加
else if( strstr( (const char*)usart1_rec_data_buff, "AT+xxx" ) != NULL )
"AT+xxx" 就是指令的开头形式 ,AT后的数据参数在 if 判断里筛选就好