自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 STM32——HAL库学习(实物)红外传感器计次,旋转编码器

摘要 EXTI(外部中断/事件控制器)是STM32单片机的“哨兵系统”,用于检测GPIO引脚的电平变化(如上升沿、下降沿或双边沿)并触发中断或事件。STM32F103C8T6的EXTI提供20条独立通道(0~19),支持灵活配置,包括软件触发、优先级管理和与NVIC(嵌套向量中断控制器)的协作。通过AFIO/SYSCFG实现引脚映射,确保EXTI与GPIO的正确连接。实际应用如对射红外传感器(下降沿触发)和旋转编码器(正交信号检测)可通过CubeMX便捷配置中断,并在Keil中编写中断服务函数,实现精准计数

2025-11-03 22:06:56 987 2

原创 6层高速PCB设计,立创-逻辑派FPGA-G1开发板,万字笔记。基于立创EDA高速PCB,FPGA,GW2A-LV18PG256C8/17、GD32F303CBT6学习笔记

本文详细记录了使用立创EDA专业版设计六层FPGA开发板PCB的全过程,涵盖原理图导入、元件布局、叠层设计、高速信号布线、电源处理等关键环节。作者首先分析了电源树结构,按模块化思路进行元件布局,重点处理了DDR3、HDMI等高速信号的阻抗控制和等长调节。通过合理设置6层板叠层结构(包含两个完整地平面),并严格遵循3W间距原则,确保信号完整性。设计过程中充分考虑了电源载流能力、EMC防护和结构兼容性,最终完成了符合生产规范的Gerber文件输出。文章还分享了立创EDA的使用技巧,如快捷键设置、模块复用等实用功

2025-10-31 07:00:00 1896 1

原创 STM32仿真,低成本学习STM32-LED闪烁-流水灯

摘要:本文介绍了在STM32上实现LED灯控制的具体步骤。首先复制原有工程文件,在仿真软件中搭建LED电路(低电平驱动),通过网络标签连接元件。接着在STM32CubeMX中配置PA1为GPIO输出模式,初始电平设为高电平。使用HAL库函数编写LED闪烁程序,包含电平翻转和延时控制。最后编译并将生成的.hex文件下载到单片机进行验证,成功实现LED亮灭效果。文中还提到后续将补充流水灯程序的实现方法。

2025-10-17 09:01:15 1169 2

原创 STM32cubemx仿真,低成本学习stm32

摘要:本文详细介绍了使用Proteus、STM32CubeMX和Keil5搭建STM32仿真环境的完整流程。首先在Proteus中创建工程并添加STM32F103C8芯片,接着在STM32CubeMX中配置时钟系统(选择外部晶振8MHz,通过PLL倍频至72MHz),生成Keil工程文件。然后在Keil5中进行工程设置(包括编码格式、编译选项等),生成可执行文件后,将.hex文件导入Proteus中的STM32芯片完成仿真环境搭建。整个过程涵盖了从工程创建到编译仿真的关键步骤,为后续STM32开发奠定了基础

2025-10-11 11:03:29 1444

原创 在STM32中,中断服务函数的命名有什么要求?

摘要:STM32中断服务函数(ISR)必须使用启动文件中预定义的名称,如TIM2_IRQHandler。使用步骤包括:1)编写ISR函数并清除中断标志;2)配置NVIC设置优先级;3)使能外设中断。HAL库可通过回调函数处理中断。注意事项:必须清除中断标志、避免长时间操作、正确配置优先级。常见错误包括命名不规范、未清除标志位、在ISR中调用阻塞函数等。遵循这些规则可确保中断功能正常运行。

2025-12-19 11:45:03 161

原创 编码器测速详情解释:PID闭环控制

