学习中的疑问
文章平均质量分 82
d111111111d
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
STM32 HAL库定时器PWM输出全攻略:从零到精准控制
本文详细介绍了使用STM32 HAL库配置定时器PWM输出的完整方法。首先讲解了PWM基础概念和STM32定时器的PWM模式,然后分步骤演示了通过CubeMX和手动代码两种配置方式,包括时钟源设置、预分频计算、占空比调节等关键参数配置。文章还提供了互补PWM输出、多通道同步等高级技巧,并封装了实用函数。最后给出了LED呼吸灯、舵机控制等典型应用示例,以及调试技巧和性能优化建议,帮助开发者快速掌握STM32的PWM应用。原创 2026-01-03 11:46:29 · 1163 阅读 · 0 评论 -
STM32 USART接收中断:如何判断数据接收完成?
本文探讨了STM32串口通信中判断数据帧接收完成的四种方法:1)超时判断法,通过字节间隔时间判断;2)特定帧头帧尾法,适用于固定格式协议;3)固定长度法,适合已知长度的数据;4)长度字段法,通过数据包中的长度信息判断。文章建议根据实际需求选择合适方法,推荐结合超时机制与协议解析,并介绍了DMA+IDLE中断的高效方案。最后强调要根据数据格式、协议要求和系统资源选择最优方案,其中超时判断与长度字段的组合适用于多数场景,而高性能需求推荐使用DMA+IDLE中断。原创 2026-01-03 11:39:41 · 435 阅读 · 0 评论 -
STM32 DMA传输配置详解:数据宽度与传输方向设置指南
本文详细介绍了STM32中DMA传输的数据宽度和传输方向配置方法。DMA支持8/16/32位三种数据宽度,需根据外设特性选择并确保内存对齐。传输方向包括内存到外设、外设到内存及内存到内存三种模式,需正确设置DIR寄存器位。文章提供了使用标准库、HAL库和直接寄存器操作的配置示例,并强调了数据宽度匹配、地址递增设置等注意事项。此外还介绍了调试技巧、常见问题解决方案和性能优化建议,如使用FIFO处理数据宽度转换、根据数据量选择传输方式等。合理配置这些参数可充分发挥DMA性能优势,构建高效可靠的嵌入式系统。原创 2026-01-02 15:58:09 · 915 阅读 · 0 评论 -
STM32如何通过寄存器直接禁止EXTI0中断
本文详细介绍了通过寄存器直接操作禁用STM32 EXTI0中断的方法。主要内容包括:1. EXTI中断系统架构,重点说明EXTI_IMR等关键寄存器功能;2. 具体实现步骤:通过清除EXTI_IMR寄存器位0禁用中断线,操作NVIC寄存器禁用中断控制器,并清除挂起标志;3. 提供了完整示例代码和安全操作方法;4. 强调操作顺序、临界区保护等注意事项。该方法虽不如HAL库直观,但对深入理解STM32中断机制具有重要意义,适用于底层调试和性能优化场景,但建议日常开发仍优先使用标准库保证可维护性。原创 2026-01-02 15:49:52 · 705 阅读 · 0 评论 -
使用STM32 HAL库配置ADC单次转换模式详解
本文详细介绍了如何使用STM32 HAL库配置ADC单次转换模式。单次转换模式适用于节能或事件触发的场景,仅执行一次转换后自动停止。文章从硬件准备开始,分步骤讲解了引脚初始化、ADC参数配置、通道设置、转换启动与结果读取的实现方法,并提供了完整的示例代码。同时解析了采样时间、触发方式等关键参数,给出了调试技巧和常见问题解决方案,最后提出了使用DMA、校准等性能优化建议。通过本文可以快速掌握STM32 ADC单次转换的基本配置方法。原创 2025-12-31 17:12:41 · 484 阅读 · 0 评论 -
STM32定时器中断配置详解:以TIM2为例
本文详细介绍了STM32定时器中断的配置方法,以TIM2为例讲解了五个关键步骤:1)使能定时器时钟;2)配置预分频器和自动重载值;3)设置中断优先级;4)启动定时器;5)编写中断服务函数。文章提供了1ms定时中断的完整示例代码,并扩展介绍了PWM输出、输入捕获等高级应用。同时指出了调试常见问题,如中断标志未清除、时钟未使能等。针对不同STM32系列(F1/F4/F7)的差异进行了说明,强调掌握底层寄存器操作的重要性。通过本文,开发者可系统学习STM32定时器中断配置,从基础应用到高级功能实现。原创 2025-12-29 13:52:31 · 633 阅读 · 0 评论 -
STM32 GPIO输出模式配置详解:从寄存器层面理解引脚控制
STM32 GPIO寄存器详解及配置方法:本文系统介绍了STM32微控制器的GPIO寄存器组,包括MODER(模式)、OTYPER(输出类型)、OSPEEDR(速度)等7个核心寄存器功能及配置方法。重点解析了输出模式设置、推挽/开漏选择、速度优化等关键配置,提供了完整的LED闪烁示例代码,并对比了F1与F4/F7系列的寄存器差异。文章强调时钟使能、原子操作等最佳实践,给出了位带操作等性能优化技巧,指出寄存器级编程在代码精简、执行效率和控制精度方面的优势,建议开发者结合参考手册灵活选择库函数或直接寄存器操作方原创 2025-12-29 13:43:09 · 825 阅读 · 0 评论 -
STM32的ADC是什么,其转换精度通常有那些选项?
本文深入解析STM32微控制器的模数转换器(ADC)模块,重点探讨其转换精度的关键要素。文章指出ADC精度不仅取决于12位分辨率,更受参考电压稳定性、采样时间配置、时钟频率及PCB布局等多因素影响。详细介绍了偏移误差、增益误差等关键参数,并提供了实用建议:使用外部基准电压源、合理配置采样周期、实施软件校准与滤波等优化措施。通过系统性考虑内部误差和外部条件,开发者可充分发挥STM32ADC性能,实现高精度模拟信号采集。原创 2025-12-28 09:02:52 · 742 阅读 · 0 评论 -
STM32 电源管理模式全解析:低功耗场景该如何选型?
摘要:本文详细解析STM32系列MCU的电源管理模式及其在低功耗场景下的应用。重点介绍四种核心模式(运行、睡眠、停止、待机)的工作机制、功耗范围及适用场景,并提供标准库代码示例。针对不同休眠需求(短时快速响应、中等休眠、长时极低功耗)给出选型策略,强调外设预处理和时钟优化的重要性。最后指出唤醒后时钟恢复、数据保存等实战注意事项,帮助开发者在电池供电场景下优化设备续航能力。原创 2025-12-26 09:51:29 · 721 阅读 · 0 评论 -
STM32F103C8T6中定时器分类以及作用。
STM32F103C8T6单片机定时器功能详解 摘要:STM32F103C8T6内置多种定时器,包括高级控制定时器(TIM1/TIM8)、通用定时器(TIM2-4)、基本定时器(TIM6/7)和看门狗定时器。高级定时器支持互补输出和死区控制,适用于电机驱动;通用定时器可实现PWM输出、输入捕获等常用功能;基本定时器提供简单定时功能;看门狗用于系统监控。SysTick定时器为操作系统提供时基。根据具体应用需求,如电机控制、PWM生成或系统保护等,可选择不同类型的定时器实现相应功能。原创 2025-12-25 12:37:29 · 943 阅读 · 0 评论 -
在stm32中什么是hal库,什么是标准库,二者的区别?
摘要:本文对比了STM32开发中的两种主流库——标准库和HAL库。标准库提供寄存器级控制,适合资源受限项目和底层学习;HAL库具有高度抽象和跨平台特性,适合快速开发和复杂应用。文章从架构设计、性能资源、外设支持等方面详细对比了两者差异,并给出选择建议:新项目推荐HAL库,性能关键场景可考虑标准库或LL库。随着ST官方转向HAL库,建议开发者掌握HAL同时保持底层理解能力,根据项目需求灵活选择开发方案。(149字)原创 2025-12-23 08:37:18 · 1651 阅读 · 0 评论 -
STM32复位源全解析:如何通过寄存器精准判断复位原因
摘要:本文深入解析STM32的复位机制,详细介绍了硬件复位(上电/掉电、看门狗等)、软件复位和低功耗复位等复位源类型。重点讲解了通过RCC_CSR寄存器判断复位原因的方法,并提供了实用的复位检测代码实现,包括复位标志读取、清除和统计功能。文章还分享了不同STM32系列的差异处理、常见问题排查技巧,强调掌握复位源判断对系统调试和稳定性优化的重要性,建议将复位检测作为系统初始化标准流程,以提升产品可靠性和维护效率。原创 2025-12-22 09:50:16 · 554 阅读 · 0 评论 -
STM32外设基地址与寄存器偏移地址的深度解析
摘要:本文深入解析STM32嵌入式开发中的地址映射机制,重点阐述外设基地址与寄存器偏移地址的关系。通过分析4GB地址空间划分,详细介绍了AHB/APB总线外设的地址计算方法(基地址+偏移地址),并以GPIO和USART为例演示了地址计算过程。文章还讲解了结构体映射技术、位带操作等高级应用,提供了地址验证和调试技巧。最后总结了最佳实践,强调应使用厂商提供的头文件定义而非硬编码地址,并针对不同芯片系列给出了处理建议。这些知识是理解STM32底层开发和优化代码性能的基础。原创 2025-12-22 09:49:44 · 1163 阅读 · 0 评论 -
C语言中,malloc和free是什么,在STM32中使用限制是什么,该如何使用?
本文介绍了STM32中malloc和free的使用限制及正确方法。由于STM32内存资源有限且实时性要求高,动态内存分配可能导致碎片化、响应延迟等问题。推荐优先使用静态分配或内存池方案,若必须使用malloc/free,应配置合理堆空间、避免频繁分配释放,并确保配对使用。在RTOS环境中建议使用系统自带的内存管理,或实现自定义内存管理器。关键要限制分配大小、减少分配次数,避免在中断等关键场景使用,同时做好内存监控和错误处理。对于资源受限的STM32,静态内存分配是最安全可靠的选择。原创 2025-12-21 10:10:20 · 538 阅读 · 0 评论 -
什么是内存对齐?在STM32上面如何通过编辑器指令来实现内存对齐。
内存对齐是计算机系统中数据存储的重要概念。本文通过书架和超市购物等生活比喻,解释了内存对齐的基本原理。重点介绍了STM32(ARMCortex-M)处理器的特殊对齐要求,包括4字节字、2字节半字的强制对齐规则。文章提供了多种保证内存对齐的编程方法,如GCC的__attribute__属性、ARM编译器指令和C11标准方法,并给出DMA缓冲区、网络数据包等实际应用示例。最后总结了STM32开发中的最佳实践,强调正确处理内存对齐可以避免硬件错误并提升程序性能。原创 2025-12-20 18:58:43 · 848 阅读 · 0 评论 -
在STM32中,中断服务函数的命名有什么要求?
摘要:STM32中断服务函数(ISR)必须使用启动文件中预定义的名称,如TIM2_IRQHandler。使用步骤包括:1)编写ISR函数并清除中断标志;2)配置NVIC设置优先级;3)使能外设中断。HAL库可通过回调函数处理中断。注意事项:必须清除中断标志、避免长时间操作、正确配置优先级。常见错误包括命名不规范、未清除标志位、在ISR中调用阻塞函数等。遵循这些规则可确保中断功能正常运行。原创 2025-12-19 11:45:03 · 295 阅读 · 0 评论 -
C语言中union(共同体)的特电是什么?STM32中常用于处理什么数据?
摘要:C语言中的union(共同体)具有内存共享特性,所有成员共用同一段内存空间,大小为最大成员的大小,同一时间只能存储一个成员的值。其典型特点包括内存覆盖、节省内存、类型转换和大小端检测。在STM32嵌入式开发中,union广泛应用于寄存器位域操作、数据包解析、浮点数转换、多数据类型访问、状态标志位管理和通信协议处理。使用union能有效节省内存并提高访问效率,但需注意数据覆盖和字节序问题。最佳实践是添加清晰注释和类型定义,确保紧凑存储。原创 2025-12-18 13:32:48 · 384 阅读 · 0 评论 -
嵌入式面试问题:typedef在配置STM32寄存器中最常见的用途是什么?如何使用的?一个文章教会你如何封装函数
本文总结了typedef在STM32寄存器配置中的常见用法:1)定义寄存器结构体类型(如GPIO_TypeDef),将外设寄存器组织为结构体成员;2)结合位域和联合体实现精细位控制;3)定义配置参数枚举类型(如GPIOMode_TypeDef);4)创建初始化结构体(如GPIO_InitTypeDef)。关键优势包括提高代码可读性、类型安全性及可维护性,同时需注意寄存器对齐、volatile关键字使用等细节。通过typedef可实现面向对象风格的寄存器访问,简化STM32硬件编程。原创 2025-12-15 09:23:41 · 398 阅读 · 0 评论 -
嵌入式面试问题:STM32中指针和数组的本质区别是什么,常用数组存储什么数据?
摘要: STM32中指针与数组的核心区别在于:数组静态分配固定内存(如uint8_t array[100]),直接存储数据;指针动态分配(如malloc)或指向现有内存,仅存储地址。关键差异包括sizeof行为(数组返回总大小,指针返回地址大小)、地址操作及内存布局(数组连续存储,指针间接引用)。STM32常用数组存储外设缓冲区(UART/ADC)、信号处理数据(FFT)、系统配置(PWM表)等,优先静态分配以提升实时性。特殊场景需考虑内存分段(如CCMRAM)、对齐要求(DMA)及缓存优化。最佳实践推荐静原创 2025-12-15 09:23:17 · 664 阅读 · 0 评论 -
如何理解C语言中操作指针内存来更改变量
摘要:本文介绍了单片机开发中通过C语言操作内存的基本方法。主要内容包括:1)使用变量绑定内存空间并读写数据;2)指针变量的定义和使用,通过指针访问指定内存地址;3)不同数据类型(int、short、char)对内存空间的占用方式;4)十六进制数在代码中的表示方法。重点阐述了如何通过指针变量直接操作特定内存地址,以及基本数据类型与内存空间的关系。原创 2025-12-14 09:22:16 · 422 阅读 · 0 评论 -
STM32得中断服务函数,为什么不能有返回值
中断服务函数(ISR)没有返回值是由硬件机制决定的。中断是硬件触发的事件响应,而非软件调用:1) 硬件自动保存/恢复现场,没有调用者接收返回值;2) ISR的核心是快速处理事件(清除标志、读取数据),而非计算结果;3) 与主程序通过全局变量、缓冲区等共享数据通信;4) 必须保持短小精悍以确保系统实时性。这种硬件驱动的异步响应机制决定了ISR不需要也不支持返回值,合理使用共享变量才是正确的通信方式。原创 2025-12-13 11:03:42 · 1071 阅读 · 0 评论 -
C语言中static修斯局部变量,全局变量和函数时分别由什么特性
摘要:C语言中static关键字有三种用法:修饰局部变量可延长其生命周期至程序结束,保持值不变但作用域不变;修饰全局变量和函数可限制其作用域仅在当前文件,避免命名冲突。static常用于计数器、单例模式、缓存等场景,但需注意线程安全、初始化时机等问题。最佳实践包括优先使用static隐藏实现、避免递归中使用等。static的核心是"限制作用域,延长生命周期",合理使用可提升代码模块化和安全性。原创 2025-12-12 19:28:55 · 568 阅读 · 0 评论 -
什么是野指针,在STM32中如何避免野指针问题
摘要: 野指针是嵌入式系统(如STM32)中指向无效内存的指针,会导致程序崩溃或硬件错误。主要成因包括未初始化指针、释放后未置空及越界操作。规避方法:1. 初始化与检查:声明时赋NULL,释放后置空,使用前校验;2. 工具辅助:利用静态分析工具和动态内存调试;3. 资源管理:优先静态分配,减少动态内存;4. 防御编程:启用MPU硬件保护。核心建议:静态分配为主,严格初始化,结合工具与硬件防护。(149字)原创 2025-12-11 08:59:45 · 1011 阅读 · 0 评论 -
再STM32F103C8T6中小端存储和大端存储有什么不同,STM32F103C8T6用的是那个,为什么要这么使用?
摘要:STM32F103C8T6的Cortex-M3内核采用小端存储模式,即低位字节存储在低地址。小端模式在变量访问和计算效率上具有优势,符合编程直觉且CPU可直接从最低位开始运算。但在与外部设备通信、网络协议处理、Flash数据读取和调试时需注意字节序转换问题。通过简单程序可验证存储模式,正确处理字节序对系统间数据交换至关重要。原创 2025-12-10 08:51:55 · 823 阅读 · 0 评论 -
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 · 1021 阅读 · 0 评论 -
在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 · 865 阅读 · 0 评论 -
锁相环是什么,为什么可以用来放大时钟频率,怎么做到的,还有预分频起,为什么可以进行分频和倍频?
锁相环(PLL)是一种通过反馈控制实现输出信号与参考信号相位同步的电路系统,由鉴相器、低通滤波器、压控振荡器和分频器组成闭环结构。STM32F103采用PLL技术将8MHz外部晶振倍频至72MHz系统时钟,既避免了高频晶振的高成本和高功耗问题,又满足了CPU高速运行需求。PLL通过分频器实现频率倍增,其本质是计数器原理,每个D触发器可实现二分频。现代MCU普遍采用PLL技术,在低成本晶振基础上实现高性能时钟输出,完美平衡了成本、性能和灵活性。原创 2025-12-07 13:29:55 · 1079 阅读 · 0 评论 -
在STM32F103C8T6中Flash的工作原理?以及原理?为什么掉电可以不丢失?
摘要:STM32F103C8T6采用浮栅MOSFET结构的NOR Flash存储器,通过量子隧穿效应实现电子在浮栅中的捕获,确保数据掉电不丢失。其擦写操作以扇区为单位,编程只能将"1"改为"0",擦除则恢复全"1"。相比基于触发器或电容的易失性RAM,Flash具有非易失性但擦写次数有限的特点,适合存储固件和常量数据,而RAM则用于存放运行时变量。这种分工兼顾了数据持久性和运行效率。原创 2025-12-06 09:08:46 · 880 阅读 · 0 评论 -
在SM32F103C8T6中MCU和MPU的区别,都有什么各自的优点,缺点,都可以用来干什么。
摘要:本文对比了MCU(如STM32F103C8T6)与MPU的核心差异。MCU是高度集成的片上系统,具有低功耗、实时性强、开发简单等优势,适用于工业控制、消费电子等场景;而MPU专注于计算性能,可运行完整操作系统,适合智能终端、多媒体等复杂应用。两者在计算能力、资源、功耗等方面形成互补,选择取决于项目需求,MCU适合实时控制和低成本方案,MPU则适用于高性能计算和复杂系统开发。STM32作为经典MCU,在嵌入式控制领域具有重要地位。原创 2025-12-05 14:50:54 · 879 阅读 · 0 评论 -
在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 · 400 阅读 · 0 评论 -
在STM32F103C8T6中什么是读写寄存器模型,有什么用,可以干什么,详细解释。
摘要:STM32F103C8T6通过内存映射的特殊功能寄存器控制硬件外设,寄存器地址范围为0x4000_0000-0x5FFF_FFFF。该模型支持直接硬件控制、外设配置、中断管理和DMA操作,提供三种编程方式:直接寄存器操作(高效但复杂)、标准外设库(易读但冗余)和HAL/LL库(平衡性能与可移植性)。关键技巧包括使用volatile防止优化、位操作和调试寄存器查看。寄存器级编程可实现最小代码、最高性能和精确时序控制,是资源受限场景下的核心技能。原创 2025-12-03 10:56:26 · 469 阅读 · 0 评论 -
在说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 · 433 阅读 · 0 评论 -
什么是电荷泵,在stm32F103C8T6中有什么作用?
电荷泵是一种利用电容器实现DC-DC电压转换的电路,无需电感器即可升压、降压或反相电压。在STM32F103C8T6中,内部集成的电荷泵专用于将3.3V电源升压至约8V,以支持Flash存储器的编程和擦除操作。用户无需直接控制该电路,但需注意:1) Flash操作时必须遵守规定的编程/擦除等待时间;2) 确保电源稳定性,需配置合适的去耦电容;3) 在Flash操作期间不能进入深度睡眠模式。电荷泵作为关键内部组件,保证了芯片在单一电源下可靠执行Flash操作的能力。原创 2025-12-01 11:49:20 · 917 阅读 · 0 评论 -
在stm32中,为什么i++是原子操作,他是为什么服务的,为什么会出现这种编程方式。
摘要:在STM32等现代微控制器中,i++并非原子操作,而是一个常见的误解。i++实际上会被编译为加载、修改、存储等多个步骤,在多线程或中断环境下可能导致数据竞争。这种误解源于8位单片机的经验、单线程测试以及对底层机制的不了解。正确的原子操作实现方法包括:关闭中断、使用RTOS信号量、C11原子类型或硬件原子指令。开发者必须摒弃"i++是原子操作"的错误观念,对共享变量使用适当的同步机制以确保数据安全。原创 2025-11-30 14:27:09 · 768 阅读 · 0 评论 -
在STM32中,ICP-ISP-IAP都是什么?有什么作用?有什么区别?
STM32程序更新的三种方式对比:ICP、ISP和IAP各有特点。ICP通过专用编程器(JTAG/SWD)直接烧录主Flash,适合开发和批量生产;ISP利用芯片内置Bootloader通过UART/USB等接口更新程序,适合现场维护;IAP则由用户程序自行实现远程更新功能,支持无线升级,但开发复杂度高。三者主要区别在于执行主体(外部工具/内置Bootloader/用户程序)、通信接口和编程对象。ICP速度最快但需专用工具,ISP简单但依赖物理接口,IAP最灵活但存在变砖风险。根据产品需求选择合适方式,开发原创 2025-11-29 10:05:19 · 784 阅读 · 0 评论 -
匿名结构体是什么?再STM32中如何利用匿名结构体来封装函数?是怎么实现的?
摘要:匿名结构体是指定义时不命名的结构体,可直接访问其成员。在STM32开发中,常利用匿名结构体封装函数指针,实现伪面向对象的编程风格。通过将数据和操作函数绑定,形成清晰的模块化代码。具体步骤包括定义函数指针类型、创建主结构体并用匿名结构体分组函数、实现具体函数、注册函数指针等。这种方法提升代码封装性、可读性和可维护性,便于多实例扩展,是嵌入式C程序的重要技巧。STM32的HAL/LL库广泛采用此技术组织外设驱动。原创 2025-11-27 12:59:38 · 792 阅读 · 0 评论 -
在STM32中RTC实时时钟和TIM定时器的区别,分别有什么作用。
STM32F103C8T6中RTC和TIM定时器的核心区别在于功能定位和应用场景。RTC是绝对计时器,提供日历时间功能,依赖外部32.768kHz晶振,具有独立电源域,可在系统断电时继续工作,适用于电子钟、数据记录等场景。TIM是相对计时器,基于主时钟实现精确短时测量,用于PWM生成、脉冲捕获等,断电后计时信息丢失。简言之,RTC回答"现在几点",TIM处理"过了多久",二者在嵌入式系统中各司其职又相互配合。原创 2025-11-26 08:57:13 · 779 阅读 · 0 评论 -
在STM32F103C8T6中电荷泵是什么,有什么作用,
STM32F103C8T6芯片内部包含一个专为Flash编程/擦除服务的电荷泵电路,它通过开关电容方式将2.0-3.6V电源升压至约9V,以满足Flash操作的高电压需求。该电荷泵会在执行Flash操作时自动启用,影响编程时间、电源稳定性和代码执行位置(需在RAM中运行)。此外,芯片还包含一个为内核供电的1.8V主稳压器(LDO),与电荷泵功能不同。理解电荷泵特性对正确进行Flash操作至关重要,需注意其工作时带来的电源完整性要求及特殊编程规则。原创 2025-11-25 12:33:24 · 1003 阅读 · 0 评论 -
在STM32中有参宏定义define该怎么使用
摘要:在STM32F103C8T6开发中,有参宏可提升代码可读性和效率。本文介绍了带参宏的基本语法(#define宏名(参数)替换内容),重点强调参数加括号防止优先级问题,避免参数副作用(如自增操作),并演示了GPIO控制和ADC计算的实用案例。特别指出STM32工程中需在Keil MDK选项里配置全局宏(如STM32F10X_MD)。由于宏是文本替换,需注意参数可能被多次求值,建议遵循安全编码规范。原创 2025-11-24 12:17:10 · 509 阅读 · 0 评论 -
关于STM32的选项字节的问题:如果我通过操作指针把数据写在了单片机的选项字节区域那么换别的程序时候数据会进行变化吗?
摘要:选项字节(Option Bytes)是存储在非易失性存储器中的特殊配置数据,用于设置单片机的硬件参数。在程序更新时,默认情况下选项字节会保留原值,除非新程序或烧录工具主动修改。要确保数据安全,建议在烧录后验证选项字节值,并将其配置纳入项目管理。以STM32为例,RDP保护等级等设置会保持到下次被显式修改为止。关键点在于:选项字节具有持久性,只有明确操作才会改变其内容。原创 2025-11-23 09:26:17 · 765 阅读 · 0 评论
分享