自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(100)
  • 问答 (1)
  • 收藏
  • 关注

原创 stm32通过esp8266连接阿里云平台代码讲解

首先,按照一定的规则,获取连接阿里服务器所需要的ClientID(客户端D)、Username(用户名)、Passward(密码),ServerIP(域名),ServerPort(端口号)开始连接服务器==0上面的代码就实现了esp8266连接上了阿里云TCP服务器,并且进入透传模式。接着我们开始发送连接服务器报文CONNECT了,CONNECT格式为:固定报头+可变报头+有效载荷。

2024-05-27 15:49:34 846 2

原创 MQTT报文

阿里云平台*.iot-as-mqtt.cn-shanghai.aliyuncs.com:1883 (*表示自己账号的ProductKey )客户端ID(设备ID):设备名称 )用户名 (产品ID):设备名称 #productKey)密码: 用DeviceSecret作为秘钥对clientIddeviceNameproductKey#进行hmacsha1加密后的结果 (*设备名称 #productKey)

2024-05-21 21:17:37 977

原创 ESP8266 作为客户端 透传的实验

1.配置WIFI模式AT+CWMODE=1 配置成Station模式2.完成配置后重启AT+RST 重启3.连接路由器AT+CWJAP=“777”,“123456lzg” 连接wifi4.配置单路连接模式5.开启透传模式6.建立TCP连接AT+CIPSTART=“TCP”,“172.20.10.10”,8081 //注意服务器和esp8266的IP地址要同一个网段7.进入透传模式AT+CIPSEND。

2024-05-20 17:14:48 374

原创 STM32flash主存储器部分——存储数据讲解

首先定义一下flash存储首地址,大小。SRAM存储地址,大小。如下图可以看出,flash存储首地址为0x80000000,大小为0x7000。SRAM存储首地址为0x20000000,大小为0x5000。这是根据我们的需求来定义的。

2024-04-18 16:59:23 554

原创 内存管理(SRAM)

内存管理实际上就是指管理SRAM.内存管理,是指软件运行时对计算机内存资源的分配和使用的技术。其最主要的目的是如何高效、快速的分配,并且在适当的时候释放和回收内存资源。内存管理的实现方法有很多种,其实最终都是要实现两个函数:malloc 和 free。malloc 函数用来内存申请,free 函数用于内存释放。本章,我们介绍一种比较简单的办法来实现:分块式内存管理。下面我们介绍一下该方法的实现原理,如下图 所示:从上图可以看出,分块式内存管理由内存池和内存管理表两部分组成。

2024-04-07 17:43:37 988 1

原创 IAP在编程升级

以STM32F103ZET6为例讲解,让APP程序加载在FLASH里运行,在SRAM运行的先不讲解。

2023-12-25 17:39:33 226

原创 STM32启动解析

STM32可以通过BOOT引脚的配置,来选择不同的启动模式------对应不同的下载方式。仿真器下载—— 内部FLASH的启动方式串口下载 —— 系统存储器的启动方式内部SRAM一般不用,不讲。

2023-12-25 11:55:39 718

原创 内部FLASH模拟EPPROM

不同型号的 STM32,其 FLASH 容量也有所不同,最小的只有 16K 字节,最大的则达到了1024K 字节。我们的精英 STM32 开发板选择的是 STM32F103ZET6 的 FLASH 容量为 512K 字节,属于大容量产品,大容量产品的闪存模块组织如表 43.1.1 所示:主存储器,该部分用来存放代码和数据常数(如 const 类型的数据)。平时,我们烧写的代码就存放在主存储器部分,

2023-12-23 16:38:55 190

原创 systick定时器

用到的相关函数如下:void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)//设置时钟源uint32_t SysTick_Config(uint32_t ticks) // 设置中断时间。

2023-12-05 23:45:26 147

原创 驱动程序编进内核或则编成模块

驱动程序可以编进内核或则编成模块。

2023-11-14 12:21:18 136

原创 驱动基石之_tasklet中断下半部_工作队列_中断线程化处理

linux的中断分为两个部分:1.中断上半部:在中断上半部期间,不允许被其他中断打断,直到中断上半部的服务函数执行完。2.中断下半部:中断下半部,在执行中断下半部服务函数的期间,能被其它更高优先级别的中断打断。

2023-11-10 17:09:15 142

原创 驱动基石之异步通知

