单片机STM32HALGSM通讯SIM800L

阅读: 评论:0

单⽚机STM32HALGSM通讯SIM800L /*************笔记****************
1、本SIM800L模块采⽤huart3(串⼝3),然后huart1(串⼝1)作为调试输出。
2、CudeMX配置huart3:
------------------------------------------
Mode        --> Asynchronous(异步)
锌溴电池Baud Rate  --> 9600 Bit/s
Word Length --> 8 Bit
液压集成块
Parity      --> None
Stop Bits  --> 1
------------------------------------------
NVIC        --> 串⼝中断使能
-
-----------------------------------------
DMA        --> Add 增加RX TX
--> Data Width --> Byte
------------------------------------------
3、需要FreeRTOS系统⽀持,需要"uartext.c"、"uartext.h"
4、本代码末尾有FreeRTOS任务模板。StartGSMTask()
气相程序升温5、
***********************************/
#include "SIM800L.h"
#include <stdlib.h>
#include "stm32f1xx_hal.h"
#include "cmsis_os.h"
#include "uartext.h"
extern UART_HandleTypeDef huart3;//串⼝3
extern uint8_t SIM800L_Get_text[32];
extern uint8_t Address;
/*********************************************************
函数名:SIM800L_Check_Cmd
功能发送命令后,检测接收到的应答
形参:str--期待的应答结果
返回值:0--没有得到期待的应答结果 *?*--期待应答结果的位置(str的位置)
备注:
**********************************************************/
uint8_t*SIM800L_Check_Cmd(uint8_t *str)
{
gpu虚拟化char*strx =0;
strx =strstr((const char*)SIM800L_Get_text,(const char*)str);//寻⽂本(被寻,欲寻)
return(uint8_t*)strx;
}
/********************************************
函数名:SIM800L_Send_Cmd
功能:向GSM发送命令
形参:cmd:发送的命令字符串(不需要添加回车了)
ack:期待的应答结果,如果为空,则表⽰不需要等待应答
waittime:等待时间(单位:100ms)
返回值:0--发送成功(得到了期待的应答结果)
1--发送失败
备注:
*********************************************/
uint8_t SIM800L_Send_Cmd(uint8_t *cmd, uint8_t *ack, u16 WaitTime)
{
uint8_t res =0;
uint8_t TxBuffer[32];
uint8_t len;
sprintf((char*)TxBuffer,"%s\r\n", cmd);
UartPutStr(&huart3, TxBuffer,strlen((char*)TxBuffer));//发给串⼝3
if(ack && WaitTime)//需要等待应答
{
while(--WaitTime)//等待倒计时
{
osDelay(100);
osDelay(100);
len =UartGetStr(&huart3, SIM800L_Get_text);//从串⼝3读取⼀次数据
if(len >1)//接收期待的应答结果
{
if(SIM800L_Check_Cmd(ack))
{
break;//得到有效数据
}
}
}
if(WaitTime ==0)
{
res =1;
}
}
return res;
}
/*********************************************************
函数名:SIM800L_Info_Show
功能:GSM检测(SIM卡准备和是否注册成功)
形参:⽆
返回值:2--正常其他--错误代码
备注:
**********************************************************/
uint8_t SIM800L_Info_Show(void)
{
static uint8_t sim_flag =0;
uint8_t TxBuffer[40];
switch(sim_flag)
{
case0:
if(SIM800L_Send_Cmd("AT+CPIN?","OK",20))//查询SIM卡是否在位
{
sprintf((char*)TxBuffer,"%d,02,05,Not SIM Crad\r\n", Address);
UartPutStr(&huart1, TxBuffer,strlen((char*)TxBuffer));//发给串⼝1⽅便调试
}
else
{
sim_flag =1;
sprintf((char*)TxBuffer,"%d,02,05,SIM Crad Yes\r\n", Address);
UartPutStr(&huart1, TxBuffer,strlen((char*)TxBuffer));//发给串⼝1⽅便调试
}
break;
case1:
if(SIM800L_Send_Cmd("AT+CREG?","+CREG: 0,1",20))//查询SIM卡⽹络是否已注册{
sprintf((char*)TxBuffer,"%d,02,05,Network Registering!\r\n", Address);
UartPutStr(&huart1, TxBuffer,strlen((char*)TxBuffer));//发给串⼝1⽅便调试
}
else
{
sim_flag =2;
sprintf((char*)TxBuffer,"%d,02,05,Network Register Success!\r\n", Address);
UartPutStr(&huart1, TxBuffer,strlen((char*)TxBuffer));//发给串⼝1⽅便调试
}
break;
}
return sim_flag;
}
/********************************************
函数名:SIM800L_CallNum
功能:拨打指定号码
形参:*num--⼿机号码("189********")
返回值:⽆
返回值:⽆
备注:⽆
*********************************************/
void SIM800L_CallNum(uint8_t *Num)
{
uint8_t TxBuffer[20];
sprintf((char*)TxBuffer,"ATD%s;\r\n", Num);
UartPutStr(&huart3, TxBuffer,strlen((char*)TxBuffer));//发给串⼝3
}
/********************************************
函数名:SIM800L_CmdShowOff
功能:指令不回显
形参:⽆
返回值:⽆
备注:⽆
*********************************************/
void SIM800L_CmdShowOff(void)
{
uint8_t TxBuffer[10];
sprintf((char*)TxBuffer,"ATE0\r\n");
UartPutStr(&huart3, TxBuffer,strlen((char*)TxBuffer));//发给串⼝3
}
/********************************************
函数名:SIM800L_SendEN_SMS
功能:设置TEXT⽂本模式发送英⽂短信
形参:*phone--接收短信的号码  *text--短信内容
返回值:⽆
备注:SIM800L_SendEN_SMS(“10086”,“123”)
*********************************************/
void SIM800L_SendEN_SMS(uint8_t *phone, uint8_t *text)
{
uint8_t TxBuffer[32];
SIM800L_Send_Cmd("AT+CMGF=1","OK",10);//设置⽂本模式
SIM800L_Send_Cmd("AT+CSCS=\"GSM\"","OK",10);//设置TE字符集为GSM
sprintf((char*)TxBuffer,"AT+CMGS=\"%s\"\r\n", phone);
SIM800L_Send_Cmd(TxBuffer,">",10);//命令+电话号码
UartPutStr(&huart3, text,strlen((char*)text));//发给串⼝3,内容到GSM模块
osDelay(1000);//必须增加延时,否则接收⽅接收信息不全
if(SIM800L_Send_Cmd("\x1a\r\n","+CMGS:",100)==0)//发送结束符,等待发送完成(最长等待10秒钟,因为短信长了的话,等待时间会长⼀些) {
sprintf((char*)TxBuffer,"%d,02,05,SMS Send Success!\r\n", Address);
UartPutStr(&huart1, TxBuffer,strlen((char*)TxBuffer));//发给串⼝1⽅便调试
}
else
{
sprintf((char*)TxBuffer,"%d,02,05,SMS Send fail!\r\n", Address);
UartPutStr(&huart1, TxBuffer,strlen((char*)TxBuffer));//发给串⼝1⽅便调试
}
}
///*********************************************
//函数名:StartGSMTask
//功能:处理GSM相关功能
/
/形参:
//返回值:
//备注:【GSM】的返回信息到达
//类型码:05
//**********************************************/
//uint8_t SIM800L_Get_text[32];
//void StartGSMTask(void const * argument)
//void StartGSMTask(void const * argument)
//{
//    uint8_t RxBuffer[32], TxBuffer[32];
//    uint16_t len;
/
/    osDelay(400);
//    /*GSM初始化部分*/
//    sprintf((char *)TxBuffer, "AT\r\n");
dsp2812
//    UartPutStr(&huart3, TxBuffer, strlen((char *)TxBuffer));//初始化GSM模块的波特率,发送任意字符使其⾃适应    while(SIM800L_Send_Cmd("AT", "OK", 100)) //检测是否应答AT指令
{
sprintf((char *)TxBuffer, "未检测到模块\r\n");
UartPutStr(&huart1, TxBuffer, strlen((char *)TxBuffer));//发给串⼝1⽅便调试
osDelay(800);
sprintf((char *)TxBuffer, "尝试连接模块...\r\n");
UartPutStr(&huart1, TxBuffer, strlen((char *)TxBuffer));//发给串⼝1⽅便调试
osDelay(400);
}
//    for(;;)
//    {
//        len = UartGetStr(&huart3, RxBuffer); //从串⼝3读取⼀次数据
//        if(len > 1)
//        {
//            memcpy(SIM800L_Get_text, RxBuffer, strlen((char *)RxBuffer));
//            UartPutStr(&huart1, RxBuffer, len);
//        }
//        osMessagePut(QueWdtHandle, 0x08, 10);
//        osDelay(2);
/
/    }
//}
#ifndef _SIM800L_H
#define _SIM800L_H
#include "main.h"
uint8_t*SIM800L_Check_Cmd(uint8_t *str);
uint8_t SIM800L_Send_Cmd(uint8_t *cmd, uint8_t *ack, u16 WaitTime);
uint8_t SIM800L_Info_Show(void);
void SIM800L_CallNum(uint8_t *Num);乳腺疏通精油
void SIM800L_CmdShowOff(void);
void SIM800L_SendEN_SMS(uint8_t *phone,uint8_t *text);
#endif

本文发布于:2023-06-04 21:05:16,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/2/125989.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:发送   应答   功能
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图