摘要:本文详细解释了编码器脉冲计数中n×10的含义,其中n表示溢出次数(完整循环数),10代表每个循环的脉冲数(CNT范围0-9)。通过具体示例说明总脉冲数=n×10+x(x为当前CNT值),并纠正了常见的差1错误。关键点在于:每次CNT从9→0的溢出代表完成10个脉冲,n记录完整循环次数。正向旋转时n为正,反向为负,统一公式total=x+n×M可直接表示方向和脉冲总数。文中还对比了里程表和时钟的类比,帮助理解溢出计数的原理。

2025-12-19 11:44:36 492

原创 C语言中union(共同体)的特电是什么?STM32中常用于处理什么数据?

摘要:C语言中的union(共同体)具有内存共享特性,所有成员共用同一段内存空间,大小为最大成员的大小,同一时间只能存储一个成员的值。其典型特点包括内存覆盖、节省内存、类型转换和大小端检测。在STM32嵌入式开发中,union广泛应用于寄存器位域操作、数据包解析、浮点数转换、多数据类型访问、状态标志位管理和通信协议处理。使用union能有效节省内存并提高访问效率,但需注意数据覆盖和字节序问题。最佳实践是添加清晰注释和类型定义,确保紧凑存储。

2025-12-18 13:32:48 317

原创 STM32编码电机闭环PID调节教程。

本文详细介绍了PID控制原理及其在电机转速控制中的应用。首先通过电池电压变化影响电机转速的例子,说明了闭环控制的必要性。接着阐述了编码器测速原理,包括霍尔传感器正交波形检测和定时器计数方法。在程序实现部分,重点讲解了编码器计数、定时器中断处理和PWM波形生成等技术细节,并演示了如何通过L298N驱动模块控制电机。最后深入探讨了PID控制算法,通过调整P、I参数实现转速的精确控制,分析了参数设置不当可能导致的振荡问题。整个系统实现了电机转速的闭环反馈控制,展示了PID控制在工业自动化中的实际应用。

2025-12-18 13:27:32 994

原创 基于STM32直流电机的PID调节+程序对比,可应用于倒立摆,平衡车等等

本文用司机开车比喻形象讲解PID控制原理:Kp(大力士)快速缩小误差,Ki(坚持者)消除静差,Kd(刹车手)抑制震荡。针对电机控制特点,重点说明死区(4000PWM启动门槛)和积分限幅(防止输出饱和)的关键作用,并通过实际测试数据验证参数调整效果(Kp=1.5/Ki=0.2/Kd=0.5时,电机能平稳达到100RPM)。最后给出参数调节口诀:先调Kp至响应快速无震荡,再调Ki消除静差,最后用Kd抑制震荡,同时确保死区偏置与最小PWM匹配,积分限幅留有足够调节空间。

2025-12-17 08:56:52 990

原创 STM32编程方法:通过函数指针来实现PWM电机速度设置,嵌入式。

本文展示了如何使用函数指针实现硬件抽象层(HAL),以STM32控制小车电机为例。通过定义void(*set_speed_left)(int16_t speed)这样的函数指针,将"设置速度"的操作与具体实现解耦。上层代码只需调用函数指针,无需关心底层是PWM还是其他驱动方式。当硬件更换时,只需修改初始化时的函数绑定,无需改动上层逻辑。这种方法实现了硬件隔离,提高了代码的可维护性和可测试性,是嵌入式系统开发中面向接口编程的典型实践。

2025-12-17 08:56:14 336

原创 在STM32函数指针是什么,怎么使用还有典型应用场景。

摘要:函数指针在STM32开发中相当于"遥控器",通过回调机制实现硬件与应用解耦。典型应用包括中断处理、状态机实现等,如HAL库通过__weak定义回调函数插槽。使用时需注意空指针检查、函数签名一致和指针初始化。核心价值在于驱动层框架与应用层逻辑分离,提升代码可维护性。开发时可通过模仿HAL库中__weak定义的函数快速上手。

2025-12-16 10:13:27 650

原创 基于STM32的平衡车开发计划-1-PWM设置

