【STM32训练—SIM900A模块】第二篇、STM32驱动SIM900A发送中文和英文短信

news/2024/11/15 1:52:37/

目录

第一部分、前言

1、准备知识

2、调试目的

3、模块和单片机的接线方式

第二部分、工程代码

1、代码功能描述

2、SIM900A发送英文短信的代码

3、SIM900A发送中文短信的代码

4、main.c文件代码

第三部分、总结        

1、效果图片和视频

 2、感谢

3、完整的工程代码


第一部分、前言

1、准备知识

        前面第一篇【STM32训练—项目1】第一篇、电脑的串口助手驱动SIM900A发送中文和英文短信_大屁桃的博客-CSDN博客相关知识我已经做了准备,并且做了详细的介绍,如果你没看,你可以点击这个链接去了解如何让先利用电脑上的串口助手调试一下SIM900A发送中文英文短信,这样有利于接下来你对我STM32代码的理解哈,我这里就不再BB。

        这一篇我要详细作介绍的就是通过代码如何用STM32实现SIM900A发送中文和英文短信的发送,关于串口的相关知识和配置属于STM32的基本知识,所以我会带上【STM32基础的小标题,内容链接:【STM32基础】第二篇、STM32串口的使用_大屁桃的博客-CSDN博客

        这也迎合了我写STM32这个专栏的顺序,如果觉得我文章写的很乱的建议去看我这篇专栏的开篇之作:个人感悟,你就会明白我的用心良苦,方便他人,也方便自己。【STM32学习】个人感悟_大屁桃的博客-CSDN博客 

2、调试目的

        我调试这个模块,为了实现因为这个模块是我项目1中的一部分功能,到时候我会将我发的所有模块整合成一个整体的小项目,这个我也在这篇专栏的开篇之作:个人感悟中提到,有兴趣的可以去看。

3、模块和单片机的接线方式

        1、单片机的电源接入相应的电源

 单片机 PB10

对应于

SIM900A的管脚5VR
单片机 PB11

对应于

SIM900A的管脚5VT
单片机 GND

对应于

模块 GND
单片机 5V

对应于

模块 VCC_MCU


        2、模块单独供电

模块的 VCC(或 VCC5V)

对应于

外接DC5V
模块的 GND

对应于

外接电源GND

第二部分、工程代码

1、代码功能描述(认真读)

        单片机下载程序后现象如下首先,LED0亮两秒后发送英文短信,发送成功后关闭,随后,LED1亮两秒后发送中文短信,发送成功后关闭

    最后,都发送成功后LED0和LED1闪烁。同时串口会一直打印消息发送的响应结果。

2、SIM900A发送英文短信的代码

        代码为什么这么写,你要把前一篇【STM32训练—项目1】第一篇、电脑的串口助手驱动SIM900A发送中文和英文短信_大屁桃的博客-CSDN博客看懂才能明白我为什么要这样利用串口发指令,我看了正点原子的SIM900A的例程代码,简直是麻烦他妈给麻烦开门,麻烦到家了

/**************************************************************************/
//函数作用:发送英文短信函数
//函数名称:sim900a_send_English_message(char *message,char *phonenumber)(uint8_t number);
//内部参数:message phonenumber
//修改日期:2022年1月26日  凌晨2:40、
//作者:       (CSDN搜)大屁桃
/**************************************************************************/
void sim900a_send_English_message(char *message,char *phonenumber)
{Usart_SendString2(USART3,"AT\r\n");                            //SIM900A是否与单片机来连接成功delay_ms(200);	while(Find_char((char*)Usart3_buff,"OK"));                      printf("English_message_OK1\r\n");Usart_SendString2(USART3,"AT&F\r\n");                           //SIM900A复位delay_ms(200);	while(Find_char((char*)Usart3_buff,"OK"));                     //字符串匹对函数   printf("English_message_OK2\r\n");	Usart_SendString2(USART3,"AT+CSCS=\"GSM\"\r\n");               //英文短信指令1delay_ms(200);	while(Find_char((char*)Usart3_buff,"OK"));                     printf("English_message_OK3\r\n");Usart_SendString2(USART3,"AT+CMGF=1\r\n");                     //英文短信指令2delay_ms(200);	while(Find_char((char*)Usart3_buff,"OK"));  printf("English_message_OK4\r\n");sprintf(dispbuf,"AT+CMGS=\"%s\"\r\n",phonenumber);Usart_SendString2(USART3,dispbuf);                             //英文短信指令3delay_ms(200);while(Find_char((char*)Usart3_buff,"OK")); printf("English_message_OK5\r\n");Usart_SendString2(USART3,message);                              //英文短信指令4delay_ms(200);while(Find_char((char*)Usart3_buff,"OK"));  printf("English_message_OK6\r\n");Usart_SendHalfWord(USART3,0x1a);                                //结束指令delay_ms(2000);  //延时两秒while(Find_char((char*)Usart3_buff,"OK"));  printf("English_message_OK7\r\n");
} 

