STM32 + 移远EC800 4G通信模块数传
创作时间:
作者:
@小白创作中心
STM32 + 移远EC800 4G通信模块数传
引用
CSDN
1.
https://blog.csdn.net/GC_June07/article/details/142140936
本文详细介绍了如何使用STM32微控制器与移远EC800 4G通信模块进行数据传输。文章不仅阐述了EC800M-CN模块的主要特点,还提供了完整的串口配置、模块初始化、TCP连接建立以及数据发送的代码示例。对于从事嵌入式开发和物联网应用的工程师具有较高的参考价值。
4G模块简述
EC800M-CN 是移远通信(Quectel)推出的一款高性能、超小尺寸的 LTE Cat 1 无线通信模块,专为 M2M(机器对机器)和 IoT(物联网)应用设计。它具有以下主要特点:
通信速率:
最大下行速率:10 Mbps
最大上行速率:5 Mbps
封装与设计:
超小尺寸:紧凑的设计使其适用于空间有限的应用。
镭雕工艺:提供更高的外观质量和耐用性。镭雕工艺有助于改善模块的散热性能,且信息不易被抹除,适合自动化需求。
兼容性:
封装兼容性:EC800M-CN 在封装上兼容多个系列模块,包括 LTE Standard EC800E-CN、EC800G-CN、EC800N-CN、EC800K-CN 和 EG800K 系列,这使得它在多种设计中具有很高的灵活性。
网络协议和接口:
内置网络协议:支持多种工业标准的网络协议。
接口:集成多个工业标准接口,确保与不同系统的兼容性。
驱动支持:提供多种操作系统的 USB 虚拟串口驱动,包括 Windows(7/8/8.1/10/11)、Linux 和 Android,扩展了应用范围。
应用领域:
M2M 和 IoT:广泛应用于如 OTT(Over-the-Top)、跟踪器(Tracker)、POS 终端、数据卡、智能安全、工业级 PDA 等领域。
串口配置(stm32f103c8t6 UART2)
//初始化IO 串2
//bound:波特率
void uart2_init(u32 bound)
{
//GPIO端口设置
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能,GPIOA时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);//USART2
USART_DeInit(USART2); //复位串口2
//USART2_TX PA.2
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //PA.2
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA2
//USART2_RX PA.3
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA3
//Usart1 NVIC 配置
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0 ;//抢占优先级0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //子优先级3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器
//USART 初始化设置
USART_InitStructure.USART_BaudRate = bound;//115200
USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式
USART_Init(USART2, &USART_InitStructure); //初始化串口
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//开启中断
USART_Cmd(USART2, ENABLE); //使能串口
}
//串口2接收函数
void USART2_IRQHandler(void)
{
if(USART_GetITStatus(USART2, USART_IT_RXNE)==SET)
{
ec200x_receive_process_event(USART_ReceiveData(USART2));
USART_ClearITPendingBit(USART2,USART_IT_RXNE);
}
if(USART_GetFlagStatus(USART2,USART_FLAG_ORE)==SET)
{
ec200x_receive_process_event(USART_ReceiveData(USART2));
USART_ClearFlag(USART2,USART_FLAG_ORE);
}
}
4G模块
4G模块初始化代码
/*****************************************************
下面就是需要修改的地方,修改服务器的IP地址和端口号
*****************************************************/
#define SERVERIP "IP地址"
#define SERVERPORT 端口号
/*****************************************************
初始化模块 和单片机连接,获取卡号和信号质量
*****************************************************/
void CSTX_4G_Init(void)
{
//打印初始化信息
printf("start init EC800X\r\n");
//发第一个命令ATE1
Uart2_SendStr("ATE1\r\n");
delay_ms(300);
printf(buf_uart2.buf); //打印串口收到的信息
strx=strstr((const char*)buf_uart2.buf,(const char*)"OK");//返回OK
Clear_Buffer();
while(strx==NULL)
{
printf("单片机正在连接模块......\r\n");
Clear_Buffer();
Uart2_SendStr("ATE1\r\n");
delay_ms(300);
strx=strstr((const char*)buf_uart2.buf,(const char*)"OK");//返回OK
}
printf("****单片机和模块连接成功*****\r\n");
Uart2_SendStr("ATI\r\n");//获取模块的版本
delay_ms(300);
Clear_Buffer();
Uart2_SendStr("AT+CIMI\r\n");//获取卡号,类似是否存在卡的意思,比较重要。
delay_ms(300);
strx=strstr((const char*)buf_uart2.buf,(const char*)"460");//返460,表明识别到卡了
while(strx==NULL)
{
Clear_Buffer();
Uart2_SendStr("AT+CIMI\r\n");//获取卡号,类似是否存在卡的意思,比较重要。
delay_ms(300);
strx=strstr((const char*)buf_uart2.buf,(const char*)"460");//返回OK,说明卡是存在的
}
printf("我的卡号是 : %s \r\n",buf_uart2.buf+8);
Clear_Buffer();
Uart2_SendStr("AT+CGATT?\r\n");//查询激活状态
delay_ms(300);
strx=strstr((const char*)buf_uart2.buf,(const char*)"+CGATT: 1");//返1
Clear_Buffer();
while(strx==NULL)
{
Clear_Buffer();
Uart2_SendStr("AT+CGATT?\r\n");//获取激活状态
delay_ms(300);
strx=strstr((const char*)buf_uart2.buf,(const char*)"+CGATT: 1");//返回1,表明注网成功
}
Clear_Buffer();
Uart2_SendStr("AT+CSQ\r\n");//查看获取CSQ值
delay_ms(300);
strx=strstr((const char*)buf_uart2.buf,(const char*)"+CSQ:");//返回CSQ
if(strx)
{
printf("信号质量是:%s 注意:信号最大值是31 \r\n",buf_uart2.buf+14);
}
IWDG_Feed();//喂狗
}
建立TCP链接
void CSTX_4G_CreateTCPSokcet(void)//创建sokcet
{
memset(ATSTR,0,BUFLEN);
sprintf(ATSTR,"AT+QIOPEN=1,0,\"TCP\",\"%s\",%d,0,1\r\n",SERVERIP,SERVERPORT);
Uart2_SendStr(ATSTR);//创建连接TCP,输入IP以及服务器端口号码
delay_ms(300);
strx=strstr((const char*)buf_uart2.buf,(const char*)"+QIOPEN: 0,0");//检查是否登陆成功
errcount=0;
while(strx==NULL)
{
IWDG_Feed();//喂狗
errcount++;
strx=strstr((const char*)buf_uart2.buf,(const char*)"+QIOPEN: 0,0");//检查是否登陆成功
delay_ms(100);
if(errcount>100) //超时退出死循环 表示服务器连接失败
{
errcount = 0;
break;
}
}
Clear_Buffer();
}
4G模块发送数据
void CSTX_4G_Senddata(uint8_t *len, uint8_t *data) {
memset(ATSTR, 0, BUFLEN);
sprintf(ATSTR, "AT+QISEND=0,%u\r\n", *len);
Uart2_SendStr(ATSTR); // 发送 AT 命令
delay_ms(300); // 等待模块反馈 >
// 等待模块反馈 >
strx = strstr((const char*)buf_uart2.buf, ">");
while (strx == NULL) {
errcount++;
strx = strstr((const char*)buf_uart2.buf, ">");
if (errcount > 100) { // 防止死循环
errcount = 0;
break;
}
}
Uart2_SendData(data, *len); // 发送真正的二进制数据
delay_ms(300); // 等待发送完成
// 检查是否发送成功
strx = strstr((const char*)buf_uart2.buf, "SEND OK");
errcount = 0;
while (strx == NULL) {
errcount++;
strx = strstr((const char*)buf_uart2.buf, "SEND OK");
delay_ms(100);
if (errcount > 100) { // 超时退出死循环
errcount = 0;
break;
}
}
Clear_Buffer(); // 清空缓冲区
}
利用花生壳透传
- 利用花生壳透传
- 开启网络助手
- 打开串口工具
结果展示
通过4G透传指定的IP和端口号发送报文数据。整体来说不复杂,但是需要点时间调试。完整工程源码可丝。
热门推荐
整形医院皮试需要注意哪些事项?
艾滋病人为何一定要进行皮试?了解其重要性
以案说法:近亲结婚不可“娶”,“亲上加亲”是误区
苹果电脑怎么取消弹出式窗口被拦截
死亡证明有什么用处要不要去拿
篮球好坏有什么标准
货币资金占流动资产比例怎么算
揭秘虎鲸喷水孔:水柱从何而来?
虎鲸是用哪里喷出水柱的?
每5分钟就能诞生一辆重型卡车,解码新型工业化活动在此见证“重汽速度”
私募股权基金收益一般多少:法律视角下的收益分析与风险提示
反身性原理:你相信什么,你就成为了什么
如何学武当太极拳的三个基本训练方法
γ-谷氨酰转肽酶高说明什么问题
谷氨酰转肽酶600U/L:如何恢复与肝脏健康
狗狗吃多了有什么表现?如何正确判断和处理?
市政污水管道闭水试验操作指南
常吃植物性食物有哪些好处
型男必备单品:经典的古巴领衬衫,复古文艺还百搭!
Redis哨兵模式详解:原理、配置与故障转移实战
Three.js纹理映射无缩放解决方案
脑梗是拖出来的?提醒:3个表现或是脑梗的前兆,不要再拖着了
人工智能如何建模:从问题定义到模型部署的完整指南
MBTI与荣格八维:功能排序、作用及对认识自我和他人的意义
品质管理流程步骤和细节,品质方针、目标、培训实施方法
节地葬有哪些具体的形式?每种形式的特点是什么?
高效背书方法:六种科学记忆法助你事半功倍
煎蛋的热量高不高?一文读懂煎蛋的热量真相
如何从中医的角度养肺?古法养今肺:中医智慧助力现代呼吸养生!
江汉大学解明教授当选俄罗斯工程院外籍院士