使用AT命令进行短信收发、电话本查询

使用AT命令进行短信收发、电话本查询

概述:在JB00+BT项目的SMS Demo中使用了蓝牙的DUN服务来对手机发送AT命令,主要用AT命令实现2个方面的功能:发送短信、查询手机电话本。DUN连接成功后,就可以直接对 手机发送AT命令了。使用AT命令之前,一般通过发送"AT"进行AT命令初始化,如果成功返回OK,即说明手机已可正常响应AT命令。

调试AT命令有一个比较简便的方法就是使用PC的超级终端进行调试:如果手机有串口接口,直接连接到PC的串口;如果手机无串口接口,可以使用USB蓝牙适配器和手机进行蓝牙配对,然后通过在超级终端使用DUN服务的蓝牙虚拟串口发送AT命令控制手机。

一、什么是AT 命令
AT 即Attention,AT指令集是从终端设备(Terminal Equipment,TE)或数据终端设备(Data Terminal Equipment,DTE)向终端适配器(Terminal Adapter, TA)或数据电路终端设备(Data Circuit Terminal Equipment,DCE)发送的。通过TA,TE发送AT指令来控制移动台(Mobile Station,MS)的功能,与GSM 网络业务进行交互。用户可以通过AT指令进行呼叫、短信、电话本、数据业务、传真等方面的控制。 

90年代初,AT指令仅被用于Modem操作。没有控制移动电话文本消息的先例,只开发了一种叫SMS BlockMode的协议,通过终端设备(TE)或电脑来完全控制SMS。几年后,主要的移动电话生产厂商诺基亚、爱立信、摩托罗拉和HP共同为GSM 研制了一整套AT指令,其中就包括对SMS的控制。AT指令在此基础上演化并被加入GSM 07.05标准以及现在的GSM07.07标准,完全标准化和比较健全的标准。如:对SMS的控制共有3种实现途径:最初的Block Mode;基于AT指令的Text Mode;基于AT指令的PDU Mode。到现在PDU Mode已经取代BlockMode,后者逐渐淡出。GSM 模块与计算机之间的通信协议是一些AT指令集,AT指令是以AT作首,字符结束的字符串,AT指令的响应数据包在中。每个指令执行成功与否都有相应的返 回。其他的一些非预期的信息(如有人拨号进来、线路无信号等),模块将有对应的一些信息提示,接收端可做相应的处理。


示例:CDMA modem DTE
AT< CR>
< LF> OK < LF>
ATTEST< CR>
< CR> ERROR < LF>
如果AT指令执行成功,"OK"字符串返回;
如果AT 指令语法错误或AT 指令执行失败,
"ERROR"字符串返回。

二、如何使用AT命令发短信、查询电话本(红色部分改为实际内容)

1、发送短信步骤:

step1、测试手机是否支持相关AT指令:AT+CMGS=?

如果返回"OK"表明手机支持短信收发的AT命令,否则返回"ERROR"。

step2、选择短信模式为文本模式:AT+CMGF=1

如果返回"OK",设置成功。

除了文本模式,还可以设置为PDU编码模式,其指令为:AT+CMGF=0

step3、发送短信目标号码:AT+CMGS=phone number

如果返回"> ",号码发送成功,继续发送短信文本内容。

step4、直接将短信文本内容发送到手机,并以Ctrl+Z或者对应的ASCII码0x1a作为结束符。

step5、如果短消息发送成功,则返回"OK",并显示信息号:+CMGS: [,]
如果短消息发送失败,则返回"+CMS ERROR: "。

2、查找电话本步骤:

step1、测试手机是否支持相关AT指令:AT+CPBS=?

如果返回"OK"表明手机支持电话本查询相关的AT命令,否则返回"ERROR"。

step2、选择查询电话本,设置为手机存储体:AT+CPBS="ME"

如果返回"OK",设置成功。

step3、根据联系人姓名查找电话号码:AT+CPBF=name

如果查询成功,则返回相应的描述字段"+CPBF:......."。

这里也可以根据联系人ID进行查找:AT+CPBR=ID

如果查询成功,则返回"+CPBR:......."。

三、常用的短信、电话本命令

1、短消息命令