3、SIM900A发送中文短信的代码

        发送中文和发送英文的区别就是电话号码和内容都要用Unicode编码实现,这个需要用到转换软件,前面一篇文章的末尾可以免费下载。其次比发英文的多了一行代码 Usart_SendString2(USART3,"AT+CSMP=17,167,0,8\r\n"); 

/**************************************************************************/
//函数作用:发送中文短信函数
//函数名称:sim900a_send_Chinese_message(char *message,char *phonenumber)(uint8_t number);
//内部参数:message phonenumber
//修改日期:2022年1月26日  凌晨2:40
//作者:       (CSDN搜)大屁桃
/**************************************************************************/
void sim900a_send_Chinese_message(char *message,char *phonenumber)
{ Usart_SendString2(USART3,"AT\r\n");                           //SIM900A是否与单片机来连接成功delay_ms(200);	while(Find_char((char*)Usart3_buff,"OK"));                     //字符串匹对函数   printf("Chinese_message_OK1\r\n");Usart_SendString2(USART3,"AT&F\r\n");                          //SIM900A复位delay_ms(200);	while(Find_char((char*)Usart3_buff,"OK"));                    printf("Chinese_message_OK2\r\n");	Usart_SendString2(USART3,"AT+CSCS=\"UCS2\"\r\n");               //中文短信指令1delay_ms(200);	while(Find_char((char*)Usart3_buff,"OK"));                       printf("Chinese_message_OK3\r\n");Usart_SendString2(USART3,"AT+CMGF=1\r\n");                     //中文短信指令2delay_ms(200);	while(Find_char((char*)Usart3_buff,"OK"));  printf("Chinese_message_OK4\r\n");Usart_SendString2(USART3,"AT+CSMP=17,167,0,8\r\n");            //中文短信指令2delay_ms(200);	while(Find_char((char*)Usart3_buff,"OK"));  printf("Chinese_message_OK5\r\n");sprintf(dispbuf,"AT+CMGS=\"%s\"\r\n",phonenumber);Usart_SendString2(USART3,dispbuf);                             //中文短信指令3delay_ms(200);while(Find_char((char*)Usart3_buff,"OK")); printf("Chinese_message_OK6\r\n");Usart_SendString2(USART3,message);                              //中文短信指令4delay_ms(200);while(Find_char((char*)Usart3_buff,"OK"));  printf("Chinese_message_OK7\r\n");Usart_SendHalfWord(USART3,0x1a);                                //中文结束指令delay_ms(2000);  //延时两秒while(Find_char((char*)Usart3_buff,"OK"));  printf("Chinese_message_OK8\r\n");
} 

