当前位置: 首页 > news >正文

基于STM32的Air780短信发送

若该文为原创文章,转载请注明原文出处。

以前使用SIM900A模块和Air724模块发送短信,随着2G停了,SIM900A不在使用,Air724价格浮动变化,一直在寻找Cat1替换模块,所需要的功能不多,只要能上网,能发短信,能打电话,最好有TTS功能。

一、对比

Air780不支持电话,但也够用了,电话功能可以EC600M等模块。

这里记录Air780发送短信功能

参考:

AT固件发短信测试实例

二、发送流程

注意:4G模块在上电、重启的时候,主动发出开机日志,这些日志一般需要过滤。然后再去执行AT命令。

按流程操作。

三、STM32代码移植

测试的是发送中文短信

1、初始化串口

STM32和4G通过使用的是串口通讯

这是使用PA2 PA3穿孔2

void GSM_USART_Init(uint32_t bound)
{  NVIC_InitTypeDef NVIC_InitStructure;GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;GSM_USART_GPIO_APBxClkCmd(GSM_USART_GPIO_CLK, ENABLE);GSM_USART_APBxClkCmd(GSM_USART_CLK,ENABLE);USART_DeInit(GSM_USARTx); //USART_TXGPIO_InitStructure.GPIO_Pin = GSM_USART_TX_GPIO_PIN;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(GSM_USART_TX_GPIO_PORT, &GPIO_InitStructure);//USART_RXGPIO_InitStructure.GPIO_Pin = GSM_USART_RX_GPIO_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GSM_USART_RX_GPIO_PORT, &GPIO_InitStructure);USART_InitStructure.USART_BaudRate = bound;USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_InitStructure.USART_StopBits = USART_StopBits_1;USART_InitStructure.USART_Parity = USART_Parity_No;USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;	USART_Init(GSM_USARTx, &USART_InitStructure);USART_Cmd(GSM_USARTx, ENABLE);USART_ITConfig(GSM_USARTx, USART_IT_RXNE, ENABLE);NVIC_InitStructure.NVIC_IRQChannel = GSM_USART_IRQ;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);	//GSM_USART_RX_STA=0;
}

调用方式

GSM_USART_Init(38400);

模块会自动适配波特率,正常使用115200

2、初始化

delay_ms(3000);
delay_ms(2000);
while(GSM_send_cmd("AT\r\n","OK",100));		
delay_ms(100);// 检测有没有卡		
while(GSM_send_cmd("AT+CPIN?\r\n","OK",100));		
delay_ms(100);

初始化功能比较简单,没做过多处理,判断有没有卡。

3、发送短信

void sim900a_send_Chinese_message(char *message,char len,char *phonenumber)
{ u8  cnt = 3;u8 p[128] = {0};while(GSM_send_cmd("AT+CPIN?\r\n","OK",100));		delay_ms(100);while(GSM_send_cmd("AT&F\r\n","OK",100));	delay_ms(100);while(GSM_send_cmd("AT+CSMS=1\r\n","OK",100));	delay_ms(100);while(GSM_send_cmd("AT+CMGF=1\r\n","OK",100));	delay_ms(100);while(GSM_send_cmd("AT+CSMP=17,167,0,8\r\n","OK",100));	delay_ms(100);memset(p, 0, 128);sprintf((char*)p,"AT+CMGS=\"%s\"\r\n",phonenumber); // 设置目标手机号while(GSM_send_cmd(p,">",100));  delay_ms(200);//sprintf((char*)p,"%s\r\n",message); // 设置发送内容//GSM_send_cmd(message,">",100);  usart2_send(&message[0], len);delay_ms(200);USART_SendData(USART2, 0x1a); // 确认发送delay_ms(200);
} 

调用

sim900a_send_Chinese_message(Chinese_message1, sizeof(Chinese_message1), Unicode_phonenumber);

其中:

char Chinese_message1[20] = {0x80,0x01,0x4E,0xBA,0x8D,0xCC,0x50,0x12,0xFF,0x0C,0x8B,0xF7,0x6C,0x42,0x5E,0x2E,0x5F,0xD9,0x00,0x20}; 为Unicode编码

char Unicode_phonenumber[]={"1875XXXXXXX"};为电话号码,电话号码不用转Unicode编码。

中文发送短信发送使用UCS2,接收中文短信是GB2312编码。

如有侵权,或需要完整代码,请及时联系博主。

http://www.dtcms.com/a/331271.html

相关文章:

  • 【每天一个知识点】生物的数字孪生
  • C++模板特化、分离编译
  • 力扣-295.数据流的中位数
  • InfiniBand 与 RoCE 协议介绍
  • 激光雷达与可见光相机的图像融合
  • C++ vector越界问题完全解决方案:从基础防护到现代C++新特性
  • 【代码随想录day 20】 力扣 538.把二叉搜索树转换为累加树
  • 医疗洁净间的“隐形助手”:富唯智能复合机器人如何重塑手术器械供应链
  • 【大模型微调系列-01】 入门与环境准备
  • 机器翻译:回译与低资源优化详解
  • 高精度组合惯导系统供应商报价
  • Java基础07——基本运算符(本文为个人学习笔记,内容整理自哔哩哔哩UP主【遇见狂神说】的公开课程。 > 所有知识点归属原作者,仅作非商业用途分享)
  • 扩展用例-失败的嵌套
  • Kafka 的消费
  • 学习设计模式《二十二》——职责链模式
  • 微软发布五大AI Agent设计模式 推动企业自动化革新
  • hive加载csv中字段含有换行符的处理方法
  • Java设计模式之《原型模式》--深、浅copy
  • 17 ABP Framework 项目模板
  • Origin绘制正态分布直方图+累积概率图|科研论文图表教程(附数据格式模板)
  • JS的学习6
  • 目标检测-动手学计算机视觉12
  • Redis入门到实战教程,深度透析redis
  • Promise 对象作用及使用场景
  • 实验室的样本是否安全?如何确保实验数据的准确性和可靠性?
  • 京东【自主售后】物流信息获取_影刀RPA源码解读
  • 如何写出更清晰易读的布尔逻辑判断?
  • 企业智脑正在构建企业第二大脑,四大场景引擎驱动数字化转型新范式
  • 异步同步,阻塞非阻塞,reactor/proactor
  • android 升级AGP版本后部分so文件变大