重点从②开始:② APP 给 SIGIO 这个信号注册信号处理函数 func,以后 APP 收到 SIGIO信号时,这个函数会被自动调用;③ 把 APP 的 PID(进程 ID)告诉驱动程序,这个调用不涉及驱动程序,在内核的文件系统层次记录 PID;④ 读取驱动程序文件 Flag;⑤ 设置 Flag 里面的 FASYNC 位为 1:当 FASYNC 位发生变化时,会导致驱动程序的 fasync 被调用;

2023-11-08 15:42:07 83

原创 驱动基石之poll机制

通常我们阻塞读取按键值时,是这样操作的:在驱动程序里创建中断,按下按键时,上升沿和下降沿会触发中断,在drv_read里阻塞程序,直到有按键按下时,才读取。但是这种做法一直阻塞,让后面的程序都无法运行了,现在引入poll机制,当阻塞超过定时时间时,就退出阻塞。使用poll机制的话,驱动程序要这样写:让drv_open线程挂起,直到有按键按下,或则超时时才从内核态返回到应用态。应用层要这样写:int ret;

2023-11-07 15:41:48 96

原创 linux之按键中断

可以看到按键有两个,分别对应GPIO5_1和GPIO4_14。

2023-11-05 12:30:14 191

原创 基于GPIO子系统的LED驱动程序

这两个系统属于软件层,让我们不用直接对硬件配置,一般由芯片出产商写好,我们只要基于它们改就行。

2023-11-02 20:34:38 174

原创 编写hello驱动程序

1.确定主设备号,也可以让内核分配2.定义自己的 file_operations 结构体3.实现对应的 drv_open/drv_read/drv_write 等函数,填入 file_operations 结构 体4.把 file_operations 结构体告诉内核:register_chrdev5.谁来注册驱动程序啊?得有一个入口函数:安装驱动程序时,就会去调用这 个入口函数6.有入口函数就应该有出口函数:卸载驱动程序时,出口函数调用unregister_chrdev。

2023-10-24 22:19:21 103

原创 linux之应用编程回顾总结

一个c/c文件要经过预处理、编译、汇编和链接4个阶段,才能变成可执行文件1.预处理 C/C源文件中,以“#”开头的命令被称为预处理命令,如包含命令“#include”、宏定义命令“#define”、条件编译命令“#if”、“#ifdef”等。预处理就是将要包含(include)的文件插入原文件中、将宏定义展开、根据条件编译命令选择要使用的代码,最后将这些东西输出到一个“.i”文件中等待进一步处理。使用的命令为2.编译 编译就是把C/C++代码(比如上述的“.i”文件)“翻译”成汇编代码。

2023-10-23 09:34:01 92

原创 Linux之I2C应用编程

首先解压下压缩包进入 i2c-tools-4.2目录执行 make将i2cset ,i2cget ,i2cdump,i2cdetect,i2ctransfer放到板子上。

2023-10-20 13:56:12 326

原创 tslib_交叉编译_程序编写

在学习linux应用开发的过程中,我对于交叉编译的指令不理解,今天就好好来解释一下每一条指令对应的意义。在IMX6ULL板子上配置。

2023-10-16 13:24:31 268

原创 linux之Makefile

实例:在该目录下创建三个文件:a.c b.c c.c。

2023-09-26 20:57:06 83

原创 modbus的协议

在介绍Modbus协议之前,我们要先了解下RS485协议,因为Modbus协议是在RS485这个硬件层协议上搭建的软件层协议。

2023-09-20 19:38:11 390

原创 freertos之任务运行时间统计实验

这里我们使用定时器3来作为时基定时器,先定义下portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()为ConfigureTimeForRunTimeStats()3.定义portGET_RUN_TIME_COUNTER_VALUE()为获取该功能时基硬件定时器计数的计数值,且因为FreeRTOSRunTimeTicks在别处定义,记得声明。ConfigureTimeForRunTimeStats()就是用来初始化定时器的函数,且将节拍计数器初始化为0.

2023-09-08 23:08:51 580

原创 freertos之资源管理

使用上述函数,进入临界中断,任务不会切换,且中断优先级处于configMAX_SYSCALL_INTERRUPT_PRIORITY与configKERNEL_INTERRUPT_PRIORITY之间的中断会被屏蔽,低于configMAX_SYSCALL_INTERRUPT_PRIORITY的中断不会被屏蔽,知道退出临界区总结:使用上述函数处于临界区的程序,不会被别的任务切换,且能屏蔽一些中断。

