自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 1600细分下24v的最大转速为110

本文通过STM32自动计算ARR值,实现电机极限转速压榨测试。基于1:15减速比、1600细分与2.4MHz定时器频率,推导出公式:ARR=6000/目标转速(RPM),并编写自动递增5RPM的测试脚本,逐步挑战极限。结合缓慢加速、3秒硬抗与平滑刹车,成功测得24V供电下硬件极限约80~85RPM(电机本体1200~1275RPM)。文中强调在闭环驱动架构中,不应在STM32上使用PID,而应由驱动器内部执行闭环控制,STM32仅负责轨迹规划(如斜坡函数),避免双环耦合震荡。

2026-11-02 20:21:21 296

原创 电机启动停止变速以及转向

本文深入剖析步进电机控制中的三大“致命陷阱”:刹车(TIM_Cmd)导致电机锁死或溜车、方向切换未满足50μs时序引发打齿、调速时未同步调整占空比造成脉冲丢失。通过封装安全API,实现启停、换向、调速的标准化操作,并结合物理极限(如最大启动频率与扭矩断崖),提出“低速起步、缓慢加速、限速巡航”的工程策略,确保系统稳定运行,彻底避免电机报警与机械损伤。

2026-10-31 22:27:27 250

原创 下位机直接控制57步进电机匀速转动

本文以 STM32F103C8T6 驱动 UMLP57 步进电机驱动器为例,完整梳理了从接线到代码的落地过程。接线部分采用共阳极接法,把驱动器 PU+、DR+ 统一接到开发板 5V,PU- 接 PA0(TIM2_CH1 复用输出),DR- 接 PA1 控制方向,EN 悬空默认使能。代码部分按“填表法”逐段拆解:先定义 GPIO、TIM_TimeBase、TIM_OC 三个配置结构体,再通过 RCC 打开 APB2 上的 GPIOA 与 AFIO 时钟、APB1 上的 TIM2 时钟,随后配置 PA0 为复用

2026-10-30 23:45:12 458

原创 esp32第一个工程

本文以一段标准的 ESP-IDF “Hello World” 程序为切入点,逐行拆解头文件引入、app_main 入口函数、日志输出与 vTaskDelay 延时机制,说明 ESP-IDF 如何与 FreeRTOS 协同工作。随后系统梳理 ESP32-WROOM-32 的引脚资源,包括内部 Flash 占用引脚、仅输入引脚、Strapping 启动引脚等避坑要点,并给出电源控制、ADC/DAC/Touch、SPI/I2C/UART 及通用 IO 的详细功能对照表。

2026-10-29 09:52:02 106

原创 esp32工程架构详解

本文详解ESP-IDF工程的层级架构:根目录统领全局,components封装独立驱动组件(如LED),main实现业务逻辑,build生成固件。通过CMake实现“自下而上注册、自上而下调用”——组件声明源文件与依赖,主程序跨文件夹调用接口,最终链接成可烧录固件。该设计支持代码高度复用与模块隔离,提升开发效率与可维护性。

2026-10-28 17:23:13 195

原创 esp32的一些基础知识

本文提炼了ESP32家族、经典开发板特性及FreeRTOS的核心概念:1. **ESP32家族**:分为经典款(全能)、S系(AI/带屏)、C系(低功耗性价比)、H系(无WiFi/主打Matter)和P系(无网络纯算力)。2. **WROOM-32开发板**:搭载双核LX6,集成WiFi和蓝牙。其生态极丰富且稳定,是物联网入门首选,但架构偏老、功耗稍高。3. **FreeRTOS**:微控制器实时操作系统。它打破传统单循环,支持多任务并发、抢占式实时调度与安全资源分配,是ESP32高效管理复杂无线网

2026-10-26 20:16:00 808

原创 数据结构(笔记)——顺序栈

