STM32之EC800K 4G模块驱动

1.EC800K简介

  EC800K,特别是EC800K-CN,是移远通信专为M2M(机器对机器)和IoT(物联网)领域而设计的超小尺寸LTE Cat 1无线通信模块。EC800K-CN作为一款专为M2M和IoT领域设计的LTE Cat 1无线通信模块,凭借其超小尺寸、高性价比、高速数据传输、广泛兼容性和丰富的网络协议与接口等特点,在物联网市场中占据了重要地位。无论是追踪器、POS机还是其他物联网设备,EC800K-CN都能提供稳定可靠的数据传输支持,推动物联网应用的快速发展。
在这里插入图片描述

  • 特性

  超小尺寸与高性价比:EC800K-CN以其超小的尺寸和出色的性价比,在物联网设备中得到广泛应用。
  高速数据传输:支持最大下行速率10 Mbps和最大上行速率5 Mbps,满足大多数物联网应用的数据传输需求。
  兼容性与封装:在封装上兼容LTE Standard EC800E-CN、EC800G-CN、EC800M-CN、EC800N-CN和EG800K系列模块,便于系统集成和升级。
  外观与工艺:采用镭雕工艺,外观精美,金属质感强,散热性能优异,信息不易被抹除,更能适应自动化生产需求。
  丰富的网络协议与接口:内置丰富的网络协议,集成多个工业标准接口,并支持多种驱动和软件功能(如Windows 8/8.1/10/11、Linux、Android等操作系统下的USB转串口驱动),极大地拓展了其在M2M和IoT领域的应用范围。
  EC800K-CN模块因其卓越的性能和广泛的应用兼容性,被广泛应用于各种物联网设备中,如追踪器、POS机、IPC(网络摄像机)、数据卡、智能安全设备以及工业级PDA等。

2.EC800K硬件设计

  • EC800K-CN 模块基本信息

在这里插入图片描述

  • 功能框图
    在这里插入图片描述

  • 引脚分配图
    在这里插入图片描述

  • 硬件PCB
    在这里插入图片描述

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/4c7bb1d7c45f4e3aac8f65cc64dae1c5.png#pic_cente

3.EC800K供电要求

  电源设计对模块性能至关重要。必须选择至少能够提供 2 A 电流能力的电源。若输入电压与模块供电电压之间的电压差较小,则建议选择 LDO。若输入电压与供电电压之间的电压差较大,则建议使用开关电源转换器。5v电源参考电路如下:
在这里插入图片描述

  模块的供电范围为 3.4~4.3 V,需要确保输入电压不低于 3.4 V。
  为了减少电压跌落,需要使用低 ESR(ESR ≤ 0.7 Ω)的 100 μF 滤波电容。同时建议给 VBAT 预留 5个具有良好 ESR 性能的片式多层陶瓷电容(MLCC)(1.8 pF、3.9 pF、10 pF、33 pF 和 100 nF)以及 1个 0 Ω 电阻以便后期调试使用(电阻封装不小于 0603),且电容应靠近 VBAT 引脚放置。外部供电电源连接模块时,VBAT 走线宽度应不小于 2 mm。原则上,VBAT 走线越长,线宽越宽。
  另外,为了保证电源稳定,建议在电源前端加 VRWM = 4.7 V,低钳位电压和高峰值脉冲电流 Ipp 的 TVS管。参考电路如下:
在这里插入图片描述

4.EC800K驱动

4.1 MQTT指令开发

  EC800K模块内置TCP/IP协议栈,同时本身自带HTTP和MQTT应用层协议。若使用MQTT协议,则可直接通过MQTT的AT指令集实现开发。

2020-03-09_13:58:05:995]AT

[2020-03-09_13:58:05:995]OK
[2020-03-09_13:58:07:481]ATI  //查询固件版本

[2020-03-09_13:58:07:483]Quectel
[2020-03-09_13:58:07:483]EC20F
[2020-03-09_13:58:07:483]Revision: EC20CEFAGR06A13M4G

[2020-03-09_13:58:07:483]OK
[2020-03-09_13:58:17:034]AT+CPIN?  //查询卡是否ready

[2020-03-09_13:58:17:037]+CPIN: READY

[2020-03-09_13:58:17:037]OK
[2020-03-09_13:58:21:169]AT+CIMI  //查询卡的IMSI号

[2020-03-09_13:58:21:169]460046670702242

[2020-03-09_13:58:21:169]OK
[2020-03-09_13:58:23:772]AT+QCCID  //查询卡CCID号

[2020-03-09_13:58:23:772]+QCCID: 89860446091891282242

[2020-03-09_13:58:23:772]OK
[2020-03-09_13:58:28:353]AT+CSQ   //查询RSSI

