一、硬件说明 1、引脚分配图
2、常用引脚说明模块输入电源
模块输出电源
开/关机
SIM 接口
主串口
天线接口
说明: 配置 TCP/IP 场景1参数,指令原型为AT+QICSGP=<contextID>,<context_type>,<apn>,<username>,<password>,<authentication>;
模组收到指令回复:
AT+QICSGP=1,1,"CMNET","","",0 OK参数说明:
说明: 打开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参数说明:
透传模式说明
透传模式下,相对应的串口(比如 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" /** * @brief 串口1发送字符串 * @param pStr: 字符串指针 * @retval None */ 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); } } /** * @brief 串口2发送字符串 * @param pStr: 字符串指针 * @retval None */ 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); } } /** * @brief 串口1发送命令帧 * @param pcmd: 命令帧指针 * count: 命令帧长度 * @retval None */ 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驱动程序
/** * @brief EC200N-CN初始化 * @param step: 步骤 * @retval step: 步骤值 */ uint16_t LTEUECat1Init(uint16_t step) { switch(step) { case 0: //查询AT指令是否正常 SendCmd("AT\r\n", "OK", "Error: AT\r\n", 10, step); if(step == 0) break; case 1: //检测SIM卡状态 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: //查询当前EPS网络注册状态 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"); //等待30s while(3000--) { if(strstr((const char*)com2_rx_buffer, "OK") != NULL) { step = 5; break; } else delay_ms(100); } } return step; } /** * @brief 发送AT指令进行初始化 * @param cmd: 命令帧指针 * echo: 判断字收到的数据中所出现的字符 * num: 发送命令帧的次数 * count: 返回值 * @retval None */ 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); //延时1秒 delay_ms(1000); //判断接收到的数据中是否存在指定字符 if(strstr((const char*)com2_rx_buffer, echo) != NULL) { //向串口输出USART2接收到的数据 USART1_SendStr(echo); //初始化缓存 memset(com2_rx_buffer, 0, sizeof(com2_rx_buffer)); count++; return count; }else { USART1_SendStr(error); } } return 0; } /** * @brief 连接网络 * @param None * @retval None */ 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
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。 |
标签: #stm32和移远4g模块 #38