顺序栈实现与应用摘要 顺序栈采用数组实现,通过栈顶指针top管理元素,具有入栈、出栈O(1)的时间效率,但容量固定。与链栈相比,顺序栈实现简单、存取速度快,但缺乏动态扩展能力。核心操作包括初始化、扩容、判空/满、入栈(Push)、出栈(Pop)及取栈顶元素(GetTop)。典型应用包括: 行编辑程序:处理退格(#)和清行(@)操作; 进制转换:通过取余入栈、逆序出栈实现十进制转八进制; 括号匹配:左括号入栈,右括号与栈顶匹配,栈空则合法。 顺序栈适用于数据规模已知的场景,如表达式求值,而链栈更适合动态数据。

2026-10-19 16:41:03 514

原创 从监控视频到智能判定:一个视觉识别系统的原理剖析

本文以废旧机动车拆解场监控系统为例,剖析video_check.py与test_qwen_vl.py两脚本的协作逻辑。前者通过每秒抽帧、YOLO检测卡车并裁剪,实现“找车”;后者利用Qwen-VL模型对裁剪图进行语义判断,识别是否拖带零件。系统采用“检测+理解”分层架构:先用低成本目标检测筛选候选样本,再以高成本大模型精准判定,形成高效漏斗式流水线。关键设计包括grab/retrieve抽帧优化、时间窗去重、结构化Prompt、JSON容错与重试机制,体现工程思维与视觉原理的深度融合。

2026-10-18 16:53:30 476

原创 数据结构(笔记)——双向循环链表

摘要 双向循环链表是一种链式存储结构,其特点是每个节点包含数据域、前驱指针和后继指针,且首尾相连形成环状结构。相比单向链表,它支持双向遍历,插入删除效率高(O(1)),但空间开销更大。主要操作包括:初始化(建立空环)、插入(头插/尾插)、删除(头删/尾删)、查找和排序等。核心代码展示了节点申请、指针维护等关键逻辑,需特别注意循环结构的正确性。缺点是实现复杂度较高,指针操作容易出错。

2026-05-06 16:23:01 469

原创 数据结构(笔记)——双向链表

摘要:双向链表是一种链式存储结构,每个节点包含数据域和指向前驱/后继的指针。其特点包括双向遍历能力、O(1)时间获取前驱节点,但比单链表更复杂且占用更多空间。实现时需维护头尾节点,支持头插/尾插(O(1))、按值插入/删除(O(n))、排序(O(n²))等操作。关键操作涉及指针的双向维护,如插入时要同时设置新节点的前驱/后继并更新相邻节点的指针。清空链表需遍历释放所有节点,保留头结点;销毁则需额外释放头结点内存。

2026-04-28 14:49:53 585

原创 数据结构(笔记)——单向循环链表

单向循环链表是一种特殊的链表结构,其特点是尾节点指针指向头节点形成闭环。相比普通链表,它具有可从任意节点开始遍历、便于循环处理等优点,但存在只能单向遍历、查找效率低的缺点。实现上包括节点申请、初始化、头尾插/删、查找、排序、逆序等基本操作。其中插入删除仅需修改指针,时间复杂度为O(1);排序采用插入排序,逆序使用头插法。该结构适用于约瑟夫问题等循环场景,但实现复杂度高于顺序表。最后需注意清空和销毁链表时要正确处理节点指针,避免内存泄漏。

2026-04-08 22:57:57 833

原创 数据结构——静态链表(c语言笔记)

静态链表是用数组模拟链表的数据结构,每个节点包含数据和下一个节点的数组下标(cur)。下标0存储头指针,下标1开始为备用链表。初始化时将所有节点串联成备用链表,插入节点时从备用链表分配空间,删除后释放回备用链表。示例代码展示了初始化、插入、删除和遍历操作,使用头插法管理链表。静态链表通过数组下标代替指针,实现类似链表的动态内存管理,避免指针操作但需预先分配固定空间。

2025-09-25 16:46:44 2090 1

原创 数据结构——单链表(c语言笔记)

摘要:本文详细介绍了链式存储结构的基本概念、实现方式及其与顺序存储的对比。链式存储通过节点(包含数据域和指针域)实现非连续存储,具有插入删除高效、内存利用率高等优点,但随机访问效率低。文章提供了C语言实现的单链表完整代码,包括初始化、增删改查、排序等操作,并解释了关键函数的实现逻辑。通过对比分析,突出了链表在动态内存管理上的优势,同时指出了其访问效率上的不足。代码示例展示了带头结点的单链表实现,包含详细的注释和边界条件处理,为理解链表数据结构提供了实践参考。

2025-09-18 19:37:22 2270

原创 数据结构——顺序表(c语言笔记)

本文介绍了线性结构中的顺序表实现。顺序表采用连续存储空间,具有随机访问、存储密度高的特点,但插入删除需移动元素。文章详细展示了顺序表的C语言实现,包括初始化、增删改查、排序反转等操作,并提供了菜单驱动的交互界面。重点说明了动态扩容机制和双指针合并算法,其中合并操作通过比较两个有序表元素实现高效归并。代码实现了完整的内存管理,包含初始化、销毁和错误处理,适合作为数据结构学习的实践案例。

2025-09-13 13:06:56 2440

原创 STM32实践项目(激光炮台)

本文设计了一种基于STM32的双舵机激光炮台控制系统,采用180°限位舵机和360°连续旋转舵机构建双自由度运动机构。系统通过旋转编码器替代传统按键控制,实现更直观的角度调节。针对连续旋转舵机无法直接进行角度控制的问题,采用PID算法实现模拟角度精确调节。系统支持有线与蓝牙无线控制模式,完成了硬件电路搭建、PWM舵机驱动、编码器信号处理和PID算法优化等关键技术。实验证明该系统能精准控制炮台水平与俯仰运动,具有良好稳定性和响应速度。

2025-09-04 22:25:39 4976 4

原创 IC(输入捕获)

本文介绍了STM32定时器输入捕获功能的实现原理与应用。通过硬件自动记录信号边沿时刻的计数器值,解决了软件轮询反应慢的问题。系统使用TIM2输出1kHz/50%的PWM信号,TIM3配置为输入捕获模式:72MHz主时钟经72分频得到1MHz计数频率,实现us级精度;PWM输入模式自动完成周期(CCR1)和脉宽(CCR2)捕获;从模式设为Reset确保每个周期从0开始计数。最终通过OLED实时显示频率(1,000,000/周期)和占空比(脉宽/周期×100%)的测量结果。实现了高精度的信号参数测量,避免误差。

2025-09-01 20:28:24 2329

原创 直流电机驱动与TB6612

摘要:TB6612FNG是一款高效的双路H桥直流电机驱动芯片,可控制两个电机的转速和方向。相比L298N,它具有体积小、发热低、电压范围宽(2.5-13.5V)等优势。通过STM32的GPIO控制方向(PA4/PA5),PWM输出(PA2)调节转速,实现正反转和调速功能。程序通过按键控制速度变化(-100~100),OLED显示当前速度值。该方案采用20kHz PWM频率避免可闻噪声,适合需要精确控制直流电机转速和方向的应用场景。

2025-08-29 22:25:07 2497

原创 STM32的Sg90舵机

摘要: 舵机通过PWM信号控制,其核心是识别高电平脉宽(通常20ms周期)。脉宽1ms、1.5ms、2ms分别对应0°、90°、180°位置。STM32实现时需配置定时器(PSC=71,ARR=20000)生成1MHz时钟,通过CCR调节脉宽(如CCR=1500对应1.5ms)。角度转换为脉宽公式:脉宽(us)=1000+(角度/180)×1000。普通舵机用于定位(0°~180°),连续旋转舵机则通过脉宽控制转速和方向。代码需初始化PWM输出,动态调整CCR值驱动舵机转动。注意不同舵机脉宽范围可能差异.

2025-08-26 22:14:13 1580

原创 HC-05蓝牙模块

蓝牙模块选择指南:HC-05支持主/从模式,适合STM32与安卓设备通信;HC-06仅从机模式,价格更低;HM-10支持BLE4.0,兼容iOS设备;ESP32功能最强大但较复杂。连接方式上,HC-05需交叉TX/RX引脚,通过AT指令(38400波特率)可修改名称、密码等参数。两个HC-05互连需分别设置主从模式并绑定地址。典型应用场景包括无线串口通信、手机设备连接等,选择时需考虑协议版本、功耗及iOS兼容性等因素。

2025-08-19 14:17:08 3386

原创 STM32的PWM

PWM(脉冲宽度调制)是嵌入式硬件开发的核心技术,通过调节方波的占空比实现电压等效控制。其本质是输出固定周期、可变占空比的方波信号,适用于LED调光、电机控制、舵机驱动等场景。STM32的PWM生成涉及定时器、比较器、死区控制等模块,需配置时钟源、分频器、ARR/CCR寄存器等参数。通过调整CCR值改变占空比,配合极性设置和输出使能,最终在GPIO引脚输出PWM波形。典型应用如呼吸灯效果,展示了PWM从初始化到动态调节的完整流程,体现了其在嵌入式系统中的高效性和灵活性。

2025-08-15 17:23:10 2338

原创 STM32TIM定时器

摘要:STM32的TIM定时器是一个多功能外设,支持外部脉冲计数、波形生成等功能。本文详细解析了TIM2的外部时钟模式2配置流程:从PA0引脚输入脉冲信号,经ETR模块滤波后作为时钟源,通过PSC预分频和CNT计数,配合ARR自动重载值实现脉冲计数。重点阐述了硬件模块间的信号流向、寄存器配置方法(包括GPIO初始化、时钟模式选择、分频设置等)和中断处理机制,并提供了完整的代码实现。特别说明了PSC分频原理和ARR的预装机制(ARPE)对定时器行为的影响,为STM32定时器的外部脉冲计数应用提供了完整参考方案

2025-08-11 17:22:53 2251

原创 STM32的中断系统

摘要 STM32中断机制允许程序在运行中响应外部或内部事件,类似打断作业去开门再返回。中断流程:事件触发→EXTI/NVIC检查→CPU保存现场→执行ISR→恢复现场继续执行。外部中断(如按键)需配置GPIO输入、EXTI线映射及触发方式,并通过NVIC设置优先级;内部中断(如定时器、串口)由外设状态触发。示例展示了红外传感器通过PB14下降沿触发中断计次,主程序读取计数值显示。STM32中断优先级分为抢占优先级和子优先级,需合理配置以确保响应顺序。开发时需注意清除中断标志,避免重复触发。

2025-08-09 19:48:36 2387

原创 你真的了解STM32的按键吗

为什么按下按键会对STM32造成影响,按键本质到底是什么。

2025-08-07 20:38:38 1077

原创 STM32的PWR

摘要:本文详细介绍了STM32微控制器的电源管理机制,包括上电复位(POR)、掉电复位(PDR)和可编程电压检测器(PVD)的工作流程。重点阐述了PVD的功能实现,包括初始化配置、中断处理和电压监测,并提供了完整的代码示例。同时对比了STM32的三种低功耗模式(睡眠、停止和待机模式)的特点及实现方法,展示了如何通过按键控制切换不同功耗状态。文章还说明了相关库函数的使用方法,为STM32电源管理设计提供了实用参考。(149字)

2025-08-06 19:42:40 1624

原创 STM32内部读写FLASH

本文介绍了STM32内部Flash存储器的特性与应用。Flash作为非易失性存储器,具有0x08000000起始地址、掉电不丢失数据等特点,但写入前必须擦除且最小写入单位为16位。文章详细说明了Flash读写操作流程:读取可直接访问地址,而写入需先解锁、擦除页、写入数据再上锁。重点演示了如何将Flash最后一页(1KB)用作数据存储区,包含初始化检查、数据保存和清除功能实现,并提供了完整代码示例。最后还介绍了通过特定地址读取芯片唯一ID和Flash容量的方法,及其在防伪、授权和设备追溯等场景的应用价值。

2025-08-05 18:39:17 2039

原创 STM32的SPI通信(硬件读取W25Q64)

本文详细介绍了硬件SPI读取W25Q64的配置与实现方法,重点分析了SPI初始化结构体(SPI_InitTypeDef)各参数含义。相比软件模拟SPI,硬件SPI通过SPI1寄存器自动完成SCK、MOSI、MISO的逻辑处理,具有高速稳定、自动同步等优势。文章详细说明了GPIO初始化、SPI配置、数据传输函数实现,并对比了连续传输和非连续传输的特点及适用场景。其中SPI初始化参数包括工作模式(主/从)、数据位宽、时钟极性和相位、片选控制方式、波特率分频等关键配置项,这些参数需要根据外设要求进行设置。

2025-08-04 15:57:03 1832

原创 STM32的SPI通信(软件读写W25Q64)

本文详细介绍了SPI通信协议及其与I2C的区别。SPI是一种主从式、同步、全双工的串行通信协议,通过4根信号线(SCK、MOSI、MISO、CS)实现高速数据传输。文章重点解析了SPI四种模式(Mode0-3)的时序差异,包括CPOL、CPHA参数如何决定时钟极性和采样边沿。并以W25Q64 Flash芯片为例,展示了软件模拟SPI实现读写操作的全过程。最后对比了SPI与I2C在通信方式、速率、引脚数量等方面的差异,指出SPI适合高速外设(如Flash),而I2C更适合低速设备(如传感器)。

2025-08-03 19:21:12 1571

原创 STM32的GPIO_SetBits()论述

摘要:GPIO_SetBits()在开漏输出模式(如I2C)中通常不需要,因为开漏输出只能主动拉低电平,高电平由外部上拉电阻实现。使用硬件I2C外设时(GPIO_Mode_AF_OD),引脚控制权交给外设,手动拉高会冲突。仅在模拟I2C或推挽输出时需要手动设置高低电平。开漏模式保证了I2C总线的"线与"特性,避免短路。

2025-08-02 11:08:59 668

原创 STM32的I2C通信(硬件读写MPU6050)

本文详细介绍了通过硬件方式读写MPU6050传感器的I2C通信流程。主要内容包括:1)硬件读写的关键函数实现,如等待I2C事件的超时机制;2)完整的硬件写寄存器流程(START→地址→寄存器→数据→STOP)和读寄存器流程(包含RESTART操作);3)STM32标准库中I2C相关函数的功能说明;4)MPU6050初始化流程及关键寄存器配置;5)读取加速度计和陀螺仪原始数据的实现方法。通过硬件方式操作MPU6050相比软件模拟更高效可靠,适合对实时性要求较高的应用场景。

