- 博客(25)
- 收藏
- 关注
原创 数据结构——静态链表(c语言笔记)
静态链表是用数组模拟链表的数据结构,每个节点包含数据和下一个节点的数组下标(cur)。下标0存储头指针,下标1开始为备用链表。初始化时将所有节点串联成备用链表,插入节点时从备用链表分配空间,删除后释放回备用链表。示例代码展示了初始化、插入、删除和遍历操作,使用头插法管理链表。静态链表通过数组下标代替指针,实现类似链表的动态内存管理,避免指针操作但需预先分配固定空间。
2025-09-25 16:46:44
1864
1
原创 数据结构——单链表(c语言笔记)
摘要:本文详细介绍了链式存储结构的基本概念、实现方式及其与顺序存储的对比。链式存储通过节点(包含数据域和指针域)实现非连续存储,具有插入删除高效、内存利用率高等优点,但随机访问效率低。文章提供了C语言实现的单链表完整代码,包括初始化、增删改查、排序等操作,并解释了关键函数的实现逻辑。通过对比分析,突出了链表在动态内存管理上的优势,同时指出了其访问效率上的不足。代码示例展示了带头结点的单链表实现,包含详细的注释和边界条件处理,为理解链表数据结构提供了实践参考。
2025-09-18 19:37:22
2173
原创 数据结构——顺序表(c语言笔记)
本文介绍了线性结构中的顺序表实现。顺序表采用连续存储空间,具有随机访问、存储密度高的特点,但插入删除需移动元素。文章详细展示了顺序表的C语言实现,包括初始化、增删改查、排序反转等操作,并提供了菜单驱动的交互界面。重点说明了动态扩容机制和双指针合并算法,其中合并操作通过比较两个有序表元素实现高效归并。代码实现了完整的内存管理,包含初始化、销毁和错误处理,适合作为数据结构学习的实践案例。
2025-09-13 13:06:56
2361
原创 STM32实践项目(激光炮台)
本文设计了一种基于STM32的双舵机激光炮台控制系统,采用180°限位舵机和360°连续旋转舵机构建双自由度运动机构。系统通过旋转编码器替代传统按键控制,实现更直观的角度调节。针对连续旋转舵机无法直接进行角度控制的问题,采用PID算法实现模拟角度精确调节。系统支持有线与蓝牙无线控制模式,完成了硬件电路搭建、PWM舵机驱动、编码器信号处理和PID算法优化等关键技术。实验证明该系统能精准控制炮台水平与俯仰运动,具有良好稳定性和响应速度。
2025-09-04 22:25:39
4809
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
2229
原创 直流电机驱动与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
806
原创 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
1471
原创 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
2209
原创 STM32的PWM
PWM(脉冲宽度调制)是嵌入式硬件开发的核心技术,通过调节方波的占空比实现电压等效控制。其本质是输出固定周期、可变占空比的方波信号,适用于LED调光、电机控制、舵机驱动等场景。STM32的PWM生成涉及定时器、比较器、死区控制等模块,需配置时钟源、分频器、ARR/CCR寄存器等参数。通过调整CCR值改变占空比,配合极性设置和输出使能,最终在GPIO引脚输出PWM波形。典型应用如呼吸灯效果,展示了PWM从初始化到动态调节的完整流程,体现了其在嵌入式系统中的高效性和灵活性。
2025-08-15 17:23:10
2117
原创 STM32TIM定时器
摘要:STM32的TIM定时器是一个多功能外设,支持外部脉冲计数、波形生成等功能。本文详细解析了TIM2的外部时钟模式2配置流程:从PA0引脚输入脉冲信号,经ETR模块滤波后作为时钟源,通过PSC预分频和CNT计数,配合ARR自动重载值实现脉冲计数。重点阐述了硬件模块间的信号流向、寄存器配置方法(包括GPIO初始化、时钟模式选择、分频设置等)和中断处理机制,并提供了完整的代码实现。特别说明了PSC分频原理和ARR的预装机制(ARPE)对定时器行为的影响,为STM32定时器的外部脉冲计数应用提供了完整参考方案
2025-08-11 17:22:53
1958
原创 STM32的中断系统
摘要 STM32中断机制允许程序在运行中响应外部或内部事件,类似打断作业去开门再返回。中断流程:事件触发→EXTI/NVIC检查→CPU保存现场→执行ISR→恢复现场继续执行。外部中断(如按键)需配置GPIO输入、EXTI线映射及触发方式,并通过NVIC设置优先级;内部中断(如定时器、串口)由外设状态触发。示例展示了红外传感器通过PB14下降沿触发中断计次,主程序读取计数值显示。STM32中断优先级分为抢占优先级和子优先级,需合理配置以确保响应顺序。开发时需注意清除中断标志,避免重复触发。
2025-08-09 19:48:36
2266
原创 STM32的PWR
摘要:本文详细介绍了STM32微控制器的电源管理机制,包括上电复位(POR)、掉电复位(PDR)和可编程电压检测器(PVD)的工作流程。重点阐述了PVD的功能实现,包括初始化配置、中断处理和电压监测,并提供了完整的代码示例。同时对比了STM32的三种低功耗模式(睡眠、停止和待机模式)的特点及实现方法,展示了如何通过按键控制切换不同功耗状态。文章还说明了相关库函数的使用方法,为STM32电源管理设计提供了实用参考。(149字)
2025-08-06 19:42:40
1485
原创 STM32内部读写FLASH
本文介绍了STM32内部Flash存储器的特性与应用。Flash作为非易失性存储器,具有0x08000000起始地址、掉电不丢失数据等特点,但写入前必须擦除且最小写入单位为16位。文章详细说明了Flash读写操作流程:读取可直接访问地址,而写入需先解锁、擦除页、写入数据再上锁。重点演示了如何将Flash最后一页(1KB)用作数据存储区,包含初始化检查、数据保存和清除功能实现,并提供了完整代码示例。最后还介绍了通过特定地址读取芯片唯一ID和Flash容量的方法,及其在防伪、授权和设备追溯等场景的应用价值。
2025-08-05 18:39:17
1797
原创 STM32的SPI通信(硬件读取W25Q64)
本文详细介绍了硬件SPI读取W25Q64的配置与实现方法,重点分析了SPI初始化结构体(SPI_InitTypeDef)各参数含义。相比软件模拟SPI,硬件SPI通过SPI1寄存器自动完成SCK、MOSI、MISO的逻辑处理,具有高速稳定、自动同步等优势。文章详细说明了GPIO初始化、SPI配置、数据传输函数实现,并对比了连续传输和非连续传输的特点及适用场景。其中SPI初始化参数包括工作模式(主/从)、数据位宽、时钟极性和相位、片选控制方式、波特率分频等关键配置项,这些参数需要根据外设要求进行设置。
2025-08-04 15:57:03
1664
原创 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
1431
原创 STM32的GPIO_SetBits()论述
摘要:GPIO_SetBits()在开漏输出模式(如I2C)中通常不需要,因为开漏输出只能主动拉低电平,高电平由外部上拉电阻实现。使用硬件I2C外设时(GPIO_Mode_AF_OD),引脚控制权交给外设,手动拉高会冲突。仅在模拟I2C或推挽输出时需要手动设置高低电平。开漏模式保证了I2C总线的"线与"特性,避免短路。
2025-08-02 11:08:59
581
原创 STM32的I2C通信(硬件读写MPU6050)
本文详细介绍了通过硬件方式读写MPU6050传感器的I2C通信流程。主要内容包括:1)硬件读写的关键函数实现,如等待I2C事件的超时机制;2)完整的硬件写寄存器流程(START→地址→寄存器→数据→STOP)和读寄存器流程(包含RESTART操作);3)STM32标准库中I2C相关函数的功能说明;4)MPU6050初始化流程及关键寄存器配置;5)读取加速度计和陀螺仪原始数据的实现方法。通过硬件方式操作MPU6050相比软件模拟更高效可靠,适合对实时性要求较高的应用场景。
2025-08-01 09:06:10
1584
原创 STM32的I2C通信(软件读取MPU6050)
本文详细解析了STM32中I2C通信的实现原理与应用方法。文章首先介绍了通信模式(单工/半双工/全双工)的区别,重点阐述了软件I2C通过GPIO模拟SDA/SCL信号线的底层机制。作者系统梳理了实现I2C通信所需的五个核心函数:起始/停止信号、字节收发和ACK确认,并提供了具体代码实现。针对时序与代码结合的关键难点,文章以MPU6050为例,分别给出了完整的读写流程实现代码,包括设备寻址、寄存器操作和数据传输等关键步骤。最后特别强调了SCL/SDA电平变化时序的重要性,为初学者掌握I2C通信提供了清晰的指导
2025-07-31 23:32:49
1621
原创 STM32的GPIO位结构详解
本文深入解析STM32的GPIO底层结构与工作原理。从保护二极管、上/下拉电阻到MOS驱动电路,详细阐述了GPIO的保护机制(钳位二极管防静电)、输入稳定(施密特触发器抗抖动)和输出驱动(推挽/开漏模式选择)。重点分析了不同应用场景下的模式选择策略:独立控制用推挽,共享线路用开漏。同时介绍了复用功能配置方法,揭示了GPIO寄存器如何控制引脚模式、输出类型及速度等关键参数。通过底层电路分析,帮助开发者从根本上理解GPIO的工作机制,避免配置错误。
2025-07-30 21:38:25
1374
原创 STM32的看门狗详解
STM32的看门狗机制是防止系统死机的重要保障,分为独立看门狗(IWDG)和窗口看门狗(WWDG)。IWDG使用内部低速时钟,独立于主系统,通过定期"喂狗"防止系统跑飞;WWDG则额外检测喂狗时机,可发现程序逻辑异常。两者都需正确配置超时参数,但IWDG更常用。看门狗一旦启动无法关闭,必须严格遵循喂狗时序,确保系统稳定运行。
2025-07-28 22:37:03
1584
原创 STM32中的指针
本文梳理了C/C++中指针的核心概念和使用方法。指针是保存内存地址的变量,包含自身地址和指向地址。文章详细解释了*p与p的区别、指针定义与解引用、底层存储原理及类型含义。同时介绍了空指针、指针数组等常见类型,以及指针在参数传递、动态内存分配和结构体访问中的实际应用,并总结了野指针、空指针解引用等常见错误。通过底层视角帮助读者更清晰地理解指针机制。
2025-07-27 21:00:03
1139
原创 STM32(基于C语言的)时间戳转换基础
本文详细介绍了C语言标准库time.h中的9个关键时间处理函数,涵盖时间戳获取、转换、格式化及计算等功能。主要内容包括:获取当前时间戳的time()函数;时间戳与字符串互转的ctime()和asctime();本地/UTC时间转换的localtime()和gmtime();时间结构体与时间戳互转的mktime();计算时间差的difftime();CPU耗时测量的clock();自定义格式化的strftime()函数。文章通过具体代码示例演示了每个函数的用法,并特别标注了线程安全、月份索引等使用注意事项。
2025-07-26 22:02:46
1758
原创 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
1043
原创 stm32舵机不运作或者舵机执行延迟很高
摘要:调试STM32驱动舵机时出现异常,舵机间歇性运作。经检查代码无误后更换舵机仍无效。通过LED测试发现时钟频率异常,分析发现晶振函数未启用,导致主频由72MHz降至8MHz。最终确认因接线错误烧毁晶振,更换新STM32后问题解决。提醒注意舵机接线时可能损坏晶振。(149字)
2025-07-24 21:23:39
397
此处是基于ros(机器人操作系统)下由python代码实现的静态图像识别
2025-09-17
STM32有线激光云台项目
2025-09-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