摘要:本文介绍了基于STM32F103C8T6的PWM输出配置和编码器测速实现。首先通过HAL库配置TIM1的PWM输出,实现了动态调节占空比功能。然后详细讲解了使用TIM3编码器接口进行电机测速的方法,包括编码器模式配置、溢出中断处理和速度计算算法。重点阐述了正向/反向旋转时的脉冲计数逻辑和速度计算公式,通过TIM2定时器提供时间基准,结合脉冲数和溢出次数计算转速。最后给出了完整的测速流程和中断处理方案,为平衡车等应用提供了实用的电机控制解决方案。

2025-12-16 10:04:02 829

原创 嵌入式面试问题:typedef在配置STM32寄存器中最常见的用途是什么?如何使用的?一个文章教会你如何封装函数

本文总结了typedef在STM32寄存器配置中的常见用法:1)定义寄存器结构体类型(如GPIO_TypeDef),将外设寄存器组织为结构体成员;2)结合位域和联合体实现精细位控制;3)定义配置参数枚举类型(如GPIOMode_TypeDef);4)创建初始化结构体(如GPIO_InitTypeDef)。关键优势包括提高代码可读性、类型安全性及可维护性,同时需注意寄存器对齐、volatile关键字使用等细节。通过typedef可实现面向对象风格的寄存器访问,简化STM32硬件编程。

2025-12-15 09:23:41 367

原创 嵌入式面试问题:STM32中指针和数组的本质区别是什么,常用数组存储什么数据?

摘要: STM32中指针与数组的核心区别在于:数组静态分配固定内存(如uint8_t array[100]),直接存储数据;指针动态分配(如malloc)或指向现有内存,仅存储地址。关键差异包括sizeof行为(数组返回总大小,指针返回地址大小)、地址操作及内存布局(数组连续存储,指针间接引用)。STM32常用数组存储外设缓冲区(UART/ADC)、信号处理数据(FFT)、系统配置(PWM表)等,优先静态分配以提升实时性。特殊场景需考虑内存分段(如CCMRAM)、对齐要求(DMA)及缓存优化。最佳实践推荐静

2025-12-15 09:23:17 642

原创 如何理解C语言中操作指针内存来更改变量

摘要:本文介绍了单片机开发中通过C语言操作内存的基本方法。主要内容包括:1)使用变量绑定内存空间并读写数据;2)指针变量的定义和使用,通过指针访问指定内存地址;3)不同数据类型(int、short、char)对内存空间的占用方式;4)十六进制数在代码中的表示方法。重点阐述了如何通过指针变量直接操作特定内存地址,以及基本数据类型与内存空间的关系。

2025-12-14 09:22:16 415

原创 连续形式PID和离散PID-详情学习-江科大(学习笔记)

本文介绍了离散PID与连续PID的区别及实现方法。连续PID需要模拟电路实现,而离散PID适合单片机应用,通过设定调控周期T进行间隔调控。文章详细讲解了离散化过程,包括P、I、D项的离散化方法,以及位置式PID和增量式PID的公式推导与区别。位置式PID输出全量值,适用于大多数场景;增量式PID输出变化量,适合步进电机等执行机构。最后给出了两种PID的程序实现思路,包括变量定义、误差处理和输出限幅等关键代码逻辑。文中强调调控周期T的选择要合理,并指出不同实现方式的优缺点及适用场景。

2025-12-14 09:21:46 1035

原创 江协科技-PID基本原理-(学习笔记)-主页有所有STM32外设的笔记基本都是万字起步。

本文介绍了PID控制算法的基本原理及其在平衡车项目中的应用。首先阐述了PID的核心思想是通过比例(P)、积分(I)、微分(D)三项调节实现实际值对目标值的快速跟踪。重点分析了比例项的作用特点及其导致的稳态误差问题,指出积分项能消除稳态误差但存在滞后性,微分项则能抑制系统振荡。通过电机调速和倒立摆等实例展示了不同参数组合下的控制效果,说明电机调速适合PI控制,而位置控制更适用PD控制。文章为平衡车项目提供了PID算法实现的理论基础,强调了参数调校的重要性。

2025-12-13 11:04:36 1579

