自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux基本指令(包含vim,用户,文件等方面)超详细

linux常见的所有指令总结

2025-06-11 16:54:37 266

原创 STM32 Flash 实战全解:存储结构、编程操作与安全机制深度剖析

组成部分程序存储器(主存储器):存储程序代码,起始地址0x08000000,容量根据芯片型号不同(如 C8T6 为 64KB)。系统存储器:存储原厂 Bootloader,用于串口下载程序,起始地址0x1FFFF000,容量 2KB。选项字节(Option Bytes):存储配置参数(如读写保护、看门狗设置),起始地址0x1FFFF800,容量 16 字节。特点:非易失性存储器(掉电不丢失),写入前需擦除,擦除最小单位为页(Page)。volatile。

2025-06-10 09:58:25 841

原创 保姆级教程|STM32 IWDG 与 WWDG 看门狗:原理、配置及实战实验全攻略

英文名称本质功能硬件级程序运行监控机制,通过 “喂狗”(重置计数器)避免程序卡死 / 跑飞。类比 “自动重启按钮”,在程序异常时强制复位,保障系统可用性。应用场景嵌入式系统(如 STM32)中防止软件漏洞、硬件故障(如传感器卡死)、电磁干扰导致的系统崩溃。尤其适用于无人值守设备、工业控制等高可靠性场景。

2025-06-09 10:28:21 622

原创 STM32 低功耗设计全攻略:PWR 模块原理 + 睡眠 / 停止 / 待机模式实战(串口 + 红外 + RTC 应用全解析)

定位宏定义位置打开文件,找到预编译宏定义区域(文件头部)。核心配置项为 #define SYSCLK_FREQ_XXX,其中XXX对应不同主频(如 72MHz、36MHz 等)。根据设备型号选择配置分支超值系列(如 VL 型号):仅支持 8MHz 和 24MHz 主频。非超值系列(如 F103C8T6):支持 8MHz、24MHz、36MHz、48MHz、56MHz、72MHz 等。通过预编译指令(#ifdef)判断设备类型,选择对应配置分支(非超值系列查看#else分支)。

2025-06-08 10:55:59 1044

原创 嵌入式里的时间魔法:RTC 与 BKP 深度拆解

含义与用途:BKP 即 backup registers,是备份寄存器,可存储用户自定义数据。电源特性:当 VDD 主电源切断,由 VBAT 备用电池供电,系统唤醒、复位时数据不复位。VDD 供电电压 2.0 - 3.6 伏,VBAT 供电电压 1.8 - 3.6 伏。引脚定义:VDD 相关引脚为系统主电源,正常使用时接 3.3 伏电源;VBAT 为备用电池供电引脚,使用 BKP 和 RTC 需接备用电池,电池负极与主电源负极共地。

2025-06-07 09:54:36 1636 3

原创 W25Q64 实战指南:硬件电路、存储架构与指令代码全解析

非易失性存储:数据掉电不丢失,属于 Flash 存储器,对比易失性存储器(如 SRAM/DRAM),适用于需要持久保存数据的场景(如参数存储、字库、固件程序)。低成本与小型化价格仅几元钱,容量范围 4Mb~256Mb(需除以 8 换算为字节,如 W25Q64 为 8MB)。8 引脚封装,节省电路板空间,适合嵌入式系统。SPI 通信接口支持标准 SPI、双重 SPI(160MHz 等效频率)、四重 SPI(320MHz 等效频率),通过 MOSI/MISO 引脚复用实现高速传输。

2025-06-06 09:52:09 737

原创 SPI 通信从入门到精通:时序、硬件、外设实战 一站式全解析

硬件 SPI 电路功能(核心优势)硬件自动处理STM32 内部集成硬件 SPI 收发电路,可自动生成时钟(SCK)、控制数据收发(MOSI/MISO),无需 CPU 实时干预(如软件 SPI 需手动翻转 GPIO 电平)。对比软件 SPI:硬件 SPI 节省 CPU 资源(如发送 1 字节仅需 1 个寄存器操作,软件需 4-8 条 GPIO 指令),传输速度提升(最高 36MHz vs 软件 SPI 的 1-2MHz)。典型场景。