[2020-03-09_13:58:28:353]+CSQ: 22,99

[2020-03-09_13:58:28:353]OK
[2020-03-09_13:58:35:064]AT+CGREG?;+CREG?  //查询注册PS域与CS域

[2020-03-09_13:58:35:064]+CGREG: 0,1

[2020-03-09_13:58:35:064]+CREG: 0,1

[2020-03-09_13:58:35:064]OK
[2020-03-09_13:58:47:879]AT+QICSGP=1,1,"","","",1   //设置PDP上下文(APN 用户名 密码等参数)

[2020-03-09_13:58:47:888]OK
[2020-03-09_13:58:51:163]AT+QIACT=1  //建立激活场景

[2020-03-09_13:58:51:525]OK
[2020-03-09_13:58:52:906]AT+QIACT?

[2020-03-09_13:58:52:910]+QIACT: 1,1,1,"10.140.217.118"
[2020-03-09_14:12:19:189]AT+QMTCFG="aliauth",0,"a1HFMEXTnpR","ec20","nnUnbkpNcsi2qxSPu1T3646uQf9NB0UW"  //对接阿里云,设置阿里云参数

[2020-03-09_14:12:19:191]OK
[2020-03-09_14:12:21:229]AT+QMTOPEN=0,"218.11.0.64",1883  

[2020-03-09_14:12:21:229]OK
[2020-03-09_14:12:21:366]
[2020-03-09_14:12:21:366]+QMTOPEN: 0,0
[2020-03-09_14:12:22:642]AT+QMTCONN=0,"lei"

[2020-03-09_14:12:22:644]OK
[2020-03-09_14:12:22:824]
[2020-03-09_14:12:22:824]+QMTCONN: 0,0,0
[2020-03-09_14:12:27:315]AT+QMTSUB=0,1,"/a1HFMEXTnpR/ec20/user/get",0  //订阅主题

[2020-03-09_14:12:27:318]OK
[2020-03-09_14:12:27:438]
[2020-03-09_14:12:27:438]+QMTSUB: 0,1,0,1
[2020-03-09_14:18:20:530]AT+QMTPUBEX=0,0,0,0,"a1HFMEXTnpR/ec20/user/update",3  //上发数据

[2020-03-09_14:18:20:530]> 123
[2020-03-09_14:18:22:672]OK
[2020-03-09_14:18:23:025]
[2020-03-09_14:18:23:025]+QMTPUBEX: 0,0,0
[2020-03-09_14:20:19:207]AT+QMTDISC=0  //关闭链接

[2020-03-09_14:20:19:210]OK
[2020-03-09_14:20:19:490]
[2020-03-09_14:20:19:490]+QMTDISC: 0,0

4.2 TCP/IP指令开发

  对于EC800K模块内置MQTT协议,默认仅支持阿里云和华为云的物联网平台连接,若需使用其它云平台,则可通过TCP/IP协议进行配置,通过AT指令集完成物联网平台连接。

u8 EC800K_TCP_MQTT(u8 *ipaddr,u16 port)
{
	char buffer[100]={0};
	//1.测试指令
	printf("1.测试指令AT:\r\n");
	if(EC800K_SendCmd((u8 *)"AT\r\n","OK"))return 1;
	//2.查询版本
	printf("2.测试指令ATI:\r\n");
	if(EC800K_SendCmd((u8 *)"ATI\r\n","OK"))return 2;
	//3.查询卡是否准备好
	printf("3.查询卡是否准备好AT+CPIN?:\r\n");
	if(EC800K_SendCmd((u8 *)"AT+CPIN?\r\n","OK"))return 3;
	//4.查询RSSI:AT+CSQ
	printf("4.查询RSSI:AT+CSQ:\r\n");
	if(EC800K_SendCmd((u8 *)"AT+CSQ\r\n","OK"))return 4;
	//5.查询注册PS域与CS域:AT+CGREG?;+CREG?
	printf("5.查询注册PS域与CS域:AT+CGREG?;+CREG?\r\n");
	if(EC800K_SendCmd((u8 *)"AT+CGREG?;+CREG?\r\n","OK"))return 5;
	//6.断开socket服务
	printf("6.断开socket服务:AT+QICLOSE=1\r\n");
	if(EC800K_SendCmd((u8 *)"AT+QICLOSE=1\r\n","OK"))return 6;	
	//7.打开socket服务:AT+QIOPEN=1,0,"TCP","a1knXG89uwh.iot-as-mqtt.cn-shanghai.aliyuncs.com",1883,0,1
	snprintf(buffer,sizeof(buffer),"AT+QIOPEN=1,1,\"TCP\",\"%s\",%d,0,1\r\n",ipaddr,port);
	printf("7.打开socket服务:%s",buffer);
	if(EC800K_SendCmd((u8 *)buffer,"+QIOPEN: 1,0"))return 7;
	return 0;//初始化完成
}

  发送指令函数封装