2025-08-01 09:06:10 1715

原创 STM32的I2C通信(软件读取MPU6050)

本文详细解析了STM32中I2C通信的实现原理与应用方法。文章首先介绍了通信模式(单工/半双工/全双工)的区别,重点阐述了软件I2C通过GPIO模拟SDA/SCL信号线的底层机制。作者系统梳理了实现I2C通信所需的五个核心函数:起始/停止信号、字节收发和ACK确认,并提供了具体代码实现。针对时序与代码结合的关键难点,文章以MPU6050为例,分别给出了完整的读写流程实现代码,包括设备寻址、寄存器操作和数据传输等关键步骤。最后特别强调了SCL/SDA电平变化时序的重要性,为初学者掌握I2C通信提供了清晰的指导

2025-07-31 23:32:49 1674

原创 STM32的GPIO位结构详解

本文深入解析STM32的GPIO底层结构与工作原理。从保护二极管、上/下拉电阻到MOS驱动电路,详细阐述了GPIO的保护机制(钳位二极管防静电)、输入稳定(施密特触发器抗抖动)和输出驱动(推挽/开漏模式选择)。重点分析了不同应用场景下的模式选择策略:独立控制用推挽,共享线路用开漏。同时介绍了复用功能配置方法,揭示了GPIO寄存器如何控制引脚模式、输出类型及速度等关键参数。通过底层电路分析,帮助开发者从根本上理解GPIO的工作机制,避免配置错误。