4、main.c文件代码

        代码不做多介绍,我每条代码都有备注,很容易看懂。

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "sim900a.h"       //SIM900A短信发送模块//接线
/**************************************************
1、单片机的电源接入相应的电源
单片机 PB10 --- 模块 5VR
单片机 PB11 --- 模块 5VT 
单片机 GND  --- 模块 GND
单片机 5V   --- 模块 VCC_MCU
2、模块单独供电
模块的 VCC(或 VCC5V)接入 DC5V
模块的 GND 接入电源地
*****************************************************//**************************************************************************/
//函数作用:   硬件初始化,初始化单片机功能以及外接设备
//函数名称:   Hardware_Init();
//外部部参数: 无
//修改日期:   2022年1月27日  21:35
//作者:       (CSDN搜)大屁桃
/**************************************************************************/
void Hardware_Init(void)
{NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);	//中断控制器分组设置delay_init();								    	//systick初始化LED_Init();Usart1_Init(115200);							//串口1,打印信息用	Usart3_Init(9600);							  //串口3,驱动SIM900A用	UsartPrintf(USART_DEBUG, " Hardware init OK\r\n");	
}/**************************************************************************/
//函数作用:   主函数
//函数名称:   mian()
//外部部参数: 无
//修改日期:   2022年1月27日  21:35
//作者:       (CSDN搜)大屁桃
//功能描述:
/*单片机RCT6下入程序后现象如下:首先,LED0亮两秒后发送英文短信,发送成功后关闭随后,LED1亮两秒后发送中文短信,发送成功后关闭最后,都发送成功后LED0和LED1闪烁同时串口会一直打印消息
*/
/**************************************************************************/
int main()
{/*SIM900A短信内容和号码*/char English_message[]={"Hello!!"};                             //英文短信内容char phonenumber[]={"13225567263"};                             //接受短信的号码char Chinese_message[]={"4F60597D"};                            //中文短信  内容对应于  你好char Unicode_phonenumber[]={"00310033003200320035003500360037003200360033"};Hardware_Init();				                                        //初始化外围硬件LED0  = 0;                                                      //LED0打开两秒后发送英文短信      delay_ms(500);delay_ms(500);delay_ms(500);delay_ms(500);delay_ms(500);delay_ms(500);delay_ms(500);delay_ms(500);	            /*SIM900A发送英文短信代码*/		sim900a_send_English_message(English_message,phonenumber);      //发送信息的函数LED0  = 1;LED1  = 0;                                                     //LED1打开两秒后发送中文短信   delay_ms(500);delay_ms(500);delay_ms(500);delay_ms(500);delay_ms(500);delay_ms(500);delay_ms(500);delay_ms(500);/*SIM900A发送中文短信代码*/		sim900a_send_Chinese_message(Chinese_message,Unicode_phonenumber);LED1  = 1;while(1){ LED1  = 0;                                                     //发送成功后LED0和LED1闪烁     LED0  = 0;delay_ms(500);delay_ms(500);LED1  = 1;LED0  = 1;delay_ms(500);delay_ms(500);}}


第三部分、总结        

1、效果图片和视频

        这是我手机收到短信的截图,我是用我奶奶手机卡给自己的手机发的短息。这是视频链接,视频录制的有点撇😁,手有点抖:STM32驱动SIM900A发送中文和英文短信_哔哩哔哩_bilibili

 2、感谢

        没有这位洋气L✅的博客_CSDN博客-领域博主博主的帮助,我可能还要在坑里浪费更多的时间,感谢一波哈!

3、完整的工程代码

        注意:我的单片机型号是STM32F03RCT6,工程链接如下:

百度云白嫖链接:https://pan.baidu.com/s/1fyaLeTgnFUbamflhZ81axQ  提取码:nny0 

CSDN付费下载链接:

【STM32训练—项目1】第二篇、STM32驱动SIM900A发送中文和英文短信-其它文档类资源-CSDN文库

        两个工程里面的内容一样,老铁有用的话记得点赞收藏一波🐶🐶🐶,有问题的小伙伴欢迎进群交流最后希望我的工程对你有帮助!


http://www.ppmy.cn/news/813386.html

相关文章

STM32 USB声卡 CUBEMX配置 极简配置十分钟解决 STM32+PCM5102A

1.综述 USB声卡无非就是USB将PCM数据给I2S外设或SAI外设通过I2S输出给DAC转为模拟信号后,连接上耳机。 就算名贵的意大利数字界面也不例外。 2.分步 2.1 USB接收音频数据 2.2 将音频数据发送给DAC 3.开工 开工前啰嗦两句: 笔者分别使用了STM32F1…

国际短信发不出去是怎么回事?

越来越多的企业选择出海市场,在拓展国际业务的时候大多都会选择使用国际短信,这就增加了国际短信的使用率。国际短信有专属的短信通道,和普通的短信一样也有营销和应用短信的区分,发送内容的限制也是非常多的,每个国家…

基于Stm32f103针对TM1640驱动数码管

最近,在学习stm32f103芯片的使用,发现单片机很多东西,必须亲力亲为去写一遍才会明白里面的坑!第一次写,有问题请大佬指出。 之前学习了一下TM1640芯片,一直没有时间在开发板上实践,直到最近才写…

安卓手机短信发不出去设置方法

安卓手机短信发不出去设置方法 1. 在电话拨号界面输入:*#*#4636#*#*,如图(注意:下图中少一个*): 2. 然后出现工程界面: 3. 选手机信息,在下面找到SMCC: 4. 这时要注意了&a…

短信发送显示服务器失败,手机短信发不出去怎么办 手机故障解决方法【方法步骤】...

手机短信发不出去怎么办? 短信可以由移动通信终端(手机)始发,也可由移动网络运营商的短信平台服务器始发,还可由与移动运营商短信平台互联的网络业务提供商SP(包括ICP、ISP等)始发。平常我们除了打电话就会使用到短信,如果短信发不出去就糟糕…

【STM32训练—SIM900A模块】第一篇、电脑的串口助手驱动SIM900A发送中文和英文短信

目录 第一部分、关于SIM900A的基本知识 1、SIM900A的通信方式 2、SIM900A的供电方式 3、常用指令的含义 第二部分、利用电脑串口助手实现SIM900A发送英文和中文短信 一、发送英文短信 1、发送SIM卡检测指令和信号质量检测指令 2、发送英文短信指令 3、我手机上面显示…

7-2 九牛一毛

7-2 九牛一毛 分数 5 全屏浏览题目 切换布局 作者 陈越 单位 浙江大学 这是一道脑筋急转弯题:猪肉一斤 15 元,鸡肉一斤 20 元,那么一毛钱能买多少头牛? 答案是:9 —— 因为“九牛一毛”。 本题就请你按照这个逻辑…

excel里有文字的数字怎么从小到大排序,而不是首数字排序

试验软件:WPS表格 不能按照数字大小排序,原因有: 一、不是数字格式 二、其实还是不是数字的原因,如果数据来源是公式的话,也会造成排序的这个问题 把内容改成数字格式,即可解决问题