当前位置: 首页 > news >正文

STM32 4G学习

硬件连接

ATK-IDM750C模块可直接与正点原子 MiniSTM32F103开发板板载的ATK模块接口(ATK-MODULE)进行连接。
在这里插入图片描述
在这里插入图片描述

功能说明

ATK-IDM750C是正点原子(ALIENTEK)团队开发的一款高性能4G Cat1 DTU产品,支持移动4G、联通4G和电信4G手机卡。
它以高速率、低延迟和无线数传作为核心功能,可快速解决应用场景下的无线数传方案。

它支持TCP、UDP、HTTP、MQTT、DNS、RNDIS、NTP协议,支持连接多种云服务器(如:原子云、阿里云、百度云和OneNET)、支持TCP/UDP/HTTP/MQTT数据透传,支持USB无线网卡,持自动定时采集任务、支持基站定位、支持自定义心跳包和注册包数据,支持上位机/AT指令/短信/透传指令配置参数,支持RS232和RS485两种串行接口,它可以广泛用于无线数传、电力行业、工业控制、水利行业、环保行业、农业应用、集抄系统和智能家居等诸多领域。

源码解读

打开实验的工程文件夹,能够在/Drivers/BSP目录下看到ATK_IDM750C子文件夹,该文件夹中就包含了ATK-IDM750C的驱动文件。
在这里插入图片描述
uart的文件是开发板与ATK-IDM750C通讯使用的UART驱动文件。

atk_idm750c.c 和 atk_idm750c.h 是 ATK-IDM750C 的驱动文件,包含了ATK-IDM750C的初始化。

函数ATK_IDM750C_init(),用于初始化ATK-IDM750C模块

//模块初始化
//baudtrate:ATK-IDM750C UART通讯波特率
uint8_t atk_idm750c_init(uint32_t baudrate)
{atk_idm750c_uart_init(baudrate);atk_idm750c_dtu_enter_configmode();if(atk_idm750c_at_test() != ATK_IDM750C_EOK){return ATK_IDM750C_ERROR;}return ATK_IDM750C_EOK;
}

通过UART与ATK_IDM750C模块进行通信。由于这个模块仅用到TX与RX两个引脚用作通讯,因此模块不需要再配置其它引脚的高低电平,只需要配置串口波特率的数值。

atk_idm750c_dtu_enter_configmode();这个函数的作用在于模块进行初始化的同时,发送相应的AT指令,让模块进入配置模式。

最终完成模块的初始化,初始化完成后再进行相应的参数就可以进入网络透传模式,实现与原子云互发消息的功能。发送的数据与接收的数据就可以通过原子云云端与使用者的上位机进行查看。

//发送AT指令
//cmd:待发送的AT指令,ack:等待的响应,timeout:等待超时时间
uint8_t atk_idm750c_send_cmd_to_dtu(char *cmd,char *ack,uint32_t timeout){uint8_t *ret = NULL;if(cmd != NULL){atck_idm750c_uart_rx_restart();atk_idm750c_uart_printf("%s\r\n", cmd);}if ((ack == NULL) || (timeout == 0)){return ATK_IDM750C_EOK;}else{while(timeout > 0){ret = atk_idm750c_uart_rx_get_frame();if (ret != NULL){if (strstr((const char *)ret, ack) != NULL){return ATK_IDM750C_EOK;}else{atk_idm750c_uart_rx_restart();}}timeout--;delay_ms(1);}return ATK_IDM750C_ETIMEOUT;}
}

这个函数为AT指令发送处理,函数中通过串口获取模块接收到的一帧数据,cmd作为AT指令的一个载体,函数对cmd进行判断,若cmd不为空,则串口重新接收数据,并通过串口打印输出 cmd,此时 cmd 里是已经存有了相应的AT 指令。

实验测试代码

