資源簡介
基于C語言的通用AT指令代碼,含有詳細的代碼、解釋及例子,可直接用于各模塊的AT指令通信。

代碼片段和文件信息
/*
?*?iot.c
?*
?*??Created?on:?2018年11月1日
?*??????Author:?admin
?*/
?
?/*****************************************************************
*?代碼解釋可查看
?https://blog.csdn.net/hnxyxiaomeng/article/details/84613712
******************************************************************/
#include?“at.h“
#include?
#include?
#include?
#include?
char?*atAckBuf;
SendMsgFunc_t?SendMsgCallback=NULL;
OS_SEM?*pRecvAckSem=NULL;
OS_MUTEX?*pAckBufMux=NULL;
static?void?AT_ClearAckBuff(void);
static?char*?AT_SearchRecvBuf(const?char*?recv_struint16_t?max_resp_time);
//下面是系統時鐘節拍,目前是1000Hz
//?(CPU_INT32U)OSCfg_TickRate_Hz;
//ms數轉化為系統節拍數
#define?MS2OSTICK(ms) ((OSCfg_TickRate_Hz/1000)*(ms))
/*****************************************************************
*?功能:注冊AT指令運行環境
******************************************************************/
void?AT_RegisterHandler(SendMsgFunc_t?func?char*?recv_buf?OS_SEM*?recv_sem?OS_MUTEX*?buf_mutex)
{
SendMsgCallback=func;?????????????//串口發送數據的函數
pRecvAckSem?=?(OS_SEM*)recv_sem;??//串口收到AT指令回令的信號量,可在串口接收空閑后發出
??//對于裸奔的單片機系統,可改為串口接收空閑后將某個標志位置1
pAckBufMux=(OS_MUTEX*)buf_mutex;??//串口接收緩沖區互斥信號量
atAckBuf?=?(char*)recv_buf; ??//串口接收緩沖區
return;
}
/*****************************************************************
*?功能:發送AT指令
*?輸入:?send_buf:發送的字符串
recv_str:期待回令中包含的子字符串
????????p_at_config:AT配置
*?輸出:執行結果代碼
******************************************************************/
uint8_t?AT_SendCmd(const?char?*send_strconst?char?*recv_strstcATConfig?*p_at_config)
{
uint8_t?_ret?=?0;
uint8_t?_try_times?=?0;
uint8_t?_reset_times?=?0;
char?*?_p_msg?=?NULL;
OS_ERR?_timeout_err;
if(SendMsgCallback==NULL?|?pAckBufMux==NULL?|?atAckBuf==NULL)
{
return?_ret?=?2;
}
do
{
AT_ClearAckBuff();
SendMsgCallback(send_strstrlen(send_str));
_p_msg?=?AT_SearchRecvBuf(recv_strp_at_config->resp_time100ms);
if?(?_p_msg?!=?NULL?)
{
return?_ret?=?0;
}
else
{
_try_times?++;
if?(?_try_times?>=?p_at_config->max_try_times?)
{
_reset_times?++;
if?(?_reset_times?>=?p_at_config->max_reset_times?+?1?)
{
return?_ret?=?1;
}
else
{
//?TODO:硬件方式重啟模塊
}
}
else
{
OSTimeDlyHMSM(?0?0?0?p_at_config->try_delay1ms?OS_OPT_TIME_DLY?&_timeout_err?);
}
}
}while(1);
return?_ret;
}
/*****************************************************************
*?功能:發送數組數據
*?輸入:?send_buf:發送的數組
buf_len:數組長度
recv_str:期待回令中包含的子字符串
????????p_at_config:AT配置
*?輸出:執行結果代碼
******************************************************************/
uint8_t?AT_SendData(const?char?*send_bufconst?uint16_t?buf_lenconst?char?*recv_strstcATConfig?*p_at_config)
{
uint8_t?_ret?=?0;
uint8_t?_try_times?=?0;
uint8_t?_reset_times?=?0;
char?*?_p_msg?=?NULL;
OS_ERR?_timeout_err;
if(SendMsgCallback==NULL?|?pAckBufMux==NULL?|?atAckBu
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????5342??2018-11-29?10:02??基于C的AT指令代碼\at.c
?????文件????????1032??2018-11-29?10:01??基于C的AT指令代碼\at.h
?????目錄???????????0??2018-11-29?10:02??基于C的AT指令代碼\
- 上一篇:漢諾塔VC6.0可視化實現源碼
- 下一篇:C++ 編寫的殺毒軟件
評論
共有 條評論