SMS CMD CMGS

本文探讨ATCMDCMGS在短信中的使用,涉及TextMode限制及PDUMode,强调ASCII支持并解释3GPP标准中的AT命令PDU解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AT命令格式

AT CMD CMGS常用于短息的发送,主要涉及到两种模式:Text Mode和PDU Mode
在Text Mode下发送短信对于AT CMD的输入较为简单,缺点是无法输入中文字符,理论上只支持ASCII码表内的英文字母数字和部分符号。
3GPP Spec内对于该AT CMD的描述如下:

CommandPossible repsones(s)
if text mode(+CMGF=1):+CMGS=[,]text is entered<ctrl-Z/ESC>

AT命令PDU解析

### STM32 使用 GPRS 模块发送和接收短信 为了实现STM32通过GPRS模块发送或接收短消息服务(SMS),通常会采用SIM800C/SIM900这类支持GSM/GPRS协议栈的通信模组。这些模组能够处理SMS编码解码工作,而MCU仅需按照AT指令集来控制其操作。 #### 初始化配置 在开始任何数据传输之前,确保已经完成了基本初始化设置,包括但不限于波特率设定、网络注册状态查询以及确认设备处于在线模式[^1]: ```c // 设置串口参数并打开相应中断 void UART_Init(void){ // 配置代码... } // 向GPRS模块发送命令函数定义 int Send_AT_Cmd(char *cmd, char *expected_response, uint32_t timeout_ms); ``` #### 发送短信流程 当准备向指定号码发送一条新消息时,可以遵循如下过程构建相应的请求字符串,并调用上述辅助方法完成实际交互动作[^2]: ```c void send_sms(const char* phone_number, const char* message_text) { char cmd_buffer[64]; // 构建完整的 AT 命令序列 snprintf(cmd_buffer,sizeof(cmd_buffer),"AT+CMGS=\"%s\"\r\n",phone_number); // 执行 CMGS (Send Message Command) if (!Send_AT_Cmd((char*)cmd_buffer,"#",500)) return; // 输入具体文本内容加上终止符 Ctrl-Z (\x1A) Send_AT_Cmd(message_text,"\x1a",2000); } ``` #### 接收短信机制 对于入站的消息监听,则主要依赖于`+CMTI:`事件触发后的回调解析逻辑。每当有新的未读信息到达时,硬件端会产生对应的提示通知给上位机程序;随后可通过执行特定查询语句获取存储位置索引号进而提取完整报文体[^3]. ```c void check_incoming_messages() { static bool new_msg_flag = false; char response[128]; // 查询是否有新收到的信息存放在内存中 if(!new_msg_flag && Send_AT_Cmd("AT+CMGL=\"REC UNREAD\"",response,1000)){ parse_received_message(response); new_msg_flag=true; // 更新标志防止重复处理同一批次的数据项 } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值