我是靠谱客的博主 简单雪糕,这篇文章主要介绍STM32开发 | 移远4G-Cat.1模组EC200N-CN开发一、硬件说明二、常用AT指令说明三、实现流程四、程序代码五、例程说明,现在分享给大家,希望可以做个参考。

一、硬件说明

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指令收发是否正常
  • 模组收到指令回复:
    复制代码
    1
    2
    3
    AT OK

2、AT+CPIN?

  • 说明: 查询SIM卡状态(是否插入SIM卡、锁定SIM卡、解锁SIM卡),返回 READY则表示模组正常
  • 模组收到指令回复:
    复制代码
    1
    2
    3
    4
    5
    AT+CPIN? +CPIN: READY OK

3、AT+CREG?

  • 说明: 查询当前网络注册状态,正常则回复 +CREG: 0,1
  • 模组收到指令回复:
    复制代码
    1
    2
    3
    4
    5
    AT+CREG? +CREG: 0,1 OK

4、AT+CEREG?

  • 说明: 查询当前EPS网络注册状态,正常则回复 +CEREG: 0,1
  • 模组收到指令回复:
    复制代码
    1
    2
    3
    4
    5
    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>;

  • 模组收到指令回复:

    复制代码
    1
    2
    3
    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>;
  • 模组收到指令回复:
    复制代码
    1
    2
    3
    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>]]

  • 模组收到指令回复:

    复制代码
    1
    2
    3
    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

四、程序代码

  • 串口发送代码

    复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    #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驱动程序

    复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    /** * @brief EC200N-CN初始化 * @param step: 步骤 * @retval step: 步骤值 */ uint16_t LTEUECat1Init(uint16_t step) { switch(step) { case 0: //查询AT指令是否正常 SendCmd("ATrn", "OK", "Error: ATrn", 10, step); if(step == 0) break; case 1: //检测SIM卡状态 SendCmd("AT+CPIN?rn", "+CPIN: READY", "Error: AT+CPIN?rn", 2, step); if(step == 1) break; case 2: //查询当前网络注册状态 SendCmd("AT+CREG?rn", "+CREG: 0,1", "Error: AT+CREG?rn", 1, step); if(step == 2) break; case 3: //查询当前EPS网络注册状态 SendCmd("AT+CEREG?rn", "OK", "Error: AT+CEREG?rn", 1, step); if(step == 3) break; case 4: //配置移动场景参数 SendCmd("AT+QICSGP=1,1,"CMNET","","",0rn", "OK", "Error: AT+QICSGPrn", 1, step); if(step == 4) break; default: break; } if(step == 4) { //激活移动场景 USART2_SendStr("AT+QIACT=1rn"); //等待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) { short times = 3000; USART2_SendStr("AT+QIOPEN=1,0,"TCP","112.168.19.12",28014,0,2rn"); while(times--) { if(strstr((const char*)com2_rx_buffer, "CONNECT") != NULL) { USART1_SendStr("Connect OK!rn"); break; } else delay_ms(100); } }

五、例程说明

  • STM32芯片串口USART2与EC200N-CN串口MAIN_TXD跟MAIN_RXD
  • 串口通讯采用DMA中断模式
  • ECC200N-CN默认串口通讯速率为115200

最后

以上就是简单雪糕最近收集整理的关于STM32开发 | 移远4G-Cat.1模组EC200N-CN开发一、硬件说明二、常用AT指令说明三、实现流程四、程序代码五、例程说明的全部内容,更多相关STM32开发内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部