stm32源码列表:
1.拨打电话
10.GPRS_透传模式
11.综合演示程序STM32
12.GPS测试程序
13.蓝牙测试程序
14.手机通过蓝牙控制LED
2.接听电话
3.发送TEXT短信
4.发送中文短信
5.接收短信控制LED灯
6.GPRS_TCP程序(动态IP)
7.GPRS_TCP程序(域名)
8.GPRS_UDP程序(动态IP)
9.GPRS_UDP程序(域名)
本程序通过GPRS服务器控制LED的亮灭
使用单片机串口2与模块通信;接法如下
STM32 GPRS模块
PA3 (RXD2)->RXD
PA2 (TXD2)->TXD
GND ->GND
1、1、板子上电后运行指示灯RUNING_LED会以一秒的频率闪烁;
2、通过单片机的串口1,可以监视模块的登录情况;
3、手机发送“onled”点亮LED;
4、手机发送“offled”熄灭LED;
5、单片机每隔10秒会向服务器发送心跳帧“OK”
6、通过串口助手监控单片机的串口1可以看到服务器发送的信息;
单片机源程序如下:
- /**********************************************************************************
- * 工程名 :GPRS_透传模式
- * 描述 :通过STM32开发板控制模块进入透传模式,连接上服务器后将收到服务器的数据返回给服务器
- * 实验平台:STM32F10X
- * 库版本 :
- * 硬件连接说明
- 使用单片串口2与GPRS模块通信 注:使用串口2可以避免下载和通信不会冲突
- STM32 GPRS模块
- PA3 (RXD2)->TXD
- PA2 (TXD2)->RXD
- GND ->GND
- * 软件功能说明
- 板子上电后运行指示灯RUNING_LED会以一秒的频率闪烁
- 连接上服务器后将收到服务器的数据返回给服务器
- **********************************************************************************/
- #include "stm32f10x.h"
- #include "usart.h"
- #include "Led.h"
- #include "SysTick.h"
- #include "timer.h"
- #include "string.h"
- #define Buf2_Max 200 //串口2缓存长度
- /************* 本地常量声明 **************/
- const char *string = "AT+CIPSTART=\"TCP\",\"14.125.48.205\",9015";//IP登录服务器,需要根据自己的IP和端口做修改
- /************* 本地变量声明 **************/
- char Uart2_Buf[Buf2_Max]; //串口2接收缓存
- char *p1,*p2;
- u8 Times=0,shijian=0;
- vu8 Timer0_start; //定时器0延时启动计数器
- /************* 本地函数声明 **************/
- void System_Initialization(void); //STM32系统初始化
- void Ram_Initialization(void); //内存变量初始化
- void NVIC_Configuration(void); //中断向量组初始化
- void CLR_Buf2(void); //清串口2接收缓存
- u8 Find(char *a); //查找字符串
- void Second_AT_Command(char *b,char *a,u8 wait_time); //发送AT指令
- void Wait_CREG(void); //查询等待模块注册成功
- void Set_ATE0(void); //取消回显
- void Connect_Server(void); //配置GPRS连接参数,并进入透传模式
- void Rec_Server_Data(void); //接收服务器数据并返回
- /************* 外部函数和变量声明*****************/
- /*******************************************************************************
- * 函数名 : main
- * 描述 : 主函数
- * 输入 :
- * 输出 :
- * 返回 :
- * 注意 : 串口2负责与MG323模块通信,串口1用于串口调试,可以避免在下载程序时数据
- 还发送到模块
- *******************************************************************************/
- int main(void)
- {
- System_Initialization(); //系统初始化
- Ram_Initialization(); //变量初始化
- UART1_SendString("GPRS模块GPRS测试程序\r\n");
- UART1_SendString("GPRS模块在注册网络\r\n");
- Delay_nS(1);
- UART2_SendString("+++");//退出透传模式,避免模块还处于透传模式中
- Delay_nS(2);
- Wait_CREG(); //等待模块注册成功
- UART1_SendString("GPRS模块注册成功\r\n");
- UART1_SendString("GPRS模块开始连接服务器\r\n");
- Set_ATE0(); //取消回显
- Connect_Server(); //设置GPRS参数
- UART1_SendString("连接成功\r\n");
- while(1)
- {
- Rec_Server_Data();//接收数据并原样返回
- }
- }
- /*******************************************************************************
- * 函数名 : System_Initialization
- * 描述 : STM32系统初始化函数(初始化STM32时钟及外设)
- * 输入 : 无
- * 输出 : 无
- * 返回 : 无
- * 说明 : 无
- *******************************************************************************/
- void System_Initialization(void)
- {
- RCC_Configuration(); //设置系统时钟为72MHZ(这个可以根据需要改)
- SysTick_Init_Config(); //初始化系统滴答时钟SysTick
- NVIC_Configuration(); //STM32中断向量表配配置
- Timer2_Init_Config(); //定时器2初始化配置
- USART1_Init_Config(115200); //串口1初始化配置
- USART2_Init_Config(115200); //串口2初始化配置
- GPIO_Config(); //初始化GPIO
- }
- /*******************************************************************************
- * 函数名 : Ram_Initialization
- * 描述 : 变量初始化函数
- * 输入 : 无
- * 输出 : 无
- * 返回 : 无
- * 说明 : 无
- *******************************************************************************/
- void Ram_Initialization(void)
- {
- Times=0;
- shijian=0;
- Timer0_start=0;
- p1=Uart2_Buf;
- p2=p1;
- }
- /*******************************************************************************
- * 函数名 : NVIC_Configuration
- * 描述 : STM32中断向量表配配置
- * 输入 : 无
- * 输出 : 无
- * 返回值 : 无
- * 说明 : 设置KEY1(PC11)的中断优先组
- *******************************************************************************/
- void NVIC_Configuration(void)
- {
- NVIC_InitTypeDef NVIC_InitStructure; //定义NVIC初始化结构体
- /* Set the Vector Table base location at 0x08000000 */
- NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
-
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置中断优先级组为2,先占优先级和从优先级各两位(可设0~3)
-
- /*定时器2中断向量配置*/
- NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; //设置中断向量号
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3; //设置抢先优先级
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //设置响应优先级
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能NVIC
- NVIC_Init(&NVIC_InitStructure);
- /*串口1中断向量配置*/
- NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; //设置中断向量号
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //设置抢先优先级
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //设置响应优先级
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能NVIC
- NVIC_Init(&NVIC_InitStructure);
- /*串口2中断向量配置*/
- NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; //设置中断向量号
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //设置抢先优先级
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //设置响应优先级
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能NVIC
- NVIC_Init(&NVIC_InitStructure);
- }
- /*******************************************************************************
- * 函数名 : USART2_IRQHandler
- * 描述 : 串口1中断服务程序
- * 输入 : 无
- * 返回 : 无
- * 说明 :
- *******************************************************************************/
- void USART2_IRQHandler(void)
- {
- u8 Res=0;
- if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
- {
- Res=USART_ReceiveData(USART2);
- *p1 = Res; //将接收到的字符串存到缓存中
- p1++; //缓存指针向后移动
- if(p1>&Uart2_Buf[Buf2_Max]) //如果缓存满,将缓存指针指向缓存的首地址
- {
- p1=Uart2_Buf;
- }
- }
- }
- /*******************************************************************************
- * 函数名 : TIM2_IRQHandler
- * 描述 : 定时器2中断断服务函数
- * 输入 : 无
- * 输出 : 无
- * 返回 : 无
- * 说明 : 无
- *******************************************************************************/
- void TIM2_IRQHandler(void) //TIM2中断
- {
- static u8 flag =1;
- if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) //检查TIM3更新中断发生与否
- {
-
- TIM_ClearITPendingBit(TIM2, TIM_IT_Update ); //清除TIMx更新中断标志
-
- if(Timer0_start)
- Times++;
- if(Times > shijian)
- {
- Timer0_start = 0;
- Times = 0;
- }
-
- if(flag)
- {
- LED4_ON();
- flag=0;
- }
- else
- {
- LED4_OFF();
- flag=1;
- }
- }
- }
- /*******************************************************************************
- * 函数名 : CLR_Buf2
- * 描述 : 清除串口2缓存数据
- * 输入 :
- * 输出 :
- * 返回 :
- * 注意 :
- *******************************************************************************/
- void CLR_Buf2(void)
- {
- u16 k;
- for(k=0;k<Buf2_Max;k++) //将缓存内容清零
- {
- Uart2_Buf[k] = 0x00;
- }
- p1=Uart2_Buf; //接收字符串的起始存储位置
- }
- /*******************************************************************************
- * 函数名 : Find
- * 描述 : 判断缓存中是否含有指定的字符串
- * 输入 :
- * 输出 :
- * 返回 : unsigned char:1 找到指定字符,0 未找到指定字符
- * 注意 :
- *******************************************************************************/
- u8 Find(char *a)
- {
- if(strstr(Uart2_Buf,a)!=NULL)
- return 1;
- else
- return 0;
- }
- /*******************************************************************************
- * 函数名 : Second_AT_Command
- * 描述 : 发送AT指令函数
- * 输入 : 发送数据的指针、发送等待时间(单位:S)
- * 输出 :
- * 返回 :
- * 注意 :
- *******************************************************************************/
- void Second_AT_Command(char *b,char *a,u8 wait_time)
- {
- u8 i;
- char *c;
- c = b; //保存字符串地址到c
- CLR_Buf2();
- i = 0;
- while(i == 0)
- {
- if(!Find(a))
- {
- if(Timer0_start == 0)
- {
- b = c; //将字符串地址给b
- for (; *b!='\0';b++)
- {
- while(USART_GetFlagStatus(USART2, USART_FLAG_TC)==RESET);
- USART_SendData(USART2,*b);//UART2_SendData(*b);
- }
- UART2_SendLR();
- Times = 0;
- shijian = wait_time;
- Timer0_start = 1;
- }
- }
- else
- {
- i = 1;
- Timer0_start = 0;
- }
- }
- CLR_Buf2();
- }
- /*******************************************************************************
- * 函数名 : Wait_CREG
- * 描述 : 等待模块注册成功
- * 输入 :
- * 输出 :
- * 返回 :
- * 注意 :
- *******************************************************************************/
- void Wait_CREG(void)
- {
- u8 i;
- u8 k;
- i = 0;
- while(i == 0)
- {
- CLR_Buf2();
- UART2_SendString("AT+CREG?"); //查询等待模块注册成功
- UART2_SendLR();
- Delay_nMs(5000);
- for(k=0;k<Buf2_Max;k++)
- {
- if(Uart2_Buf[k] == ':')
- {
- if((Uart2_Buf[k+4] == '1')||(Uart2_Buf[k+4] == '5')) //说明注册成功
- {
- i = 1;
- UART1_SendLR();
- break;
- }
- }
- }
- UART1_SendString("注册中.....");
- }
- }
- /*******************************************************************************
- * 函数名 : Set_ATE0
- * 描述 : 取消回显
- * 输入 :
- * 输出 :
- * 返回 :
- * 注意 :
- *******************************************************************************/
- void Set_ATE0(void)
- {
- Second_AT_Command("ATE0","OK",3); //取消回显
- }
- /*******************************************************************************
- * 函数名 : Connect_Server
- * 描述 : GPRS连接服务器函数
- * 输入 :
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
SIM系列GSM模块例程(STM32).7z
(249.72 KB, 下载次数: 745)
|