2025-06-06 09:47:04 1261

原创 I2C 外设知识体系:从基础到 STM32 硬件实现

原理:通过手动翻转 GPIO 引脚电平,模拟 I2C 时序(时钟线 SCL 和数据线 SDA)。例:用软件控制 SCL 拉低 / 释放,逐位判断数据位并操作 SDA,生成通信波形。优势灵活性高,无需硬件支持,适用于简单场景。资源限制少,只需复制代码即可开辟多路 I2C 总线。局限依赖软件延时,时序精度较低(同步时序允许一定不规整)。占用 CPU 资源,不适合高频或复杂通信。

2025-06-05 10:26:15 975

原创 MPU6050芯片 寄存器详解与配置指南(详解)

分频值越小,数据刷新越快(如分频值 = 0 时,刷新率 = 8kHz/1=8kHz)。功能:配置采样频率分频系数,控制 ADC 转换速度和数据刷新率。数据刷新率 = 陀螺仪输出时钟频率 /(1 + 分频值)

2025-06-04 12:53:46 817

原创 I2C 通信技术深度解析:硬件原理、时序逻辑与软件模拟实战指南

I2C 总线通过。

2025-06-03 09:26:16 768

原创 数据包发送接收全解析:HEX 与文本数据包的原理、流程及代码实现

实际应用中多字节数据通信需打包分割,避免接收方数据错位,如陀螺仪传感器数据发送。:可在数据高位加标志位,但破坏原有数据且复杂,常用添加包头、包尾方式。可以结合上一文章 USART外设一起学习哦!

2025-06-02 12:45:48 828

原创 USART 串口通信全解析:原理、结构与代码实战

一、USART 的全称与基本定义英文全称USARTUniversalSynchronousAReceiverTransmitter,即通用同步异步收发器。核心功能:实现串行通信,支持同步通信(需时钟信号)和异步通信(无需时钟信号,依赖波特率同步)。与 UART 的本质区别UARTUniversalAReceiverTransmitter,即通用异步收发器仅支持异步通信。关键差异USART 比 UART 多一个同步时钟输出功能(对应引脚 CLK),可在通信中提供时钟信号。

2025-06-01 09:31:43 1646

原创 通信接口 之 串口通信

串口通信模块一般有 VCC、TX、RX、GND 引脚,VCC 供电视情况连接(需要按照从设备供电等),TX 与 RX 交叉连接,单向传输可只接一根通信线,电平标准不一致需加转换芯片。,也可以看做3根通信线,因为数字信号的输出和接收都是以GND为基准进行判断的。数据位表示有效载荷,低位先行;:由起始位、数据位、停止位组成,数据位 8 位代表一个字节,可加奇偶校验位,校验位用于数据验证,有奇校验和偶校验等方式。:应用广泛,成本低、易使用、线路简单,可实现设备互相通信,单片机串口能与电脑等通信,扩展应用范围。

2025-05-31 10:21:07 674

原创 深入剖析 DMA:原理、结构与工作流程详解

DMA 简介功能与权限:英文全称 direct memory access,可直接访问 STM32 内部存储器,包括运行内存、程序存储器、Flash 和寄存器等,能提供外设和存储器或存储器和存储器之间高速数据传输,无需 CPU 干预,节省 CPU 资源。通道数量:STM32 的 DMA 有 12 个独立可配置通道,DMA1 有 7 个通道,DMA2 有 5 个通道,通道是数据转运路径,多个通道转运互不干扰。触发方式:每个通道支持软件触发和特定硬件触发;

2025-05-30 09:52:08 1215

原创 STM32 AD单通道与多通道实战指南

AD 单通道 与 多通道 实战指南