2025-07-30 21:38:25 1516

原创 STM32的看门狗详解

STM32的看门狗机制是防止系统死机的重要保障,分为独立看门狗(IWDG)和窗口看门狗(WWDG)。IWDG使用内部低速时钟,独立于主系统,通过定期"喂狗"防止系统跑飞;WWDG则额外检测喂狗时机,可发现程序逻辑异常。两者都需正确配置超时参数,但IWDG更常用。看门狗一旦启动无法关闭,必须严格遵循喂狗时序,确保系统稳定运行。

2025-07-28 22:37:03 1788

原创 STM32中的指针

本文梳理了C/C++中指针的核心概念和使用方法。指针是保存内存地址的变量,包含自身地址和指向地址。文章详细解释了*p与p的区别、指针定义与解引用、底层存储原理及类型含义。同时介绍了空指针、指针数组等常见类型,以及指针在参数传递、动态内存分配和结构体访问中的实际应用,并总结了野指针、空指针解引用等常见错误。通过底层视角帮助读者更清晰地理解指针机制。

2025-07-27 21:00:03 1220

原创 STM32(基于C语言的)时间戳转换基础

本文详细介绍了C语言标准库time.h中的9个关键时间处理函数,涵盖时间戳获取、转换、格式化及计算等功能。主要内容包括:获取当前时间戳的time()函数;时间戳与字符串互转的ctime()和asctime();本地/UTC时间转换的localtime()和gmtime();时间结构体与时间戳互转的mktime();计算时间差的difftime();CPU耗时测量的clock();自定义格式化的strftime()函数。文章通过具体代码示例演示了每个函数的用法,并特别标注了线程安全、月份索引等使用注意事项。

