STM32 4G学习

这篇具有很好参考价值的文章主要介绍了STM32 4G学习。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

硬件连接

ATK-IDM750C模块可直接与正点原子 MiniSTM32F103开发板板载的ATK模块接口(ATK-MODULE)进行连接。
STM32 4G学习,stm32,stm32,学习,嵌入式硬件
STM32 4G学习,stm32,stm32,学习,嵌入式硬件

功能说明

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的驱动文件。
STM32 4G学习,stm32,stm32,学习,嵌入式硬件
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 中的内容。文章来源地址https://www.toymoban.com/news/detail-630939.html

到了这里,关于STM32 4G学习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【嵌入式学习笔记】嵌入式基础9——STM32启动过程

    程序段交叉引用关系(Section Cross References):描述各文件之间函数调用关系 删除映像未使用的程序段(Removing Unused input sections from the image):描述工程中未用到被删除的冗余程序段(函数/数据) 映像符号表(Image Symbol Table):描述各符号(程序段/数据)在存储器中的地址、类

    2024年02月15日
    浏览(81)
  • STM32的时钟系统(嵌入式学习)

    时钟是指用于计量和同步时间的装置或系统。时钟是嵌入式系统的脉搏,处理器内核在时钟驱动下完成指令执行,状态变换等动作,外设部件在时钟的驱动下完成各种工作,例如:串口数据的发送、AD转换、定时器计数等。因此时钟对于计算机系统是至关重要的,通常时钟系

    2024年02月16日
    浏览(47)
  • STM32串口通信详解(嵌入式学习)

    时钟信号在电子领域中是指用于同步和定时电路操作的周期性信号。它在数字系统和通信系统中起着至关重要的作用,用于协调各个组件之间的数据传输和操作。 时钟信号有以下几个重要的方面: 频率:时钟信号的频率是指单位时间内信号周期的数量。它通常以赫兹(Hz)为

    2024年02月09日
    浏览(67)
  • STM32的中断系统详解(嵌入式学习)

    中断是处理器中的一种机制,用于响应和处理突发事件或紧急事件。当发生中断时,当前正在执行的程序会被暂时中止,处理器会跳转到中断处理程序(也称为中断服务例程),对中断事件进行处理。处理完中断后,处理器再返回到被中断的程序继续执行。 中断可以分为内部

    2024年02月12日
    浏览(69)
  • 嵌入式学习笔记——STM32的时钟树

    在之前的所有代码编程的过程中,似乎每次都绕不开一个叫做时钟使能的东西,当时我们是在数据手册上直接看其挂接在那条时钟线上的,那么STM32内部的时钟到底是怎么一个构型呢,本文来对此做一个介绍。 老规矩,一个新的名词出现,首先需要搞清楚它是个啥,下图中对

    2024年02月02日
    浏览(53)
  • 嵌入式学习stm32基础知识(期末复习)

    1. 计算机的体系架构 冯诺依曼架构 ​ 在完整的计算机系统中,包含五个部分,储存器,运算器,控制器输入设备和输出设备。 改进的冯诺依曼架构 改进型架构的各模块的高速数据交换中心利用储存器这个大容量,极大的提高了效率。 哈佛架构 ​ 哈佛结构数据空间和地址

    2024年02月07日
    浏览(65)
  • STM32的定时器详解(嵌入式学习)

    想要了解STM32的时钟系统 点击这里跳转——》STM32的时钟系统(嵌入式学习) 建议先看看时钟树如何配置 点击这里跳转——》STM32的时钟树配置(嵌入式学习) 跳转——》STM32的时钟基础详解(嵌入式学习) 跳跳转——》STM32的时钟源详解(嵌入式学习) SysTick又称滴答定时

    2024年02月13日
    浏览(67)
  • STM32&ARM体系结构(嵌入式学习)

    STM32是意法半导体(STMicroelectronics)公司推出的一系列32位ARM Cortex-M微控制器(MCU)产品系列。它们基于ARM架构,并且具有广泛的应用领域,包括工业自动化、消费电子、医疗设备、通信、汽车电子等。 STM32系列提供了多个产品系列,以满足不同应用需求和性能要求。其中常见

    2024年02月08日
    浏览(62)
  • STM32开发环境搭建&工程创建(嵌入式学习)

    简介 STM32CubeMX是STMicroelectronics公司提供的一款集成开发环境(IDE)工具,用于快速配置和初始化STM32微控制器系列的软件工程。它提供了图形化界面和交互式工具,使开发者能够轻松地生成STM32微控制器的初始化代码和配置文件。 STM32CubeMX具有以下主要功能和特点: 微控制器

    2024年02月11日
    浏览(66)
  • 嵌入式学习笔记——STM32的USART通信概述

    上两篇文章中,已经实现了GPIO的通用输出以及通用输出模式,从本文开始,笔者将开始有关GPIO的复用功能的介绍,首先是最常用复用功能——串口,本文主要是介绍一些关于通信以及串口的基本概念。 通信协议:通信双方进行信息交换(接收或发送)要满足的规则,而这个规

    2023年04月08日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包