原创 STM32得中断服务函数,为什么不能有返回值

中断服务函数(ISR)没有返回值是由硬件机制决定的。中断是硬件触发的事件响应,而非软件调用:1) 硬件自动保存/恢复现场,没有调用者接收返回值;2) ISR的核心是快速处理事件(清除标志、读取数据),而非计算结果;3) 与主程序通过全局变量、缓冲区等共享数据通信;4) 必须保持短小精悍以确保系统实时性。这种硬件驱动的异步响应机制决定了ISR不需要也不支持返回值,合理使用共享变量才是正确的通信方式。

2025-12-13 11:03:42 1038

原创 C语言中static修斯局部变量,全局变量和函数时分别由什么特性

摘要:C语言中static关键字有三种用法:修饰局部变量可延长其生命周期至程序结束,保持值不变但作用域不变;修饰全局变量和函数可限制其作用域仅在当前文件,避免命名冲突。static常用于计数器、单例模式、缓存等场景,但需注意线程安全、初始化时机等问题。最佳实践包括优先使用static隐藏实现、避免递归中使用等。static的核心是"限制作用域,延长生命周期",合理使用可提升代码模块化和安全性。

2025-12-12 19:28:55 536

原创 STM32外设学习-读取芯片ID。(学习笔记)

本文介绍了STM32芯片UID和闪存容量的读取方法。通过OLED显示模块,程序实现了从指定寄存器地址读取16位和32位数据,并显示芯片UID(FF32 066E 32355234 57163559)和64K闪存容量(0040)。详细说明了I2C通信协议、OLED驱动代码及字库的实现原理。测试结果表明读取数据与手册一致,验证了程序的正确性。该教程为STM32基础学习画上句号,为后续进阶学习奠定了基础。

2025-12-12 19:23:03 549

原创 什么是野指针,在STM32中如何避免野指针问题

摘要: 野指针是嵌入式系统(如STM32)中指向无效内存的指针,会导致程序崩溃或硬件错误。主要成因包括未初始化指针、释放后未置空及越界操作。规避方法:1. 初始化与检查:声明时赋NULL,释放后置空,使用前校验;2. 工具辅助:利用静态分析工具和动态内存调试;3. 资源管理:优先静态分配,减少动态内存;4. 防御编程:启用MPU硬件保护。核心建议:静态分配为主,严格初始化,结合工具与硬件防护。(149字)

2025-12-11 08:59:45 973

原创 STM32外设-读写内部Flash-(学习笔记)-上层代码部分

本文介绍了STM32内部Flash存储管理系统的实现过程。首先讲解了Flash底层操作函数,包括解锁/加锁、页擦除、全擦除、读写操作等。然后基于这些底层函数,构建了应用层存储管理系统,通过SRAM数组缓存Flash最后一页数据,实现了断电数据保存功能。系统包含初始化、数据保存、清零等功能模块,并采用A5A5作为首次使用标志位。最后通过OLED显示和按键测试验证了系统功能,包括数据保存、恢复和清零操作。文中还提出了优化建议,如使用宏定义替换固定地址和数组大小,以及限制程序存储范围避免冲突。

2025-12-11 08:53:43 1203

原创 再STM32F103C8T6中小端存储和大端存储有什么不同,STM32F103C8T6用的是那个,为什么要这么使用?

摘要:STM32F103C8T6的Cortex-M3内核采用小端存储模式,即低位字节存储在低地址。小端模式在变量访问和计算效率上具有优势,符合编程直觉且CPU可直接从最低位开始运算。但在与外部设备通信、网络协议处理、Flash数据读取和调试时需注意字节序转换问题。通过简单程序可验证存储模式,正确处理字节序对系统间数据交换至关重要。

2025-12-10 08:51:55 796

原创 STM32外设-读写内部Flash-(学习笔记)-底层代码部分