2025-07-26 22:02:46 2073

原创 STM32,uint16_t/uint8_t等报错

文章摘要:在编写.h文件时,遇到uint8_t等类型报错问题,经排查发现这些类型定义在<stdint.h>头文件中。通过研究得知,uint8_t表示8位无符号整型(0-255),常用于硬件编程。解决方法是直接在.h文件中添加#include<stdint.h>头文件引用,使代码顺利通过编译。这启示我们要注意编译器对标准库头文件的依赖关系。

2025-07-25 16:20:00 1498

原创 stm32舵机不运作或者舵机执行延迟很高

摘要:调试STM32驱动舵机时出现异常,舵机间歇性运作。经检查代码无误后更换舵机仍无效。通过LED测试发现时钟频率异常,分析发现晶振函数未启用,导致主频由72MHz降至8MHz。最终确认因接线错误烧毁晶振,更换新STM32后问题解决。提醒注意舵机接线时可能损坏晶振。(149字)

2025-07-24 21:23:39 463

此处是基于ros(机器人操作系统)下由python代码实现的静态图像识别

采用BGR转化HSV,通过对不同色阈的分析与对比实现对指定颜色和图像的识别。实现在指定颜色的范围内筛选图中符合描述的内容,并进行框选识别。适合于有一定python基础并且想要学习识别类算法的群体,或者想尝试自己做一次小项目的群体。

2025-09-17

STM32有线激光云台项目

此项目为第三代激光炮台,采用STM32实现有线控制。采用两个旋转编码器,一个ky-008激光模块,SG90 舵机(180° 限位舵机),SG90 舵机(360° 连续舵机)。可实现底座360°旋转转,上座180°旋转。此项目精确控制了炮台,使其几乎零延迟,丝滑控制。非常适合对于刚学完Stm32的小伙伴作为第一个项目进行实践。

2025-09-13

空空如也

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

TA关注的人

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