GSM AT命令集详解

需积分: 9 0 下载量 148 浏览量 更新于2024-07-27 收藏 369KB PDF 举报
"AT命令集是用于调制解调器(移动电话)的一组指令,通常在GSM通信中使用。" AT命令,全称为“Attention Command”,是串行通信接口中的标准控制命令集,最初设计用于调制解调器,后来广泛应用于各种通信设备,特别是GSM(全球系统移动通信)模块。这些命令允许用户或软件与通信设备进行交互,进行配置、诊断和控制。 在GSM网络中,AT命令集(遵循GSM07.07规范)是通信模块和上位机之间通信的基础。它提供了一系列的控制命令,使得开发者能够设置和查询模块的参数,如网络注册、数据传输、短信服务等。 文档中提到的一些基本GSM AT命令包括: 1. AT+CGMI:请求制造商识别 - 这个命令返回通信模块的制造商信息。 2. AT+CGMM:请求模型识别 - 执行此命令会得到模块的具体型号信息。 3. AT+CGMR:请求修订识别 - 用于获取模块的软件版本或修订号。 4. AT+CGSN:请求产品序列号识别 - 显示模块的唯一序列号,有助于追踪和验证设备。 5. AT+CSCS:选择TE(终端设备)字符集 - 允许用户设置数据传输时使用的字符编码集。 AT命令通常以“AT”开头,后面跟着一个或多个参数,以分号或回车/换行符结束。结果代码以“OK”、“ERROR”或其他特定的响应形式返回,表明命令执行的成功与否。 除了上述基本命令,GSM07.07规范还定义了更多的AT命令,如网络注册(AT+COPS)、拨打电话(ATD)、挂断电话(ATH)、设置和查询SIM卡信息(AT+CPIN)、发送和接收短信(AT+CMGF, AT+CMGS)等。 在实际应用中,开发者需要根据具体需求和模块的规格说明书来编写和发送适当的AT命令,以实现所需的通信功能。此外,由于AT命令集的通用性,它们也常用于物联网(IoT)设备,如GPS跟踪器、无线传感器节点等,以实现远程管理和控制。

#include "main.h"#include "stdio.h"#include "string.h"UART_HandleTypeDef huart1;GPIO_InitTypeDef GPIO_InitStruct;void LED_Control(uint8_t state) { HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, state);}void USART1_Init(void) { huart1.Instance = USART1; huart1.Init.BaudRate = 115200; huart1.Init.WordLength = UART_WORDLENGTH_8B; huart1.Init.StopBits = UART_STOPBITS_1; huart1.Init.Parity = UART_PARITY_NONE; huart1.Init.Mode = UART_MODE_TX_RX; huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart1.Init.OverSampling = UART_OVERSAMPLING_16; if (HAL_UART_Init(&huart1) != HAL_OK) { Error_Handler(); }}void MX_GPIO_Init(void) { GPIO_InitStruct.Pin = LED_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct);}void AT_SendCommand(char *cmd, char *response) { uint8_t buffer_rx[100]; uint8_t buffer_tx[100]; memset(buffer_rx, 0, sizeof(buffer_rx)); memset(buffer_tx, 0, sizeof(buffer_tx)); sprintf((char *)buffer_tx, "%s\r\n", cmd); HAL_UART_Transmit(&huart1, buffer_tx, strlen((char *)buffer_tx), 1000); HAL_UART_Receive(&huart1, buffer_rx, sizeof(buffer_rx), 5000); if (strstr((char *)buffer_rx, response) == NULL) { printf("AT Command Failed: %s", response); }}int main(void) { HAL_Init(); USART1_Init(); MX_GPIO_Init(); char buffer_rx[100]; memset(buffer_rx, 0, sizeof(buffer_rx)); AT_SendCommand("AT", "OK"); AT_SendCommand("AT+CWMODE=1", "OK"); AT_SendCommand("AT+CWJAP=\"ssid\",\"password\"", "OK"); while (1) { AT_SendCommand("AT+CIPSTART=\"TCP\",\"server_ip\",80", "OK"); AT_SendCommand("AT+CIPSEND=4", ">"); AT_SendCommand("test", "SEND OK"); HAL_Delay(1000); }}

2023-06-03 上传
2023-07-13 上传