本文介绍了STM32内部Flash的编程实现方法。主要内容包括:1.硬件连接和调试工具使用;2.Flash操作库函数解析,涵盖解锁/加锁、擦除(单页/全片)、编程写入等核心功能;3.代码实现过程,详细讲解了读取(字/半字/字节)、擦除和写入功能的编程要点;4.测试验证环节,通过实际测试验证了各功能的正确性,包括地址访问方式、擦除效果和写入结果验证。文章特别强调了操作时序和安全性注意事项,如解锁/加锁的必要性以及全片擦除的风险,为嵌入式开发者提供了实用的Flash操作指南。

2025-12-10 08:51:32 670

原创 NOR FLASH和NAND FLASHI的区别以及各自优缺点,还有是干什么的,工作原理以及W25Q64。

摘要:NOR Flash和NAND Flash在嵌入式系统中各有分工。NOR Flash适合存储和执行程序代码,支持随机存取但容量较小;NAND Flash适合存储大量数据,顺序存取但容量大成本低。STM32自带NOR Flash存储程序,扩展存储时SPI接口的NOR Flash(如W25Q64)是首选,因其接口简单、可靠性高。使用需注意擦除机制和写入寿命,可配合文件系统管理数据。对于大容量需求才考虑NAND Flash方案。

2025-12-09 12:23:34 969

原创 STM32外设-Flash闪存-(学习笔记)

本文主要介绍了STM32的Flash闪存操作。内容分为五个部分:1.Flash简介,包括存储器分类、IAP程序更新原理和闪存结构;2.Flash擦除和编程操作,详细讲解了解锁机制、指针访问方法和擦除写入流程;3.选项字节操作,说明其保护功能和特殊擦写方法;4.器件电子签名,介绍ID号的加密应用;5.手册解读要点。重点阐述了闪存管理器的使用、编程时的注意事项以及各种保护机制,为嵌入式开发中的Flash操作提供了完整指导。

2025-12-09 12:17:23 1312

原创 在STM32F103C8T6中IAP和ICP是什么?有什么功能?还有他们各自的区别和用途分别是什么?

摘要:STM32F103C8T6的ICP和IAP是两种关键编程方式。ICP通过SWD/JTAG接口由外部编程器操作,适用于生产烧录和开发调试;IAP则通过芯片自身程序实现现场升级,需预先编写Bootloader。主要区别在于ICP可访问全部Flash且无需芯片程序,而IAP支持远程升级但需通信接口。实际应用中常混合使用:开发阶段用ICP,生产阶段ICP烧Bootloader后IAP更新应用,用户阶段通过IAP升级。关键注意事项包括电源保障、数据校验和保留ICP恢复能力,防止设备变砖。建议保持简洁Bootlo

2025-12-08 09:56:47 846

原创 STM32外设学习-窗口看门狗代码-(学习笔记)

本文介绍了STM32窗口看门狗(WWDG)的实现方法。主要内容包括:1)代码准备和初始化过程,需开启APB1时钟并配置预分频器、窗口值和计数器;2)参数计算示例,演示如何根据50ms超时时间和30ms窗口时间确定预分频系数和计数器值;3)喂狗操作注意事项,强调喂狗时间必须严格控制在窗口时间与超时时间之间;4)测试验证过程,通过调整延时时间确认过早喂狗(30ms)和超时喂狗(50ms)的触发效果。文中还提供了完整的程序代码,包括主程序、按键处理和喂狗操作的具体实现。

2025-12-08 09:55:46 1177

原创 锁相环是什么,为什么可以用来放大时钟频率,怎么做到的,还有预分频起,为什么可以进行分频和倍频?

锁相环(PLL)是一种通过反馈控制实现输出信号与参考信号相位同步的电路系统,由鉴相器、低通滤波器、压控振荡器和分频器组成闭环结构。STM32F103采用PLL技术将8MHz外部晶振倍频至72MHz系统时钟,既避免了高频晶振的高成本和高功耗问题,又满足了CPU高速运行需求。PLL通过分频器实现频率倍增,其本质是计数器原理,每个D触发器可实现二分频。现代MCU普遍采用PLL技术,在低成本晶振基础上实现高性能时钟输出,完美平衡了成本、性能和灵活性。

