STM32F103—有关SIM900A模块的使用

适用于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__ */

物联沃分享整理
物联沃-IOTWORD物联网 » STM32F103—有关SIM900A模块的使用

发表评论