适用于SIM900A的指令:
AT+CPIN? 该指令用于查询 SIM 卡的状态,主要是 PIN 码,如果该指令返回+CPIN:READY,则表明 SIM 卡状态正常,返回其他值,则有可能是没有 SIM 卡。
AT+CSQ 该指令用于查询信号质量,返回 SIM900A 模块的接收信号强度,如返回+CSQ:30,0,表示信号强度是 30 (最大有效值是 31)。
AT+COPS? 该指令用于查询当前运营商,该指令只有在连上网络后,才返回运营商, 否则返回空,如返回: +COPS:0,0,“CHINAMOBILE”,表示当前选择的运营商是中国移动。
AT+CNUM, 查询模块号码。
拨打电话:ATD+号码+;(分号必须加!!!)
ATA,用于应答电话,当收到来电的时候,给模块发送: ATA,即可接听来电。 ATH,用于挂断电话,要想结束正在进行的通话,只需 给模块发送: ATH,即可挂断。
接听电话:AT+CLIP=1,开启来电显示功能。
短信的读取与发送:AT+CMGF=1,即可设置为文本模式。AT+CSCS,用于设置 TE 字符集,默认的为 GSM7 位缺省字符集
AT+CPMS?可以查询当前 SIM 卡最大支持多少条短信存储,以及当前存储了多少条短信。
首先,发送: AT+CMGF=1,设置为文本模式。
然后,发送: AT+CSMP=17,167,2,25,设 置文本模式参数。
最后发送: AT+CSCS=“UCS2”,设置为 UCS2 编码字符集。
此时,我们便可 以发送 AT+CMGS 指令来发送中英文短信了,不过由于使用了 UCS2 字符集,所有字符/数字/ 汉字,都必须使用 UNICODE 编码。
汉字 UNICODE 互换工具.exe
发送指令: AT+CMGS="UNICODE转换后的手机号"
模块返回: >
需要发送的内容:UNICODE 编码
在发送完内容以后,最后以十六进制(HEX)格式单独发送(不用添加回车): 1A(即0X1A)
sim900a.c
#include "sim900a.h"
#include "usart.h"
extern uint8_t Uart1_Rx_Cnt;
extern char RxBuffer2[256];
uint8_t ByteSend=0x1A;//短信发送
//发送指令
void Sim900A_SendAtCmd(char* pCmd)
{
char c;
while(*pCmd!='\0')
{
c = *pCmd;
HAL_UART_Transmit(&huart1, (uint8_t *)&c, 1,0xFFFF);
pCmd++;
}
}
//常规指令
void Sim900A_SendAT(void)
{
Sim900A_SendAtCmd("AT+CPIN?\r\n");//查询 SIM 卡的状态
HAL_Delay(1000);
Sim900A_SendAtCmd("AT+CSQ\r\n");//查询信号质量
HAL_Delay(1000);
Sim900A_SendAtCmd("AT+COPS?\r\n");//查询当前运营商
HAL_Delay(1000);
}
//拨打电话
void Sim900A_SendMsg1(void)
{
Sim900A_SendAtCmd("ATD+\"*********\";\r\n");//电话号码的unicode码
HAL_Delay(1000);
}
//发送短信
void Sim900A_SendMsg2(char* pSam)
{
Sim900A_SendAtCmd("AT+CMGF=1\r\n");//设置为文本模式
HAL_Delay(1000);
Sim900A_SendAtCmd("AT+CSMP=17,167,2,25\r\n");//设置文本模式参数
HAL_Delay(1000);
Sim900A_SendAtCmd("AT+CSCS=\"UCS2\"\r\n");//设置为 UCS2 编码字符集
HAL_Delay(1000);
Sim900A_SendAtCmd("AT+CMGS=\"*********\"\r\n");//电话号码的unicode码
HAL_Delay(1000);
Sim900A_SendAtCmd(pSam);//发送短信内容unicode码
HAL_Delay(1000);
HAL_UART_Transmit(&huart1, &ByteSend, 1,0xFFFF);
}
sim900a.h
/* USER CODE END Header */
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __SIM900A_H__
#define __SIM900A_H__
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "main.h"
/* USER CODE BEGIN Includes */
/* USER CODE END Includes */
/* USER CODE BEGIN Private defines */
/* USER CODE END Private defines */
//u8 sim900a_send_cmd(u8 *cmd, u8 *ack, u16 waittime);
//u8* sim900a_check_cmd(u8 *str);
//u8 sim900a_check_status();
//u8 sim900a_sms_test(u8* msisdn);
/* USER CODE BEGIN Prototypes */
void Sim900A_SendAtCmd(char* pCmd);//发送指令
void Sim900A_SendAT(void);
void Sim900A_SendMsg1(void);
void Sim900A_SendMsg2(char* pSam);
/* USER CODE END Prototypes */
#ifdef __cplusplus
}
#endif
#endif /*__ SIM900A_H__ */