2025-12-07 13:29:55 1021

原创 STM32外设学习-独立看门狗的代码(学习笔记)-江科大。

本文介绍了STM32独立看门狗(IWDG)的编程实现方法。主要内容包括:1.硬件接线中按键用于阻塞喂狗;2.编程步骤:无需手动开启LSI时钟,通过写入0x5555解除写保护后配置预分频器和重装值,最后启动看门狗;3.详细说明了各关键函数的功能,包括写使能控制、预分频设置、自动重装值设置和喂狗操作;4.通过实验验证了喂狗时间对系统复位的影响,当喂狗时间超过设定值(1000ms)时系统会复位;5.最终实现了按键阻塞喂狗导致复位的完整功能,并提供了完整的代码实现。

2025-12-07 13:22:13 1030

原创 在STM32F103C8T6中Flash的工作原理?以及原理?为什么掉电可以不丢失?

摘要:STM32F103C8T6采用浮栅MOSFET结构的NOR Flash存储器,通过量子隧穿效应实现电子在浮栅中的捕获,确保数据掉电不丢失。其擦写操作以扇区为单位,编程只能将"1"改为"0",擦除则恢复全"1"。相比基于触发器或电容的易失性RAM,Flash具有非易失性但擦写次数有限的特点,适合存储固件和常量数据,而RAM则用于存放运行时变量。这种分工兼顾了数据持久性和运行效率。

2025-12-06 09:08:46 859

原创 STM32外设学习-WDG看门狗-(学习笔记)

本文介绍了STM32的看门狗功能,包括独立看门狗和窗口看门狗两种类型。独立看门狗使用内部低速时钟,通过递减计数器在超时后复位系统,需定期"喂狗"避免复位。窗口看门狗则要求在规定时间窗口内喂狗,使用APB1时钟,具有更严格的时间要求。文章详细分析了两种看门狗的工作框图、寄存器配置和超时时间计算方法,并比较了它们的区别。同时介绍了看门狗在系统异常时的保护机制,以及窗口看门狗特有的"死前中断"功能。最后提醒了使用看门狗时的注意事项和手册查询要点。

2025-12-06 09:08:26 1145

原创 在SM32F103C8T6中MCU和MPU的区别,都有什么各自的优点,缺点,都可以用来干什么。

摘要:本文对比了MCU(如STM32F103C8T6)与MPU的核心差异。MCU是高度集成的片上系统,具有低功耗、实时性强、开发简单等优势,适用于工业控制、消费电子等场景;而MPU专注于计算性能,可运行完整操作系统,适合智能终端、多媒体等复杂应用。两者在计算能力、资源、功耗等方面形成互补,选择取决于项目需求,MCU适合实时控制和低成本方案,MPU则适用于高性能计算和复杂系统开发。STM32作为经典MCU,在嵌入式控制领域具有重要地位。

2025-12-05 14:50:54 861

原创 STM32低功耗学习-停止模式-(学习笔记)

本文介绍了STM32的停止模式及其实现方法。停止模式是一种低功耗模式,只能通过外部中断唤醒。主要内容包括:1) 停止模式特性分析,说明其关闭1.8V区域时钟但仍保留外部中断功能;2) 使用PWR外设库函数配置停止模式的具体步骤;3) 代码实现细节,包括进入停止模式函数PWR_EnterSTOPMode的参数解析;4) 测试中发现的唤醒后时钟降频问题及解决方案。文章提供了完整的代码实现,包括主程序、传感器中断处理和系统初始化等关键部分,实现了在空闲时进入停止模式以降低功耗,通过外部中断唤醒后恢复正常运行的功能

2025-12-05 14:50:19 1071

原创 在stm32F103C8T6中,Thumb指令是什么?有什么作用?可以干什么?

