我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 1874|回复: 11

[资料贡献] 意法半导体MCU STM32的GPRS数据传输技术的研究

[复制链接]

该用户从未签到

540

主题

20

回帖

0

积分

二级逆天

积分
0

终身成就奖

发表于 2020-3-19 17:35:57 | 显示全部楼层 |阅读模式
意法半导体是目前世界最大的半导体公司之一。目前为止
意法半导体MCU
的增长速度已经超过了半导体工业的整体增长速度。自1999年起,ST始终是世界十大半导体公司之一。据最新的工业统计数据,意法半导体是全球第五大半导体厂商,在很多市场居世界领先水平。尤其是生产得STM32的意法半导体MCU产品,被广泛应用在各种行业领域范围,给当代社会带来了更多的便利.国内本土MCU产品能替换代替兼容的主要有
灵动微
.一家致力于MCU产品和解决方案的厂商.


下面本文要介绍的是有关于实现STM32 GPRS数据传输技术资料.


1、实现细节


实现GPRS数据传输的原理是:STM32解析一串数据或命令,然后通过串口或其他方式一个字符一个字符地发送给SIM900A模块,SIM900A接收到数据之后再通过SIM卡发送到服务器。当SIM900A接收到数据时,立即响应中断,按照中断所设置的方式进行数据处理。此时,就需要通过发送检验和接收检验来控制数据的传输。


1.1、发送检验


由于STM32逐个字符地将数据发送给SIM900A模块,因此必须保证数据的正确性与连贯性。如果在发送的时候响应中断或者进行任务调度,则发送将作废,从而导致程序出错,所以开发者必须警惕该类的错误出现。


发送数据或者命令的时候,可以将数据通过参数传给发送函数,由发送函数统一控制,发送完成之后再返回一个发送完成标志位,告知调用函数者发送已完成。源程序如下:


voidUSART_Send_Byte(charMyData){//发送字符函数

USART_ClearFlag(USART2,USART_FLAG_TC);

//清除标志位,如上所述

USART_SendData(USART2,MyData);//发送数据

while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET);//等待发送完成

}

voidUSART_Send_Str(char*s){//发送字符串

inTI;

intlen=strlen(s)-1;//字符串长度

for(inTI=0;i《len;i++)

USART_Send_Byte(s[i]);//循环将字符串发送出去

if(s[i]==0x0a){//判断发送是否结束

SendCFFlag=TRUE;

//如果为真,则发送完成标志位置为真

}else{

USART_Send_Byte(s[i]);//如果为假,则发送出去

}

}


1.2、接收检验

当SIM900A有数据返回或者有数据通过SIM900A接收到下位机时,STM32会立即响应中断来接收数据。此时就要在中断函数中进行一系列处理。以SIM900A为例,SIM900A模块返回的命令都是以“r”+“n”+“”结尾,因此检验传输结束可以根据它进行判断。在中断响应函数(即stm32f10x_it.c文件里)的USART2_IRQHandler函数可以设置如下:


voidUSART2_IRQHandler(void)

{

if(USART_GeTITStatus(USART2,USART_IT_RXNE)!=RESET){

//将接收字符存入接收缓冲区RxBuffer

RxBuffer[ReceCounter++]=(char)USART_ReceiveData(USART2);

//判断是否接收结束

if(RxBuffer[ReceCounter]==′′&&RxBuffer[ReceCounter-1]==0x0A&&

RxBuffer[ReceCounter-2]==0x0D){

ReceCFFlag=TRUE;

}

USART_ClearITPendingBit(USART2,USART_IT_RXNE);

}

}


该函数的基本思路是:将USART接收到的字符逐个存入缓冲区,然后判断缓冲区最后3个字符是否为SIM900A的结束标识符。如果为假,继续接收;如果为真,则将接收完成标识符置为真。当接收完成标识符为真时,说明接收完成,接下来就可以进行数据处理了。


1.3、命令函数实现方法

下面将以AT+CIPSEND为例,阐述发送数据的细节。通过初始化模块、开启网络、建立接入点和建立TCP连接之后,就可以开始发送数据。实现源代码如下:


u8GPRS_Send(void){

u8i=0;

u8*p;

USART_SendToGPRS(“AT+CIPSENDrn”);//发送命令

Delay_ms(500);//延时500ms

p=LookFor_Str(RxBuffer,“》”);

//查找是否有“》”符号,如果有,则可以发送数据

if(p!=0){

p=0;

memset(RxBuffer,0,BufferSize);//清空接收缓冲区

USART_SendToGPRS(GPRSSendData);//发送数据

Delay_ms(500);

Delay_ms(500);

Delay_ms(500);

p=LookFor_Str(RxBuffer,“SENDOK”);

if(p!=0){//判断是否发送成功

//发送成功操作

return1;

}else{

//发送失败操作

return0;

}

}

}


该函数的基本思路是:首先发送命令,然后查找是否有“》”符号,如果有,则说明可以开始发送数据。一段延时之后查找接收缓冲区是否有“SENDOK”字眼,有则说明发送成功,没有则表示发送失败。可以根据判断作进一步的操作。
回复

使用道具 举报

  • TA的每日心情
    慵懒
    2024-6-14 16:03
  • 签到天数: 16 天

    [LV.4]偶尔看看III

    0

    主题

    1万

    回帖

    7618

    积分

    二级逆天

    积分
    7618

    终身成就奖特殊贡献奖原创先锋奖优秀斑竹奖

    QQ
    发表于 2020-3-19 20:23:29 | 显示全部楼层
    回复

    使用道具 举报

    该用户从未签到

    540

    主题

    20

    回帖

    0

    积分

    二级逆天

    积分
    0

    终身成就奖

     楼主| 发表于 2020-3-20 17:24:42 | 显示全部楼层
    意法半导体是目前世界最大的半导体公司之一。目前为止意法半导体MCU的增长速度已经超过了半导体工业的整体增长速度。
    回复

    使用道具 举报

    该用户从未签到

    2

    主题

    1179

    回帖

    0

    积分

    二级逆天

    积分
    0

    终身成就奖特殊贡献奖原创先锋奖

    发表于 2021-6-8 15:00:52 | 显示全部楼层
    回复

    使用道具 举报

    该用户从未签到

    14

    主题

    290

    回帖

    0

    积分

    PADS20210412初级班

    积分
    0

    终身成就奖原创先锋奖

    发表于 2021-6-10 09:09:24 | 显示全部楼层
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    2669

    回帖

    0

    积分

    二级逆天

    积分
    0

    终身成就奖特殊贡献奖原创先锋奖

    发表于 2022-3-18 16:32:12 | 显示全部楼层
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    2669

    回帖

    0

    积分

    二级逆天

    积分
    0

    终身成就奖特殊贡献奖原创先锋奖

    发表于 2022-3-18 16:43:02 | 显示全部楼层
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    2669

    回帖

    0

    积分

    二级逆天

    积分
    0

    终身成就奖特殊贡献奖原创先锋奖

    发表于 2022-3-18 17:03:12 | 显示全部楼层
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    2669

    回帖

    0

    积分

    二级逆天

    积分
    0

    终身成就奖特殊贡献奖原创先锋奖

    发表于 2022-3-18 17:04:47 | 显示全部楼层
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    2669

    回帖

    0

    积分

    二级逆天

    积分
    0

    终身成就奖特殊贡献奖原创先锋奖

    发表于 2022-3-18 17:06:37 | 显示全部楼层
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    论坛开启做任务可以
    额外奖励金币快速赚
    积分升级了


    Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

    本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

    平平安安
    TOP
    快速回复 返回顶部 返回列表