2025-05-29 10:00:22 1257

原创 STM32 ADC工作原理与配置详解

ADC(Analog-Digital Converter)模拟-数字转换器ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁12位逐次逼近型ADC,1us转换时间输入电压范围:03.3V,转换结果范围:0409518个输入通道,可测量16个外部和2个内部信号源规则组和注入组两个转换单元模拟看门狗自动监测输入电压范围STM32F103C8T6 ADC资源:ADC1、ADC2,10个外部输入通道ADC 基础定义全称。

2025-05-28 15:08:29 1185

原创 TIM 编码器接口技术全解:原理、结构、代码实现与应用实例

Encoder Interface 编码器接口编码器接口可接收增量(正交)编码器的信号,根据编码器旋转产生的正交信号脉冲,自动控制CNT自增或自减,从而指示编码器的位置、旋转方向和旋转速度每个高级定时器和通用定时器都拥有1个编码器接口两个输入引脚借用了输入捕获的通道1和通道2编码器接口核心原理与硬件资源基本概念英文名称:Encoder Interface,直接接收正交编码器(增量式编码器)信号。正交信号特性。

2025-05-27 09:28:58 741

原创 STM32 定时器TIM外设 输入捕获技术全解析:原理、电路与应用实战(铁头山羊 江协 双解析)

输入捕获模式下,当通道输入引脚出现指定电平跳变时,当前CNT的值将被锁存到CCR中,可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数。:是一个复用器,有 TRC(从模式控制器信号)、直接和间接三路输入,常用直接和间接,可实现通道间信号交叉引用,节省引脚。:定时器有四个通道,通道一和通道 2、通道 3 和通道 4 内部结构一样,选取部分通道分析内部结构。:以测量脉冲信号脉宽为例,配置定时器,接入信号到通道一和通道二,分别捕捉上升沿和下降沿,计算脉宽。可配合主从触发模式,实现硬件全自动测量。

2025-05-26 11:31:19 1070

原创 STM32 输出比较输出PWM控制呼吸灯小实验(2种实现 铁头山羊与江协科技)

让 LED 亮度连续变化类似正弦函数,将标准正弦函数 y = sin2πt 通过加 1、乘以 0.5 变换到 0 到 1 范围,通过调节 PWM 占空比模拟正弦信号,使 LED 两端电压按此函数变化。:使用 gplo pin remap config 函数进行重映射配置,根据手册选择合适的重映射方式,如将 Tim 2 的 CG1 从 PA0 挪到 PA15 可选择部分重映射一或完全重映射。因为标准的正弦函数,频率为1HZ,是使PWM信号的占空比为这个正弦函数。找到IO口之后,查看GPIO口的配置模式。

2025-05-25 10:10:25 1226

原创 STM32 定时器输出比较深度解析:从原理到电机控制应用 (详解)

直流电机是一种将电能转换为机械能的装置,有两个电极,当电极正接时,电机正转,当电极反接时,电机反转直流电机属于大功率器件,GPIO口无法直接驱动,需要配合电机驱动电路来操作TB6612是一款双路H桥型的直流电机驱动芯片,可以驱动两个直流电机并且控制其转速和方向直流电机及驱动电机特性:将电能转化为机械能,电极正接正转,反接反转,属于大功率器件,GPIO 口无法直接驱动。驱动芯片:选用 TB6612 双路 h 桥型直流电机驱动芯片,可驱动两个直流电机并控制转速和方向,集成度高,外围只需三个滤波电容。

2025-05-24 10:10:03 1599

原创 STM32 TIM 定时器深度剖析:结构、时基、中断与应用开发(超形象详解)