//用于与模块建立通讯,并且通过执行一些AT指令对模块进行相应的配置。
void demo_run(void)
{uint8_t ret;uint8_t *buf;uint8_t key;//初始化模块ret = atk_idm750c_init(115200);if(ret != 0){printf("ATK-IDM750C init failed!\r\n");while (1){LED0_TOGGLE();delay_ms(200);}}printf("Wait for Cat1 DTU to start, wait 10s....\r\n");//AT指令测试ret = atk_idm750c_at_test();//工作模式设置ret += atk_idm750c_query_workmode(ATK_IDM750C_WORKMODE_NET);/* ATK-IDM750C 第一路连接使能状态:ON */ret += atk_idm750c_link1en(ATK_IDM750C_LINK1EN_ON);/* ATK-IDM750C 第一路连接参数 */ret +=atk_idm750c_link1(ATK_IDM750C_LINK1MODE_TCP,DEMO_DTU_TCP_SERVER_DOMAIN_NAME,DEMO_DTU_TCP_SERVER_PORT_NUMBER);/* ATK-IDM750C 第一路连接模式:LONG */ret += atk_idm750c_link1md(ATK_IDM750C_LINK1MD_LONG);/* ATK-IDM750C 第一路超时重连时间 */ret +=atk_idm750c_link1_timeout();/* ATK-IDM750C 第二路连接使能状态:OFF */ret += atk_idm750c_link2en(ATK_IDM750C_LINK2EN_OFF);/* ATK-IDM750C 第三路连接使能状态:OFF */ret += atk_idm750c_link3en(ATK_IDM750C_LINK3EN_OFF);/* ATK-IDM750C 第四路连接使能状态:OFF */ret += atk_idm750c_link4en(ATK_IDM750C_LINK4EN_OFF);/* ATK-IDM750C 启用原子云 */ret += atk_idm750c_set_yuanziyun(ATK_IDM750C_SET_YUANZIYUN_ON);/* ATK-IDM750C 原子云设备编号 */ret += atk_idm750c_device_num(DEMO_DTU_TCP_YUANZI_DEVICE_NUMEBER);/* ATK-IDM750C 原子云设备密码 */ret += atk_idm750c_device_password(DEMO_DTU_TCP_YUANZI_DEVICE_PASSWORD);/* ATK-IDM750C 开启心跳包 */ret += atk_idm750c_heartbeat_package(ATK_IDM750C_HRTEN_ON);/* ATK-IDM750C 心跳包数据 */ret += atk_idm750c_heartbeat_package_data();/* ATK-IDM750C 心跳包时间间隔 */ret += atk_idm750c_heartbeat_package_interval();/* ATK-IDM750C 注册包默认关闭 */ret += atk_idm750c_registration_package(ATK_IDM750C_SET_REGEN_OFF);/* ATK-IDM750C 注册包数据 */ret += atk_idm750c_registration_package_data();/* ATK-IDM750C 注册包发送方式 */ret += atk_idm750c_registration_package_send_method();/* ATK-IDM750C 注册包数据类型 */ret += atk_idm750c_registration_package_data_type();/* ATK-IDM750C 进入透传状态 */ret += atk_idm750c_enter_transfermode();if(ret!=0){while (1){LED0_TOGGLE();delay_ms(200);}}atk_idm750c_uart_rx_restart();while (1){key = key_scan(0);if(key == KEY0_PRES){/* 如果服务器格式对数据有要求,请修改对应的数据格式,这里只限于例程测试使用 */atk_idm750c_uart_printf("%s\r\n", DEMO_DTU_TEST_DATA);}buf = atk_idm750c_uart_rx_get_frame();if (buf != NULL){printf("%s", buf);atk_idm750c_uart_rx_restart();}LED1_TOGGLE();delay_ms(10);}
}

循环里设置了一个按键操作,发送信息至云端,同时,若云端向单片机发送信息,会通过函数atk_idm750c_uart_rx_get_frame()接收信息,并将信息通过buf进行存储,此时判断 buf 是否为空,若不为空则通过串口助手打印储存在 buf 中的内容。

相关文章:

STM32 4G学习

硬件连接 ATK-IDM750C模块可直接与正点原子 MiniSTM32F103开发板板载的ATK模块接口(ATK-MODULE)进行连接。 功能说明 ATK-IDM750C是正点原子(ALIENTEK)团队开发的一款高性能4G Cat1 DTU产品,支持移动4G、联通4G和…...

Golang 中实现实时聊天通讯