/*
发送命令函数
形参:cmd --要发送的命令
			stat --返回结果
返回值:0--表示成功
				其它--表示错误
*/
u8 EC800K_SendCmd(u8 *cmd,const char *stat)
{
	u16 i,j;
	for(i=0;i<5;i++)
	{
		memset(usart2_rx_buff,0,sizeof(usart2_rx_buff));
		usart2_flag=0;
		usart2_cnt=0;
		//发送命令
		Usart2_SendStr(cmd);
		//等待返回的命令结果
		for(j=0;j<100;j++)
		{
			if(usart2_flag)
			{
				usart2_rx_buff[usart2_cnt]='\0';
				if(strstr((char*)usart2_rx_buff,stat))
				{
					usart2_flag=0;
					usart2_cnt=0;
					return 0;
				}
				else
				{
					usart2_flag=0;
					usart2_cnt=0;
				}
			}
			Delay_Ms(5);
		}
	}
	return 1;//发送命令失败
}
### STM32 使用 4G 模块配合 HAL 库的相关资料及示例代码 #### 一、硬件与软件环境配置 在开发基于 STM32EC800K 的物联网设备时,需确保硬件和软件环境已正确设置。以下是具体说明: 1. **硬件连接** STM32 微控制器通过 UART 接口与 EC800K 进行通信[^1]。通常情况下,UART 的 TX/RX 引脚分别连接到模块的 RX/TX 引脚。此外,还需注意电源电压匹配以及可能需要的电平转换电路。 2. **软件工具链** 开发过程中推荐使用 STM32CubeMX 工具生成初始化代码框架,并利用 HAL 库完成底层驱动开发[^2]。此方式不仅简化了外设配置流程,还提高了程序的可移植性和维护性。 #### 二、HAL库基础配置 借助 HAL 库实现对串口的操作是整个项目的重点之一。下面列出了几个关键步骤及其对应函数调用: 1. 初始化 USART 外设实例化句柄结构体 `USART_HandleTypeDef` 并填写必要参数如波特率(BaudRate),字长(WordLength),停止位数(StopBits)等属性值;随后调用 `HAL_UART_Init()` 完成实际初始化过程。 ```c huart.Instance = USARTx; huart.Init.BaudRate = 9600; // 设置合适的波特率 huart.Init.WordLength = UART_WORDLENGTH_8B; huart.Init.StopBits = UART_STOPBITS_1; huart.Init.Parity = UART_PARITY_NONE; huart.Init.Mode = UART_MODE_TX_RX; huart.Init.HwFlowCtl = UART_HWCONTROL_NONE; if (HAL_UART_Init(&huart) != HAL_OK){ Error_Handler(); /* 错误处理 */ } ``` 2. 数据发送接收机制设计两种常见模式分别为中断驱动型或者轮询查询型。对于实时性强的应用场景建议优先考虑前者以减少CPU占用时间比例从而提升整体性能表现水平。 - 中断方式下注册回调服务例程以便当接收到新字符到来信号触发事件发生之后立即响应并读取缓冲区中的内容; ```c void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle){ uint8_t ch; if(UartHandle->Instance==USARTx){ ch=RxBuffer[0]; // 假定每次只收单个字节 // 对ch做进一步解析判断逻辑... HAL_UART_Receive_IT(UartHandle,(uint8_t*)&RxBuffer,1); // 继续等待下次输入 }else{ // 其它情况下的默认行为定义 } } ``` - 轮询检测则相对简单直接不断循环检查状态标志直到满足条件为止再提取有效载荷部分信息出来加以分析运用即可。 ```c while(HAL_UART_GetState(&huart)!=HAL_UART_STATE_READY); HAL_UART_Receive(&huart,RxBuf,sizeof(RxBuf),TimeoutValue); ProcessReceivedData(RxBuf); ``` #### 三、AT命令交互编程实践案例分享 针对特定型号即EC系列而言其内部集成了完整的TCP/IP协议栈因此我们只需要按照官方文档指导手册里列举出来的标准指令序列向目标对象发出请求就可以轻松达成诸如拨号上网建立连接之类的高级功能目的啦! 例如要激活PDP上下文关联业务的话可以用如下所示的一段伪码表示形式呈现出来给大家参考学习一下哦~ ```plaintext AT+CSTT="apn","username","password"\r\n OK\r\n AT+CIICR\r\n OK\r\n AT+CIFSR\r\n <local IP address>\r\n ``` 以上每条语句之间都需要适当延时间隔以免过快造成对方来不及回应而导致失败现象出现哟~记得合理安排好各个阶段的时间窗口大小哈😊 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT_阿水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值