MC20 模块是一款集成了高性能GNSS 引擎和四频段GSM/GPRS 引擎的多功能无线模块,本次在项目中使用MC20作为通信网关,开发其与服务器通信的功能以及定位功能,稍微学习了一下。
1.硬件部分
GSM/GPRS 部分主要特性:
MC20模块本身集成度较高,如果仅仅是使用的话其实非常简单,只需要了解模块内部的AT指令便可。
MC20和STM32的接口采用UART,MC20上面有3个串口,分别用不同的功能,但我们项目的硬件设计把GPRS和GPS的串口都设计在了一起,因此只使用一个串口便可以实现通信与定位的功能。
硬件不多讲,直接下载官方的手册参照设计即可,如果自己找不到手册,可以联系留下邮箱。
2.驱动部分
初始化:
MC20的初始化总体而言分为两个大部分:1.GRRS初始化 2.GPS初始化
首先解释GPRS初始化:
GPRS的初始化分为以下6个步骤:
1.模块硬件检查
2.SIM状态检查
3.网络状态检查
4.GPRS信号强度检查
5.TCPIP传送模式选择
6.建立TCP链接
所谓硬件检查,按照手册上描述,其实就是检查一下硬件有没有正常启动,在已经给电,并且通过脉冲激活了MC20的情况下,使用串口向MC20发送一个字符串“AT\r”。
发送字符串以后,会存在3种状态,1.什么也没收到 2.收到“OK” 3.收到其他字符串。
有且只有在第二种的情况下才代表通信正常,由于STM32与MC20的通信几乎都是这种一问一答的模式,因此特地做一个函数来进行这个工作的处理。
函数功能:使用串口发送一个字符串:AT_CMD,然后等待,在wait_time_ms时间内如果串口有信息返回,那么就进行判断,判断返回信息中是否包含自己需要的字符串:return_value,如果有返回TRUE,如果没有返回FALSE。
1 uint8_t MC20_SendAtCmd(char *AT_CMD, char *return_value, uint32_t wait_time_ms) 2 { 4 uint32_t time; 5 uint8_t res; 6 7 if(NULL == AT_CMD) 8 { 9 return 0; 10 } 11 12 MC20_ClearFlag(); 13 /* 发送命令 */ 14 MC20_SendData((uint8_t *)AT_CMD, strlen(AT_CMD)); 15 if(NULL == return_value) 16 { 17 return 1; 18 } 19 20 time = u32SysTime; 21