AT+CSMS
选择消息服务。支持的服务有GSM-MO、SMS-MT、SMS-CB。
AT+CNMA
新信息确认应答。
AT+CPMS
优先信息存储。这个命令定义用来读写信息的存储区域。
AT+CMGF
优先信息格式。执行格式有TEXT方式和PDU方式。
AT+CSAS
保存设置。保存+CSAS和+CSMP的参数。
AT+CRES
恢复设置。
AT+CSDH
显示文本方式的参数。
AT+CNMI
新信息指示。这个命令选择如何从网络上接收短信息。
AT+CMGR
读短信。信息从+CPMS命令设定的存储器读取。
AT+CMGL
列出存储的信息。
AT+CMGS
发送信息。
AT+CMGW
写短信息并存储。
AT+CMSS
从存储器中发送信息。
AT+CSMP
设置文本模式的参数。
AT+CMGD
删除短信息。删除一个或多个短信息。
AT+CSCA
短信服务中心地址。
AT+CSCB
选择单元广播信息类型。
AT+WCBM
单元广播信息标识。
AT+WMSC
信息状态(是否读过、是否发送等等)修正。
AT+WMGO
信息覆盖写入。
AT+WUSS
不改变SMS状态。在执行+CMGR或+CMGL后仍保持UNREAD。

2、电话本命令 

AT+CPBS
选择电话簿记忆存储。
AT+CPBR
读取电话簿表目。
AT+CPBF
查找电话簿表目。
AT+CPBW
写电话簿表目。
AT+CPBP
电话簿电话查询。
AT+CPBN
电话簿移动动作。这个特殊命令使电话簿中的条目前移或后移(按字母顺序)
AT+CNUM
签署者号码。
AT+WAIP
防止在下一次重起时初始化所有的电话簿。
AT+WDCP
删除呼叫电话号码。
AT+CSVM
设置语音邮件号码。

http://hi.baidu.com/walfer/blog/item/983602b380310da7d9335a18.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
STM32微控制器使用查询方式收发AT命令是一种常见的通方式。查询方式是指在向模块发送AT命令后,通过不断查询模块的回复来获取结果,直到获得期望的回复或超时为止。 首先,需要在STM32上配置串口通模块,使其能够与AT命令模块进行。通过配置串口的波特率、数据位、停止位、奇偶校验等参数,确保与AT命令模块的通正常。 接下来,在STM32的代码中,通过串口发送AT命令给模块。可以使用串口发送函数,将AT命令发送给AT命令模块。示例代码如下: ```c #include "stm32f4xx_hal.h" extern UART_HandleTypeDef huart2; void sendATCommand(char* command) { HAL_UART_Transmit(&huart2, (uint8_t *)command, strlen(command), HAL_MAX_DELAY); } ``` 然后,设置一个超时时间,在规定的时间内等待模块的回复。使用定时器或延时函数进行延时,然后通过串口接收函数接收模块的回复。示例代码如下: ```c #include "stm32f4xx_hal.h" extern UART_HandleTypeDef huart2; void receiveResponse(char* response, uint32_t timeout) { uint32_t startTime = HAL_GetTick(); uint32_t index = 0; while (1) { if (HAL_UART_Receive(&huart2, (uint8_t *)&response[index], 1, 1) == HAL_OK) { if (response[index] == '\n') // 以换行符作为AT命令回复的结束符 { response[index+1] = '\0'; break; } index++; } if (HAL_GetTick() - startTime >= timeout) { response[0] = '\0'; // 超时,设置回复为空 break; } } } ``` 最后,在主函数中调用发送AT命令和接收回复的函数,通过查询模块的回复来完成AT命令收发。例如,发送AT+CGSN命令获取设备的IMEI号码,代码如下: ```c #include "stm32f4xx_hal.h" extern UART_HandleTypeDef huart2; int main(void) { HAL_Init(); __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_USART2_CLK_ENABLE(); GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF7_USART2; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); huart2.Instance = USART2; huart2.Init.BaudRate = 115200; huart2.Init.WordLength = UART_WORDLENGTH_8B; huart2.Init.StopBits = UART_STOPBITS_1; huart2.Init.Parity = UART_PARITY_NONE; huart2.Init.Mode = UART_MODE_TX_RX; huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart2.Init.OverSampling = UART_OVERSAMPLING_16; HAL_UART_Init(&huart2); char imei[16]; // 发送AT命令 sendATCommand("AT+CGSN\r\n"); // 接收回复 receiveResponse(imei, 1000); // 超时时间为1s while (1) { // 处理IMEI号 } } ``` 综上所述,以上是使用查询方式在STM32上收发AT命令的简单介绍和示例代码。通过配置串口、发送AT命令、设置超时时间和接收回复,我们可以实现在STM32上与AT命令模块进行

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值