2023-09-06 23:01:09 209

原创 freertos之信号量

信号量这个名字很恰当:信号:起通知作用量:还可以用来表示资源的数量当"量"没有限制时,它就是"计数型信号量"(Counting Semaphores)当"量"只有0、1两个取值时,它就是"二进制信号量"(Binary Semaphores)支持的动作:"give"给出资源,计数值加1;"take"获得资源,计数值减1。

2023-08-29 20:40:28 112

原创 freertos之队列集

队列集就是队列的集合队列集的长度=所包含队列的长度之和。

2023-08-28 11:02:15 101

原创 freertos之队列

队列的创建有两种方法:动态分配内存、静态分配内存,动态分配内存:xQueueCreate,队列的内存在函数内部动态分配动态创建:静态创建:静态创建的示例代码:这两个函数是等同的,都是从在任务里写,第三个是在中断里写使用 xQueueReceive() 函数读队列,读到一个数据后,队列中该数据会被移除。这个函数有两个版本:在任务中使用、在ISR中使用。函数原型如下:可以查询队列中有多少个数据、有多少空余空间。函数原型如下:当队列长度为1时,可以使用 xQueueOverwrite() xQ

2023-08-27 16:19:21 143

原创 freertos之任务调度算法

所谓调度算法,就是怎么确定哪个就绪态的任务可以切换为运行状态。通过配置文件FreeRTOSConfig.h的三个配置项来配置调度算法:configUSE_PREEMPTION (是否抢占)configUSE_TIME_SLICING (是否轮转)configIDLE_SHOULD_YIELD (空闲任务是否让步)调度算法的行为主要体现在两方面:高优先级的任务先运行、同优先级的就绪态任务如何被选中。

2023-08-25 22:22:29 122

原创 freertos之vTaskDealy函数与vTaskDelayUntil函数的区别

可以看到,每次任务1休眠的时间是一样,但是它不能保证,固定的时间间隔执行函数,比如,任务创建的rand数组,里面的元素不同,所以每次执行1任务的时间也不同。在main函数里创建3个任务,任务1的优先级最高,然后在任务1执行vTaskDelayUntil函数。在main函数里创建3个任务,任务1的优先级最高,然后在任务1执行vTaskDelay函数。vTaskDelayUntil:等待到指定的绝对时刻,才能变为就绪态。可以看到任务1在周期性的执行。每次任务开始的间隔都是一样的。

2023-08-25 15:08:29 206

原创 freertos之优先级实验

优先级的取值范围是:0~(configMAX_PRIORITIES – 1),数值越大优先级越高。FreeRTOS会确保最高优先级的、可运行的任务,马上就能执行。对于相同优先级的、可运行的任务,轮流执行。

2023-08-23 20:43:56 290

原创 Freertos第一课

裸机的程序:一般是执行完一个任务后,再执行下一个任务。freertos的程序:当存在不同优先级时,会把优先级比较高的任务执行完,再执行优先级较低的任务,当存在任务的优先级一样时,会交替的执行,比如一个任务是100%,当存在任务(a,b)的优先级一样时,会a先执行1%,b再执行%1,再回到a执行%1,这样交替的执行,因为cpu切换的快,给人一种同时在执行的感觉。

2023-08-22 20:38:41 55

原创 树莓派首次用SSH方式登陆

因为在学校的原因,已经用了串口登陆的方式,一直登录不了树莓派,通过查找资料 ,发现以下直接用SSH登录的方式,首先需要下载一个官方烧录器。接下来,打开MobaXterm,选择SSH登陆方式,把ip地址填入,即可登陆,树莓派,默认账号名位pi,密码为raspberry。另外我选择的方式是手机开热点给电脑,电脑再开热点给树莓派,之所以这样,是因为电脑端方便查找连接wifi的设备。我用的是3B+,所以操作系统选择按图中选择,然后再选择以下sd卡,再设置需要的东西。选择windows环境下的。

2023-06-15 20:25:44 556

原创 mqtt.fx连接阿里云物联网平台