TIM_CLK是系统自动配置的,如果APB2和APB1的分频系数为1,TIM_CLK = PCLK2,如果其他系数 TIM_CLK = 2 * PCLK2,右面同理。和手表类似,手表有石英晶振提供时钟信号,还有其他电路装置进行降频,秒针相当于一个计数器,ARR为59,周期为60,RCR为0,每一个周期产生一个事件。:以自动重装寄存器 AR 为例,在定时器运行中改变 AR 值,不使用预加载机制会导致定时器跑飞,加入预加载机制后,可避免该问题,使计数周期正常过渡。完整main.c代码。

2025-05-23 10:12:53 1142

原创 旋转编码器计次 红外对射传感器计次小实验及其相关库函数详解 (江协科技)

左一器件光栅编码器的工作原理核心组件光栅编码器主要由对射式红外传感器和光栅编码盘组成。对射式红外传感器:由发射端和接收端组成,发射端发出红外光,接收端检测是否接收到红外光。光栅编码盘:一个带有均匀透光 / 遮光条纹的圆盘,安装在旋转轴上,随轴一起转动。工作过程当编码盘静止时,红外传感器的接收端持续接收红外光(或持续被遮挡),输出固定电平(高或低)。当编码盘随旋转轴转动时,其透光 / 遮光条纹会交替遮挡红外光:当条纹透光时,接收端接收到红外光,输出高电平;

2025-05-22 10:32:48 900

原创 时钟树:概念与编程详解 (铁头山羊)

本文详细介绍了单片机中的时钟树概念及其编程实现。时钟树类似于人体的血液循环系统,为单片机的片上外设提供时钟信号。文章首先解释了时钟的基本概念,随后通过比喻和结构对应,阐述了时钟树的组成部分,包括树根、树干和树枝。接着,文章讨论了分频器、锁相环和复用器在时钟树中的作用,并详细分析了时钟树的初始状态

2025-05-21 14:39:18 732

原创 中断全攻略:单片机优先级与 NVIC 详解(超形象解释)

本文介绍了单片机中断的基本概念、优先级、嵌套处理流程以及相关实例。中断是CPU在处理主程序时,因特定条件触发而暂停当前任务,转去处理中断程序,处理完毕后再返回原任务的过程。中断优先级决定了多个中断同时发生时CPU的响应顺序,而中断嵌套则允许更高优先级的中断打断当前中断处理。通过串口控制板载LED的实例,展示了如何利用中断机制优化程序执行,避免数据丢失。此外,文章还详细解释了NVIC内部结构、抢占优先级与子优先级的划分,以及中断排队的原则,并通过练习题加深了对中断处理流程的理解。

2025-05-20 10:11:50 1175

原创 STM32:按键模块 传感器模块 以及 相关C语言知识(详细讲解)

文章主要介绍了按键和传感器模块的工作原理及其在电路中的应用。按键作为常见的输入设备,其机械式弹簧片在按下和松手时会产生抖动,通常通过延时处理来消除抖动。传感器模块通过传感器元件(如光敏电阻、热敏电阻等)的电阻变化,与定值电阻分压后得到模拟电压输出,再通过电压比较器进行二值化处理,得到数字电压输出。文章还详细解释了上拉和下拉电阻的工作原理,以及它们在单频机电路中的应用。此外,文章还介绍了数字输出的实现方式,包括LM393芯片的使用和运算放大器作比较器的工作原理。最后,文章简要提及了C语言中的数据类型和宏定义等

2025-05-19 10:57:09 734

原创 STM32 GPIO输入输出模式(江协科技与铁头 超详细讲解)

GPIO(通用输入输出口)是STM32微控制器中的重要组成部分,可配置为8种输入输出模式,支持0V~3.3V电平,部分引脚可容忍5V。GPIO通过APB2总线挂载,包含寄存器和驱动器,寄存器用于控制引脚的电平输出和读取。GPIO引脚分为输入和输出两部分,输出模式可控制高低电平,用于驱动LED、蜂鸣器等;输入模式可读取电平信号,用于按键输入、ADC电压采集等。GPIO工作模式包括推挽和开漏,推挽模式下MOS管交替工作,开漏模式下P-MOS管始终断开。GPIO还支持复用功能,通过片上外设控制引脚输出。IO的最大