STM32F103C8T6采用Thumb-2指令集,这是一种16/32位混合的高效指令编码格式。其核心优势在于:1)高代码密度,相比ARM指令节省30-40%存储空间;2)性能与功耗平衡,通过提高缓存命中率实现接近ARM指令的性能;3)特别适合资源受限的MCU应用。在实际开发中,编译器会自动优化为Thumb指令,开发者主要需在调试和优化时关注。该技术使STM32能在64KB Flash中实现更复杂功能,是Cortex-M系列高效运行的关键。

2025-12-04 14:35:41 383

原创 STM32低功耗学习-待机模式-(学习笔记)

摘要:本文介绍了STM32待机模式的实现方法。首先基于RTC实时时钟代码进行修改,设置OLED显示秒计数器、闹钟值和标志位。通过设置闹钟值(当前秒数+10)触发待机模式,测试表明待机模式唤醒后程序从头执行。文章详细讲解了待机模式函数的工作原理,包括清除唤醒标志位、设置STANDBY模式和深度睡眠等步骤。实测待机电流仅3.3μA,符合手册参数。最后提供了完整的main.c和MyRTC.c代码实现,包括RTC初始化、时间设置和读取等功能。

2025-12-04 14:27:22 1038

原创 在STM32F103C8T6中什么是读写寄存器模型,有什么用,可以干什么,详细解释。

摘要:STM32F103C8T6通过内存映射的特殊功能寄存器控制硬件外设,寄存器地址范围为0x4000_0000-0x5FFF_FFFF。该模型支持直接硬件控制、外设配置、中断管理和DMA操作,提供三种编程方式:直接寄存器操作(高效但复杂)、标准外设库(易读但冗余)和HAL/LL库(平衡性能与可移植性)。关键技巧包括使用volatile防止优化、位操作和调试寄存器查看。寄存器级编程可实现最小代码、最高性能和精确时序控制,是资源受限场景下的核心技能。

2025-12-03 10:56:26 460

原创 STM32外设-睡眠模式-串口发送+接收(低功耗)

本文介绍了STM32低功耗模式中睡眠模式的应用实现。通过串口通信示例,展示了如何利用WFI指令使CPU进入睡眠状态,同时保持USART外设工作以接收数据。当USART接收到数据产生中断时,CPU被唤醒执行中断服务程序,处理完数据后再次进入睡眠。文中详细分析了程序执行流程,并提供了完整的代码实现,包括主程序、串口初始化和中断处理等关键部分。这种方案在保证随时响应外部指令的同时,有效降低了系统在空闲状态下的功耗。

2025-12-03 10:55:55 1048

原创 在说STM32F103C8T6中什么是CRC校验计算?有什么用?可以干什么?

摘要:STM32F103C8T6内置硬件CRC模块,采用32位CRC-32标准(多项式0x4C11DB7),支持快速数据校验。该模块通过专用寄存器实现硬件加速,计算速度比软件实现快10-100倍,且几乎不占用CPU资源。主要应用于固件验证、通信协议校验(UART/SPI/I2C)和存储介质检查(Flash/EEPROM/SD卡)。使用时需使能CRC时钟,通过数据寄存器写入待校验数据即可获取结果。虽然支持32位固定多项式计算且无中断功能,但硬件CRC在提升系统可靠性、简化验证逻辑方面优势明显,是嵌入式系统中高

2025-12-02 11:45:50 420

原创 STM32外设学习-修改主频(实现低功耗)学习笔记

摘要:本文介绍了如何通过修改STM32主频来降低功耗。首先通过OLED显示屏展示系统主频变化,并详细解析了RCC时钟树配置,包括HSI、HSE等时钟源和AHB/APB总线时钟分配。重点讲解了system_init函数如何根据宏定义选择不同主频配置(如72MHz或36MHz),以及修改主频后对计时函数的影响。实验显示降低主频会导致delay等计时函数异常,需要根据SystemCoreClock变量进行自适应调整。文章强调修改主频会影响整个系统时序,建议谨慎操作。

2025-12-02 11:41:13 926

空空如也

空空如也

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

TA关注的人

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