客户端代码 package mainimport ("fmt""log""net/url""os""os/signal""time""github.com/gorilla/websocket" )func main() {interrupt : make(chan os.Signal, 1)signal.Notify(interrupt, os.Interr…...

前端面试的性能优化部分(5)每天10个小知识点

目录 系列文章目录前端面试的性能优化部分(1)每天10个小知识点前端面试的性能优化部分(2)每天10个小知识点前端面试的性能优化部分(3)每天10个小知识点前端面试的性能优化部分(4)每天…...

【链表OJ 1】移除链表元素val

大家好,欢迎来到我的博客,此题是关于链表oj的第一题,此后还会陆续更新博客,如有错误,欢迎大家指正。 来源:https://leetcode.cn/problems/remove-linked-list-elements/description/ 题目: 方法一:定义prev和cur指针…...

复原 IP 地址——力扣93

文章目录 题目描述回溯题目描述 回溯 class Solution{public:static constexpr int seg_count=4<...

OSPF综合实验

实验题目如下&#xff1a; 实验拓扑如下&#xff1a; 实验要求如下&#xff1a; 【1】R4为ISP&#xff0c;其上只能配置IP地址: R4与其他所有直连设备间使用公有 【2】R3---R5/6/7为MGRE环境&#xff0c;R3为中心站点 【3】整个OSPF环境IP地址为172.16.0.0/16 【4】所有设备…...

安卓4G核心板开发板_MTK6785/MT6785(Helio G95)安卓手机主板方案

联发科MTK6785&#xff08;Helio G95&#xff09;安卓核心板采用八核 CPU 具有两个强大的 Arm Cortex-A76 处理器内核&#xff0c;主频高达 2.05GHz&#xff0c;外加六个 Cortex-A55 高效处理器。其强大的图形性能由 Arm Mali-G76 MC4 提供&#xff0c;速度可提升至 900MHz 。 …...

Linux 匿名页的生命周期

目录 匿名页的生成 匿名页生成时的状态 do_anonymous_page缺页中断源码 从匿名页加入Inactive lru引出 一个非常重要内核patch 匿名页何时回收 本文以Linux5.9源码讲述 匿名页的生成 用户空间malloc/mmap(非映射文件时&#xff09;来分配内存&#xff0c;在内核空间发生…...

设计模式概述与UML图

文章目录 一、设计模式概述1. 软件设计模式的产生背景2. 软件设计模式的概念3. 学习设计模式的必要性4. 设计模式分类&#xff08;1&#xff09;创建型模式&#xff08;2&#xff09;结构型模式&#xff08;3&#xff09;行为型模式 二、UML图1. 类图概述2. 类图作用3. 类图表示…...

使用Vscode编辑keil工程

一、需要安装的插件 1. Keil Assistant 2. C/C 3. 中文配置&#xff1a; 二、插件配置 1. Keil Assistant 添加Keil的安装路径 接下来就可以使用vscode编辑Keil的工程了&#xff0c;调试编译和下载程序需要返回到Keil中进行操作。 三、Vscode常用快捷键 可以自定义进行配置…...

编译工具:CMake(一) | 简介与安装

编译工具&#xff1a;CMake&#xff08;一&#xff09; | 简介与安装 1. CMake简介1.1CMake的特点 2. CMake 安装 这个是CMake的图标 1. CMake简介 cmake 是 kitware 公司以及一些开源开发者在开发几个工具套件(VTK)的过程中衍生品&#xff0c;最终形成体系&#xff0c;成为一…...

深度学习(34)—— StarGAN(1)

深度学习&#xff08;34&#xff09;—— StarGAN&#xff08;1&#xff09; 文章目录 深度学习&#xff08;34&#xff09;—— StarGAN&#xff08;1&#xff09;1. 背景2. 基本思路3. 整体流程4. StarGAN v2(1) 网络结构(2) mapping network(3) style encoder(4)Loss 和之前…...

ES6系列之let、const、箭头函数使用的坑

变量提升块级作用域的重要性箭头函数this的指向rest参数和arguments 1.ECMAScript与Js的关系 2.Babel转码器 Babel是一个广泛使用的ES6转码器&#xff0c;可以将ES6代码转为ES5代码&#xff0c;从而在老版本的浏览器执行。这意味着&#xff0c;你可以用ES6的方式编写程序&…...

4.DNS和负载均衡

文章目录 coreDNS概念部署croeDNS测试 kubernetes多master集群结构master节点部署 负载均衡配置部署nginx做四层反向代理安装高可用 keepalivednginx监控脚本修改k8s中组件的配置文件 coreDNS 概念 coreDNS是kubernetes的默认DNS实现。可以为集群中的service资源创建一个资源名…...

【JavaEE进阶】Spring核心与设计思想

文章目录 一. Spring框架概述1. 什么是Spring框架2. 为什么要学习框架?3. Spring框架学习的难点 二. Spring 核心与设计思想1. 什么是容器?2. 什么是IoC?3. Spring是IoC容器4. DI&#xff08;依赖注入&#xff09;5. DL&#xff08;依赖查找&#xff09; 一. Spring框架概述…...

实习周记第三周

第二周总结 第二周主要是做了一些PC端细节内容。大的地方改的不多&#xff0c;但是小的细节蛮多。 值得一提的是&#xff0c;第二周做的微信小程序&#xff0c;改了很多逻辑。改逻辑需要与后端进行联调&#xff0c;收获很大&#xff0c;思路也愈发清楚。 记录做了什么是好习…...

11. 使用tomcat中碰到的一些问题

文章目录 问题一&#xff1a;Tomcat的startup.bat启动后出现乱码问题二&#xff1a;一闪而退之端口占用问题三&#xff1a;非端口问题的一闪而退问题四&#xff1a;服务器的乱码和跨域问题问题五: 在tomcat\webapps\下创建文件夹为什么tomcat重启就会丢失问题六&#xff1a;Tom…...

C++解决TCP粘包

目录 TCP粘包问题TCP客户端TCP服务端源码测试 TCP粘包问题 TCP是面向连接的&#xff0c;面向流的可靠性传输。TCP会将多个间隔较小且数据量小的数据&#xff0c;合并成一个大的数据块&#xff0c;然后进行封包发送&#xff0c;这样一个数据包里就可能含有多个消息的数据&#…...

最长快乐前缀——力扣1392

文章目录 题目描述KMP题目描述 KMP class Solution {public:string longestPrefix(string s) {int n = s...

使用java.util.List的containsAll()方法可能导致的问题

今天在偶然之间发现了一个bug&#xff0c;原因居然是使用了containsAll()方法&#xff0c;这个问题很简单&#xff0c;看以下代码就能发现很大的问题。 package collection;import java.util.ArrayList; import java.util.List;/*** author heyunlin* version 1.0*/ public cl…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...