2025-05-18 10:06:59 950

原创 数据结构算法习题通关:树遍历 / 哈夫曼 / 拓扑 / 哈希 / Dijkstra 全解析

习题覆盖面较广 : 树的遍历,哈夫曼树 ,哈夫曼编码,拓扑排序,有关树的基础运算,哈希表, Dijkstra算法(到各点的最短路径)

2025-05-10 22:09:43 728

原创 C++ 移动语义- 详解(附测试代码)

下面代码中,先定义一个a,为左值,打印地址,然后对std::move(a)取地址发现不可以,因为他返回值为右值属性,(可以理解为欺骗了编译器,因为a本质还是没有变化的),因为返回值为右值属性,所以ref 使用右值引用就可以绑定td::move(a),然后对ref取地址发现他绑定的地址还是a原来的地址,对ref赋值,然后再打印a,发现a的值也发生了变化。之前说的 右值只能放在等于号的右边(错误的)下面就是使用左值给左值赋值,编译器还没有报错,所以说明对左值和右值的最本质的区分就是能不能取地址。

2025-05-05 10:30:00 1176

原创 虚函数VS虚拟继承:C++多重继承二义性破解与性能调优 -详解(附测试代码)

对于析构函数,同样存在这样的压抑效果,D类析构执行完后,根据继承声明顺序的反序调用C类的析构函数,C的析构函数执行完后并没有自动调用A的析构函数,而是接下来调用B的析构函数,最后调用A的析构函数。多重继承和虚拟继承对象模型较单一继承复杂的对象模型,造成了成员访问低效率,表现在两个方面:对象构造时 vptr 的多次设定,以及 this 指针的调整。在虚拟继承的结构中,最底层的派生类不仅需要显式调用中间层基类的构造函数,还要在初始化列表最开始调用顶层基类的构造函数。虚拟继承时派生类对象的构造和析构。

2025-05-04 12:30:00 588

原创 C++多继承陷阱全解 (附测试代码)

首先会去调用Derived的析构函数,但是此时是通过一个Base类指针去调用,无法访问到,只能跳过,再去调用Base的析构函数,回收掉存放10这个数据的这片空间,最后调用operator delete回收掉堆对象本身所占的整片空间(编译器知道需要回收的是堆上的Derived对象,会自动计算应该回收多大的空间,与delete语句中指针的类别没有关系 —— delete pbase)其它的虚函数表中对应位置存放的并不是真实的对应的虚函数的地址,而是一条跳转指令 —— 指示到哪里去寻找被覆盖的虚函数的地址。

2025-05-04 09:30:00 651

原创 C++抽象类- 详解(附测试代码)

在B类中去覆盖A类的纯虚函数,如果把所有的纯虚函数都覆盖了(都实现了),B类可以创建对象;基类Figure中定义纯虚函数,交给多个派生类去实现,最后可以使用基类的指针(引用)指向(绑定)不同类型的派生类对象,再去调用已经被实现的纯虚函数。,尽管不符合第一个条件(基类中声明纯虚函数,而非定义),最终的效果仍然是基类指针调用到了派生类实现的虚函数,属于动态多态的特殊情况。是一种特殊的虚函数,在许多情况下,在基类中不能对虚函数给出有意义的实现,而把它声明为纯虚函数,1 . 声明了纯虚函数的类,称为抽象类。

2025-05-03 15:00:00 611

原创 C++虚函数完全指南:从内存布局到动态多态的实现奥秘

而多态除了代码的复用性外,还可以解决项目中紧偶合的问题,提高程序的可扩展性。当类中定义了虚函数之后,就会在对象的存储开始位置,多一个虚函数指针,该虚函数指针指向一张虚函数表,虚函数表中存储的是虚函数入口地址。覆盖(override): 发生在基类派生类之间,基类与派生类中同时定义返回类型、参数信息、名字都相同的虚函数,覆盖的是虚函数表中的入口地址,并不是覆盖函数本身。在虚函数的函数参数列表之后,函数体的大括号之前,加上override关键字,告诉编译器此处定义的函数是要对基类的虚函数进行覆盖。

