一、硬件说明
1、引脚分配图
2、常用引脚说明
-
模块输入电源
引脚名 | 描述 |
---|
VBAT_BB | 模块基带电源(Vnom = 3.8 V) | VBAT_RF | 模块射频电源(Vnom = 3.8 V) | GND | 接地引脚 |
-
模块输出电源
引脚名 | 描述 |
---|
VDD_EXT | 外部电路 1.8 V 供电(Vnom = 1.8 V) |
-
开/关机
引脚名 | 描述 |
---|
RESET_N | 模块复位(低电平有效,1.8 V 电压域,不用则悬空。) | PWRKEY | 模块开/关机 (VBAT 电压域) |
-
SIM 接口
引脚名 | 描述 |
---|
USIM_VDD | (U)SIM 供电电源(模块自动识别 1.8 V或 3.0 V (U)SIM 卡。) | USIM_DATA | (U)SIM 数据 | USIM_CLK | (U)SIM 时钟 | USIM_RST | (U)SIM 复位 |
-
主串口
引脚名 | 描述 |
---|
MAIN_TXD | 主串口发送(1.8 V 电压域) | MAIN_RXD | 主串口接收(1.8 V 电压域) |
-
天线接口
引脚名 | 描述 |
---|
ANT_MAIN | 主天线接口(50 Ω 特性阻抗) |
二、常用AT指令说明
1、AT
- 说明: 检测AT指令收发是否正常
- 模组收到指令回复:
AT
OK
2、AT+CPIN?
- 说明: 查询SIM卡状态(是否插入SIM卡、锁定SIM卡、解锁SIM卡),返回 READY则表示模组正常
- 模组收到指令回复:
AT+CPIN?
+CPIN: READY
OK
3、AT+CREG?
- 说明: 查询当前网络注册状态,正常则回复
+CREG: 0,1 - 模组收到指令回复:
AT+CREG?
+CREG: 0,1
OK
4、AT+CEREG?
- 说明: 查询当前EPS网络注册状态,正常则回复
+CEREG: 0,1 - 模组收到指令回复:
AT+CEREG?
+CEREG: 0,1
OK
5、AT+QICSGP=1,1,“CMNET”,"","",0
-
说明: 配置 TCP/IP 场景1参数,指令原型为AT+QICSGP=<contextID>,<context_type>,<apn>,<username>,<password>,<authentication>; -
模组收到指令回复: AT+QICSGP=1,1,"CMNET","","",0
OK
-
参数说明:
参数 | 说明 |
---|
contextID | 整型。移动场景 ID。范围:1~15。 | context_type | 整型。协议类型。(1 IPv4 \ 2 IPv6 \ 3 IPv4v6) | APN | 字符串类型。接入点名称。(CMNET 中国移动 \ CTNET 中国电信 \ UNINET 中国联通) | username | 字符串类型。用户名。最大长度:127 字节。 | password | 字符串类型。密码。最大长度:127 字节。 | authentication | 整型。APN 鉴权方式。(0 None \ 1 PAP \ 2 CHAP \ 3 PAP 或 CHAP) |
6、AT+QIACT=1
- 说明: 激活移动场景1配置,正常则回复 OK,指令原型为
AT+QIACT=<contextID>; - 模组收到指令回复:
AT+QIACT=1
OK
7、AT+QIOPEN=1,0,“TCP”,“112.168.19.12”,28014,0,2
-
说明: 打开socket建立TCP连接并进入透传模式,指令原型为AT+QIOPEN=<contextID>,<connectI D>,<service_type>,"<IP_address>/<domain_name>",<remote_port>[,<local_port>[,<access_mode>]] -
模组收到指令回复: AT+QIOPEN=1,0,"TCP","112.168.19.12",28014,0,2
CONNECT
-
参数说明:
参数 | 说明 |
---|
contextID | 整型。移动场景 ID。范围:1~15。 | connectID | 整型。Socket ID。范围:0~11。 | service_type | 字符串类型。Socket 服务类型。(“TCP” \ “UDP” \ “TCP LISTENER” \ “UDP SERVICE”) | IP_address | 字符串类型。(如果 service_type 是 “TCP” 或者 “UDP”, 则为远程服务器的IP地址,例如112.168.19.12。如果service_type是"TCP LISTENER"或者"UDP SERVICE",请输入 127.0.0.1。) | domain_name | 字符串类型。远程服务器的域名地址。 | remote_port | 整型。远程服务器端口。范围:0~65535。仅当service_type是"TCP"或者"UDP"时才有效。 | local_port | 整型。本地端口。范围:0~65535。(如果service_type是"TCP LISTENER"或者"UDPSERVICE",该参数必须指定。如果service_type是 “TCP” 或者 “UDP”,且local_port是 0,那么将会自动分配本地端口;否则本地端口会被指定。) | access_mode | 整型。Socket 服务的数据访问模式。(0 缓存模式 \ 1 直吐模式 \ 2 透传模式) |
-
透传模式说明 透传模式下,相对应的串口(比如 UART 口、USB Modem 口等)会进入独占模式,通过 COM 口接收的数据会直接发送到网络端,从网络接收到的数据会从 COM 口直接输出。+++ 可以用来退出透传模式:当输入+++ 返回 OK 后,访问模式就会切换到缓存模式,如需切换回透传模式,可使用AT+QISWTMD 命令。 -
退出透传模式 用户可以通过+++ 或者 DTR(需先设置 AT&D1)两种方式退出透传模式,为了防止+++ 被当成数据发送,实际操作时必须遵循以下步骤:
+++ 输入前 1 秒或更长时间内不能输入其它任何数据;- 必须在 1 秒内输入
+++ ,并且不能输入其它任何数据; +++ 输入后 1 秒内不能输入其它任何数据;- 通过
+++ 或者 DTR(设置 AT&D1)方式使模块退出透传模式,直到模块返回 OK;此时模块成功退出透传模式。 -
在透传模式下,不可执行 AT 命令。 若因网络错误或者其他原因导致 Socket 连接断开,模块会上报 NO CARRIER ,并退出透传模式,在这种情况下可以执行 AT+QICLOSE 来关闭 Socket 服务。
三、实现流程
Created with Rapha?l 2.3.0
开始
模块开机
模块初始化
初始化成功?
激活移动场景
场景激活成功?
打开socket建立TCP连接并进入透传模式
通过网络与串口助手进行通信测试
结束
yes
no
yes
no
四、程序代码
-
串口发送代码 #include "stm32f10x.h"
#include "stm32f10x_conf.h"
void USART1_SendStr(char *pStr)
{
uint8_t tx_str;
while(1)
{
tx_str = *pStr++;
if(tx_str == 0) break;
USART_ClearFlag(USART1, USART_FLAG_TC);
USART_SendData(USART1, tx_str);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
}
}
void USART2_SendStr(char *pStr)
{
uint8_t tx_str;
while(1)
{
tx_str = *pStr++;
if(tx_str == 0) break;
USART_ClearFlag(USART2, USART_FLAG_TC);
USART_SendData(USART2, tx_str);
while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET);
}
}
void USART1_SendCmd(uint8_t *pcmd, uint16_t count)
{
uint8_t tx_cmd;
uint16_t i;
for(i=0; i < count; i++)
{
tx_cmd = *pcmd++;
USART_ClearFlag(USART1, USART_FLAG_TC);
USART_SendData(USART1, tx_cmd);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
}
}
-
EC200N-CN驱动程序
uint16_t LTEUECat1Init(uint16_t step)
{
switch(step)
{
case 0:
SendCmd("AT\r\n", "OK", "Error: AT\r\n", 10, step);
if(step == 0) break;
case 1:
SendCmd("AT+CPIN?\r\n", "+CPIN: READY", "Error: AT+CPIN?\r\n", 2, step);
if(step == 1) break;
case 2:
SendCmd("AT+CREG?\r\n", "+CREG: 0,1", "Error: AT+CREG?\r\n", 1, step);
if(step == 2) break;
case 3:
SendCmd("AT+CEREG?\r\n", "OK", "Error: AT+CEREG?\r\n", 1, step);
if(step == 3) break;
case 4:
SendCmd("AT+QICSGP=1,1,\"CMNET\",\"\",\"\",0\r\n", "OK", "Error: AT+QICSGP\r\n", 1, step);
if(step == 4) break;
default: break;
}
if(step == 4)
{
USART2_SendStr("AT+QIACT=1\r\n");
while(3000--)
{
if(strstr((const char*)com2_rx_buffer, "OK") != NULL)
{
step = 5;
break;
}
else delay_ms(100);
}
}
return step;
}
uint16_t SendCmd(char *cmd, char *echo, char *error, uint16_t num, uint16_t count)
{
for(int i = 0; i < num; i++)
{
USART2_SendStr(cmd);
delay_ms(1000);
if(strstr((const char*)com2_rx_buffer, echo) != NULL)
{
USART1_SendStr(echo);
memset(com2_rx_buffer, 0, sizeof(com2_rx_buffer));
count++;
return count;
}else
{
USART1_SendStr(error);
}
}
return 0;
}
void LTEUECat1Connect(void)
{
USART2_SendStr("AT+QIOPEN=1,0,\"TCP\",\"112.168.19.12\",28014,0,2\r\n");
while(3000--)
{
if(strstr((const char*)com2_rx_buffer, "CONNECT") != NULL)
{
USART1_SendStr("Connect OK!\r\n");
break;
}
else delay_ms(100);
}
}
五、例程说明
- STM32芯片串口USART2与EC200N-CN串口MAIN_TXD跟MAIN_RXD
- 串口通讯采用DMA中断模式
- ECC200N-CN默认串口通讯速率为115200
|