前提条件:下载mqtt.fx软件,以及注册好阿里云物联网平台账号本实验用两个mqtt.fx客户端接入阿里云物联网平台,来实现不同设备间消息的传输。要注意的是:阿里云平台不同设备间订阅或发布的主题所限制,这意味着,不同的设备不能订阅或发布同一主题,我们智能通过云消息流转来达到不同设备间传输消息的目的。

2023-06-13 00:15:20 1700 1

原创 搭建物联网控制台

请添加图片描述](https://img-blog.csdnimg.cn/ca96e4fbff1a48cb9ee282f290a3653f.png。下载完后,在刚刚输入网页地址后ui,即输入127.0.0.1:1880/ui即可打开控制台。然后在浏览器输入http://127.0.0.1:1880/就可以进入界面。在命令行里输入node-red,然后会显示一下信息,看到图中给的网址。进入后点击安装,然后下载node-red-dashboard节点。然后输入node -v和npm -v检查下是否安装完成。

2023-06-11 14:14:30 179

原创 Qos服务质量、心跳机制、保留消息,遗嘱信息,用户密码认证

但是QoS为2时消息传输最慢,另外消息传输需要多次确认,因此所占用的网络资源也是最多的。测试数据的客户端向主题发布消息时如果将“保留消息”这选择变为true,那么当其它客户端刚订阅这个主题时都会收到测试数据的客户端最后一次上传的数据。若想实现QoS>0,订阅端连接服务端时cleanSession需要设置为false,订阅端订阅主题时QoS>0,发布端发布消息时的QoS>0。QoS = 0, 占用的网络资源最低,但是接收端可能会出现无法接收消息的情况,所以适用于传输重要性较低的信息。与之前学的Qos相同。

2023-06-08 13:03:44 505

原创 客服端向服务端发布、订阅、取消

另外,UNSUBSCRIBE报文也包含“报文标识符”,MQTT设备可以通过该标识符对报文进行管理。这时候就需要将retainFlag 设为true,服务端将这些retainFlag 设为true的消息保留在本地,当有新的订阅该主题时,就会把消息发给客户端。只有在客户端订阅该主题后,服务端接收到该主题的新信息时,服务端才会将最新接收到的该主题信息推送给客户端。当MQTT报文的接收方没有及时确认收到报文时,发送方会重复发送MQTT报文。服务端接收到客户端的订阅报文后,会向客户端发送SUBACK报文确认订阅。

2023-06-02 15:22:56 1346

原创 连接MQTT服务端

MQTT客户端之间要想实现通讯,必须要通过MQTT服务端。因此MQTT客户端无论是发布消息还是订阅消息,首先都要连接MQTT服务端。MQTT客户端连接服务端一共有两步。

2023-06-01 20:57:00 2496

原创 用esp8266连网的一些互联网知识

参考太极创客的课程资料。

2023-06-01 20:04:56 1599

原创 PID双环控制(速度环和位置环)

位置环做为外环,速度环作为内环。可以看到外环的输出值作为内环的目标值,外环计算一次pid,我们根据pid公式可以知道,当离位置目标越来越近时,第一个误差(外环误差)就越来越小,以至于输出的内环目标值就越来越小,所以最终达到的效果就是,离目标值越近,速度越小。(理想情况下,要调节好pid参数,不然系统也会崩溃)注意:双环控制的时候,外环PID参数调节幅度不要太大,这对于整个曲线的影响很大。

2023-05-17 23:18:03 21684 6

原创 PID单环控制(位置环)

因为4分频,所以一圈编码器计数44次,又因为减速比为30(电机转1次,编码转30次。接下来实际调参,用的是增量式PID(位置式效果也差不多),因为编码器有自带积分效果,所以我们积分项就设置为0,只使用PD,接下来我们看看曲线。第三部分:我这里是50ms进行一次PID计算(放在中断时间为1ms的定时器,且累积中断50次,才进行PID计算),并设置输出限幅。可以看到轮子回先正转超过一圈,再反转一点,再维持再一圈的效果上,单单用位置环来控制位置,超调量明显,3.设定好时间多久执行一次pid计算,并设置限幅输出。

2023-05-17 14:05:09 2339

原创 基于正点原子电机实验的pid调试助手代码解析(速度环控制)

通过前两节文章,我已经了解了基本的pid算法,现在在完成了电机编码测速,pid控制电机转速的前提,我们来解析一下下位机是如何pid调试助手进行数据传递的.

2023-05-16 01:40:39 3389 6

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除