2025-05-03 12:00:00 742

原创 C++派生类核心机制:类型转换与对象复制控制深度剖析

对于拷贝构造,如果显式定义了派生类的拷贝构造,在其中不去显式调用基类的拷贝构造,那么无法通过复制初始化基类的部分,只能尝试用Base无参构造初始化基类的部分。Base类的指针指向Derived类的对象,d1对象中存在一个Base类的基类子对象,这个Base类指针所能操纵只有继承自Base类的部分;(—— 在派生类的构造函数的初始化列表中没有显式调用基类的任何的构造函数,编译器会自动调用基类的无参构造,此时基类没有无参构造,所以报错)以上三个ok的操作,叫做向上转型(往基类方向就是向上),向上转型是可行的。

2025-05-02 19:37:49 1035

原创 深入解析C++多重继承:从构造析构到二义性问题全攻略 -详解(附测试代码)

其实是因为在客观现实世界中,我们经常碰到一个人身兼数职的情况,如在学校里,一个同学可能既是一个班的班长,又是学生中某个部门的部长;B类和C类对象的内存布局中多出一个虚基类指针,位于所占内存空间的起始位置,同时继承自A类的内容被放在了这片空间的最后位置。D类对象中只会有一份A类的基类子对象。马上调用D类的构造函数,在此过程中会根据继承的声明顺序,依次调用A/B/C的构造函数,创建出这三个类的基类子对象。马上调用D类的析构函数,析构函数执行完后,按照继承的声明顺序的逆序,依次调用A/B/C的析构函数。

2025-05-02 19:34:47 705

原创 C++单继承完全解读:从对象构造到成员隐藏的核心技术(避坑必读)(附带测试代码)

如果定义一个派生类只写了继承关系,没有写任何的自己的内容,那么也会吸收基类的成员,这个情况叫做空派生类(其目的是在特定的场景建立继承关系,为将来的拓展留出空间)当派生类声明了与基类同名的成员函数时,只要名字相同,即使参数列表不同,也只能看到派生类部分的,无法通过派生类对象直接调用基类的同名函数。派生类中声明了和基类的数据成员同名的数据成员,就会对基类的这个数据成员形成隐藏,无法通过派生类对象直接访问基类的这个数据成员。如果继承层次中都采用的是保护继承,任意层次都可以访问顶层基类的非私有成员;

2025-05-01 13:26:06 1051

原创 C++关联式容器操作详解:从set构造到map下标访问的多个高效技巧(STL开发必读)

C++ 关联式容器 set map 用法详解

2025-05-01 13:13:10 642

原创 std::string的底层实现 (详解)

std::string的底层实现 (详解)

2025-04-29 23:53:44 1073

原创 C++ 单例对象自动释放(保姆级讲解)

C++ 单例对象自动释放(保姆级讲解)

2025-04-29 23:47:25 598

原创 C++ 嵌套类 (详解 一站式讲解)

(2)在实现文件中进行具体实现,使用嵌套类的结构(LineImpl是Line的内部类,Point是LineImpl的内部类),Line类对外公布的接口都是使用LineImpl进行具体实现的。Point类是定义在Line类中的内部类,无法直接创建Point对象,需要在Line类名作用域中才能创建,因为point类在line类中,只能先找到line类在访问point类。类作用域是指在类定义内部的范围。Point类是Line类的内部类,并不代表Point类的数据成员会占据Line类对象的内存空间,

2025-04-28 23:16:30 1015

原创 C++ 可调用实体 (详解 一站式)

详细讲解可调用实体 一站式详解

2025-04-28 23:11:09 1201

空空如也

空空如也

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

TA关注的人

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