91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

資源簡(jiǎn)介

基于C語(yǔ)言的通用AT指令代碼,含有詳細(xì)的代碼、解釋及例子,可直接用于各模塊的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);

//下面是系統(tǒng)時(shí)鐘節(jié)拍,目前是1000Hz
//?(CPU_INT32U)OSCfg_TickRate_Hz;
//ms數(shù)轉(zhuǎn)化為系統(tǒng)節(jié)拍數(shù)
#define?MS2OSTICK(ms) ((OSCfg_TickRate_Hz/1000)*(ms))

/*****************************************************************
*?功能:注冊(cè)AT指令運(yùn)行環(huán)境
******************************************************************/
void?AT_RegisterHandler(SendMsgFunc_t?func?char*?recv_buf?OS_SEM*?recv_sem?OS_MUTEX*?buf_mutex)
{
SendMsgCallback=func;?????????????//串口發(fā)送數(shù)據(jù)的函數(shù)
pRecvAckSem?=?(OS_SEM*)recv_sem;??//串口收到AT指令回令的信號(hào)量,可在串口接收空閑后發(fā)出
??//對(duì)于裸奔的單片機(jī)系統(tǒng),可改為串口接收空閑后將某個(gè)標(biāo)志位置1

pAckBufMux=(OS_MUTEX*)buf_mutex;??//串口接收緩沖區(qū)互斥信號(hào)量
atAckBuf?=?(char*)recv_buf; ??//串口接收緩沖區(qū)
return;
}

/*****************************************************************
*?功能:發(fā)送AT指令
*?輸入:?send_buf:發(fā)送的字符串
recv_str:期待回令中包含的子字符串
????????p_at_config:AT配置
*?輸出:執(zhí)行結(jié)果代碼
******************************************************************/
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;

}
/*****************************************************************
*?功能:發(fā)送數(shù)組數(shù)據(jù)
*?輸入:?send_buf:發(fā)送的數(shù)組
buf_len:數(shù)組長(zhǎng)度
recv_str:期待回令中包含的子字符串
????????p_at_config:AT配置
*?輸出:執(zhí)行結(jié)果代碼
******************************************************************/
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

?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件????????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指令代碼\

評(píng)論

共有 條評(píng)論

相關(guān)資源