自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 收藏
  • 关注

原创 电力电子学习路线

电力电子、电机控制与电机驱动是电气工程中相互关联的三个核心领域,涉及从电能转换到机电系统控制的完整技术链条。

2025-04-03 10:45:28 342

原创 [CH32] RISC-V汇编指令解释

1、原因发现串口初始化了,但是debug的时候串口外设寄存器值都是0。

2025-04-02 10:34:50 973

原创 STM32寄存器开发全面指南

STM32微控制器可以通过直接操作寄存器或使用HAL库进行开发。寄存器操作是最底层的编程方式,而HAL库则是ST公司提供的硬件抽象层,封装了寄存器操作,提供了更友好的API。STM32的寄存器通常是32位的,每个位或一组位控制特定功能。

2025-03-31 01:15:40 932

原创 [Linux]解决虚拟机 ubantu系统下网络的问题

切换桥接模式、直连手机网络。重新安装,前面操作无效。

2025-03-30 23:15:13 208

原创 [C++]C++入门篇 2025最新版

变量的别名,操作引用等价于操作原变量。:变量可以在任何位置声明(更灵活)。:避免全局变量/函数的名字冲突。引用必须初始化且不能更改指向。:变量必须在作用域开头声明。更安全,无需检查空指针。调用析构函数,更安全。

2025-03-30 10:23:26 229

原创 [物联网iot]云服务实现机制

设备与云端的通信(Wi-Fi、4G/5G、LPWAN等),支持多种协议(MQTT、CoAP、HTTP)。:云端部署协议适配器(如MQTT Broker、CoAP网关),将不同协议统一转换为内部数据格式。:提供RESTful API(设备控制、数据查询)和多种语言SDK(Python、Java)。:通过分布式架构(如Kubernetes集群)、负载均衡(Nginx)支持百万级设备连接。:提供API、可视化工具和业务逻辑,供用户开发具体应用(如智能家居、工业监控)。:轻量级发布/订阅协议,适合低带宽场景。

2025-03-30 10:17:04 992

原创 [ROS]ROS系统是如何协调工作机器人

ROS(Robot Operating System)是一种灵活的机器人开发框架,其核心思想是通过分布式节点和通信机制协调机器人各模块的工作。通过以上机制,ROS将机器人复杂的硬件和软件模块解耦,形成松耦合、高内聚的系统,最终实现感知→决策→执行的闭环控制。封装底层设备(如电机、摄像头)为ROS节点,通过标准消息(如sensor_msgs/Image。:处理需长时间运行的任务(如导航到目标点),支持进度反馈和取消。:异步的发布-订阅模型,用于持续数据传输(如传感器数据流)。

2025-03-30 10:11:00 690

原创 [物联网iot]对比WIFI、MQTT、TCP、UDP通信协议

Broker 将数据通过同样的流程反向传递到手机 APP(Wi-Fi → IP → TCP → MQTT → 展示数据)。未配置MQTT Broker的用户名密码(公开测试Broker不需要,但私有环境需要)。转换为 Wi-Fi 帧(包含 MAC 地址:路由器的 MAC 是下一站)。:相当于“快递单上的具体说明”(比如“货到付款”或“放门口”)。:顺丰快递(保证包裹不丢、按顺序送达,但速度可能慢)。但物联网中也有变种如。:普通快递(可能丢件、顺序乱,但速度快)。目标端口:1883(MQTT 默认端口)。

2025-03-30 10:03:54 606

原创 STM32 HAL库函数原理解析

在 51 单片机的学习过程中,我们就已熟知寄存器是控制单片机外设功能的核心。当过渡到 STM32 单片机时,会发现每个外设内部都存在大量功能各异且相互独立的寄存器。正是这些不同类型寄存器的协同工作,让单片机能够依据开发者的需求实现 “自定义” 功能。

2025-03-22 01:08:29 945

原创 嵌入式代码入门-读

与英语、德语等语言需要听说读写不同,嵌入式语言的学习更侧重于代码的编写与阅读 —— 编写是为了通过代码解决实际工程问题,而阅读则与是为了理解现有代码逻辑,从而进一步提升自身的编写能力,两者相辅相成构成嵌入式开发的核心技能。所以也有人说,在这一片(系统)内 是写不出什么大名堂的,因为本质要么就是对输出对象控制,要么就是输入信号进行处理.单片机在系统中做输入输出的交互作用,所以也控制着对输入信号的处理以及如何控制输出对象。1.对输入信号的处理部分,思考单片机在对输入信号做了哪些处理.1、理解单片机的作用。

2025-03-21 08:38:10 197

原创 ESP32学习 -从STM32工程架构进阶到ESP32架构

ESP-IDF鼓励模块化开发,用户可以将功能封装为组件(如传感器驱动、网络协议),便于复用。:配置ESP-IDF的系统参数(如任务堆栈大小、Wi-Fi SSID),通过文本文件或。:图形化配置STM32的外设(如GPIO、UART),生成初始化代码,不可直接编辑文本。:通常只有一个顶层的Makefile或CubeIDE工程文件,较少使用CMake。:每个组件(包括用户组件和系统组件)都有自己的。STM32项目中类似功能通常直接写在。或通过CubeMX生成的库代码实现。使用CubeMX配置外设并生成代码。

2025-03-17 22:53:22 1421

原创 MATLAB语法速成-对照C语言学习

end。

2025-03-17 22:06:26 303

原创 [KEIL]单片机技巧—Keil软件篇

可以用来查看当前栈内函数调用的使用情况,从图中可以看出在main函数中调用了SystemClock_Config这个函数,紧接着又在SystemClock_Config又调用了HAL_RCC_OscConfig这个函数,可以很清晰的看出函数之间调用的层次关系。将i拖动到内存窗口即可显示当前变量的值,如果在 i 前面加上取地址符 & 即可显示当前变量的地址。,学会如何通过寄存器的值来排外设上的蛊是嵌入式开发从小白到入门的重要一步,一定要善于使用这个工具,而不是外设出了问题时,一点点的通过表层外设现象排蛊。

2025-03-02 10:47:01 1072 1

原创 单片机栈和堆、FALSH、区别

比 RAM 慢,但容量较大(STM32 的 Flash 通常为几十 KB 到几 MB)。| Stack(向下增长) ← 栈顶(Stack Top)| Heap(向上增长) ← 堆顶(Heap Top):存放代码和常量(只读),CPU 直接从 Flash 取指令执行。:运行时不可直接修改(需特殊操作,如 Flash 编程)。:均位于 RAM 中,但方向相反(栈向下,堆向上)。由编译器自动管理,向下增长(高地址 → 低地址)。由程序员手动管理,向上增长(低地址 → 高地址)。

2025-03-01 23:59:14 828

原创 [电赛]寻迹小车代码

【代码】[电赛]寻迹小车代码。

2025-02-26 17:04:17 182

原创 FreeRTOS空闲任务和钩子函数

空闲任务是FreeRTOS中一个重要的系统任务,用于防止CPU空转、回收资源和管理低功耗模式。空闲钩子函数允许用户在空闲任务中插入自定义代码,实现低功耗模式或执行后台任务。使用空闲钩子函数时,需要注意避免阻塞操作,并确保定期返回。

2025-02-24 10:05:34 345

原创 辅助焊接:PCB板元件焊接困难?

PCB板元件焊接困难?不知道元件对应哪里?手动焊接困难?相信很多小伙伴在自己打板到货后,进行焊接都会很头疼。接下来我会给大家介绍一个非常方便的工具,让我们在焊接过程中能够更轻松的正确焊接完整个板子.

2025-02-23 21:14:13 509

原创 OV-WATCH手表

MCU选型选择STM32F4411C1U6,因为它具备较大的ROM和RAM,能够运行FreeRTOS和VIGL。采用触摸显示屏,具体型号可在淘宝搜索。电源部分充电芯片:采用TP4056,用于3.7V锂电池的充电。升降压芯片:采用TPS63020,用于解决电池在3V-4V波动时的放电问题。通信部分NFC:采用UID卡,通过模拟开关连接。蓝牙:采用HC-04。传感器包括心率传感器、海拔指南针等,具体型号未提及,但需按照说明手册连接。看门狗由于STM32内部看门狗无法关闭,进入休眠模式会导致重启,因此采用外部看门

2025-02-23 20:46:16 796

原创 单片机裸机编程:状态机与其他高效编程框架

在单片机裸机编程中,状态机、时间片轮询、中断驱动、非阻塞式编程和超级循环都是常见的编程模式。状态机:适用于复杂逻辑和事件驱动的系统,能够有效管理任务切换和逻辑复杂性。时间片轮询:适合多任务并发但对实时性要求不高的场景。中断驱动:适合对实时性要求较高的系统。非阻塞式编程:适合需要快速响应多个事件的系统。超级循环:适合简单的多任务场景。

2025-02-23 19:49:30 603

原创 单片机裸机编程-时机管理

也就是说,在不同的执行函数之间的通信使用的是全局变量,或者说是标志位。的概念,对不同的任务进行局部管理。状态机通过定义不同的状态和状态之间的转换条件,使得代码更加模块化和灵活。通过这种方式,我们可以在裸机中实现类似 RTOS 的时间片轮询机制,使得任务的执行更加公平和灵活。通过状态机,我们可以清晰地定义每个任务的执行条件和状态转换逻辑,从而提高代码的可读性和可维护性。:在定时器中断中维护一个任务状态数组,记录每个任务的执行状态和剩余时间片。在裸机编程中,任务的执行顺序通常是固定的,由程序的。

2025-02-23 19:38:07 346

原创 单极性与双极性步进电机区分

简明扼要不废话:如图所示单极性,就是有一个公共端,接VCC 总共5根线。 电流方向不能变,比如A低电平,B低电平。双极性:与单极性最大的区别:就是电流方向可变。通过电流方向控制磁场方向。比如可以A+ > A- 也可以A- > A+,这样就通过电流方向(高低电平)来控制方向

2025-02-23 15:55:04 249

原创 FreeRTOS之任务栈

当一个任务调用另一个函数时,就好比你在冒险途中遇到一个岔路口,决定去探索一条新的小路。当被调用的函数执行完,程序就可以根据栈里存储的返回地址,准确地回到原来的函数继续执行,就像你顺利回到主路一样。函数创建任务时,任务的栈空间会从 FreeRTOS 的堆空间中动态分配。在动态分配中,栈的大小需要根据任务的实际需求来设置。在任务切换时,FreeRTOS 会检查栈指针是否在合法的栈空间范围内。如果任务中没有复杂的嵌套调用,分配 128 字的栈空间通常就足够了。任务的栈空间在任务创建时分配,在任务删除时释放。

2025-02-21 17:03:24 964

原创 FreeRTOS 时间管理

这样,在这 X 个时间滴答内,这个任务就会乖乖地 “睡觉”,把 CPU 资源让给其他需要工作的任务。你可以创建一个软件定时器,设置好定时时间,再指定一个回调函数(也就是到时间后要执行的操作)。一旦定时器启动,它就会默默倒计时,时间一到,就会立刻触发回调函数。FreeRTOS 的软件定时器是一种更灵活的时间管理工具,可以用于周期性执行任务或在一段时间后触发事件。(tick),它就像是 FreeRTOS 的心跳,为系统提供了最基本的时间单位。,它在指定的绝对时间执行任务,而不是相对于当前时间的相对延时。

2025-02-21 16:48:11 695

原创 FREERTOS关键概念-任务管理

当一个低优先级任务持有互斥锁,而此时一个高优先级任务试图获取该互斥锁时,低优先级任务的优先级会临时提升到与高优先级任务相同,这样可以避免高优先级任务因为等待低优先级任务释放互斥锁而被长时间阻塞,提高系统的实时性。在设置栈空间大小时,要根据任务的实际需求来确定。比如,在一个智能家居系统中,有两个同优先级的任务,一个是控制灯光的任务,一个是控制窗帘的任务。例如,在使用队列时,可以设置一个合理的超时时间,当任务在等待队列数据时超过超时时间还没有得到数据,就会退出等待状态,这样可以避免任务一直等待下去导致死锁。

2025-02-19 00:35:48 570

原创 [FreeRTOS]01从抽象到具体,从软件到硬件,依旧是是寄存器的杰作

如此抽象的RTOS软件架构是如何最终落实到像STM32这样的处理器底层硬件电路呢?

2025-02-09 06:06:00 820

原创 [嵌入式C语言]深入浅出:回调函数的魔法机制

在编程中,我们常常会遇到回调函数这个概念,但它到底是如何工作的呢?

2025-02-06 20:37:34 362

原创 单片机面向对象编程思路和方法--框架01

的形式重命名了。

2025-01-11 12:00:43 935

原创 嵌入式C语言-指针

int *p 是定义一个p指针。

2024-12-15 00:12:00 201

原创 【无标题】

特性值传递(第一种方式)指针传递(第二种方式)修改的目标仅修改函数内部的副本数据修改的是原始结构体数据修改后效果函数执行完后,外部结构体的数据不会改变函数执行完后,外部结构体的数据会被修改调用时传递的参数直接传递结构体的值(副本)传递结构体的地址(指针)内存开销传递整个结构体的副本,内存开销相对较大传递指针,内存开销较小函数内部访问方式使用rb.rrb.wrb.size来修改副本使用rb->rrb->wrb->size来修改原始结构体适用场景适用于不需要修改原始数据,只需对数据进行操作时。

2024-12-14 23:37:43 123

原创 嵌入式代码技巧篇01-判断数据从而返回0或1

括号内直接判断,如果是返回1 ,如果不是返回0。1、直接用运算符==

2024-12-14 23:22:09 96

原创 MAIXCAM视觉篇01--Python语法速成

变量定义不需要使用类型声明比如c语言需要int a = 1;//需要 类型 int 定义#无需变量类型 变量在定义的时候直接内存分配空间counter = 100 # 赋值整型变量miles = 1000.0 # 浮点型name = "John" # 字符串print name变量类型包括五种详细看Python 变量类型 | 菜鸟教程。

2024-12-07 03:54:57 342

原创 单片机视觉篇00--MAIXCAM连接及准备工作

提供无线和有线连接两种方式,这里为了快速使用有线连接。

2024-12-07 03:31:52 637

原创 test --本地转HTTP格式

2024-11-19 00:58:59 88

原创 关于嵌入式软件架构的理解

换句话说,应用程序根本不必知道,也不必关心,当前运行的是什么硬件,应用程序只需要关心抽象层的API是什么样的。新的硬件驱动程序要做的,仅仅是满足接口的要求而已。抽象层有很多种,比如硬件抽象层(HAL)、设备抽象层(DAL),操作系统抽象层(OSAL),网络抽象层,文件系统抽象层,Flash抽象层(RT-Thread里就有这个)等等。这意味着如果我们更改硬件,则只会更改硬件相关的模块(驱动代码),而不是整个代码库。,或者一套硬件迁移到另一套硬件,应用层代码不必更换。对谁进行抽象,就会建立这个东西的抽象层。

2024-08-19 23:26:13 211

原创 关于使用硬件I2C时,为什么不需要开启AFIO时钟

(Alternate Function I/O Event Control Register)寄存器主要用于配置和控制某些特定的事件输出,例如用于触发DMA传输、定时器更新事件等,并不需要用于标准I2C通信的配置。由手册可以看到,当对寄存器AFIO_EVCR,AFIO_MAPR和AFIO_EXTICRX进行读写操作前,应当首先打开AFIO 的时钟。I2C通信主要涉及到GPIO引脚的复用配置,以及I2C外设本身的初始化和控制,而。2、既然开启GPIO的复用功能,为何不用开启AFIO时钟?

2024-08-18 11:14:40 543

原创 STM32开漏输出为什么既能输入又能输出?

如图,便是推挽输出的接线图,通过导通P-MOS输出高电平,导通N-MOS输出低电平。注意:P-MOS和N-MOS不能同时接通,否则引起短路。这种模式输出的电平驱动能力强。

2024-08-03 21:26:35 1717 1

原创 stm32外部中断

外部中断实操。

2024-07-31 16:30:32 442

空空如也

空空如也

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

TA关注的人

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