- 博客(18)
- 收藏
- 关注
原创 ADC调试踩坑:一个printf引发的“血案“
最近在调试STM32F429的ADC注入通道功能时,遇到了一个"诡异"的问题:**注入通道转换完成后,规则通道停止更新**。
2025-12-17 20:11:51
1007
原创 深入理解 Cortex-M3 的内核寄存器组
Cortex-M3处理器拥有16个32位通用寄存器,分为三类:R0-R7低位寄存器(16位Thumb指令可访问)、R8-R12高位寄存器(需32位Thumb-2指令访问)、R13-R15特殊用途寄存器。R13是堆栈指针(包含MSP和PSP两个banked寄存器),R14为链接寄存器(LR)用于保存函数返回地址,R15是程序计数器。处理器采用4字节对齐机制优化内存访问效率,并通过EXC_RETURN机制实现异常处理返回。这些寄存器协同工作,在编译器优化下完成代码执行,其中R0-R7因指令编码短、效率高而被优先
2025-12-15 17:46:47
685
原创 MCU的FLASH与SRAM中存了什么?
SRAM 是"可读写"的运行时存储器,存放会变化的东西:全局变量、动态分配的内存、函数调用栈。掉电后内容全部丢失。上电后:硬件设置 MSP/PC → 启动代码拷贝 .data → 清零 .bss → 初始化堆 → 创建线程 → 运行。
2025-12-11 14:58:33
805
原创 RTOS 优先级翻转:原理剖析与 RT-Thread 实战验证
什么是优先级翻转?高优先级任务被低优先级任务间接阻塞,导致系统行为违反优先级调度原则。
2025-12-06 15:14:11
800
原创 在资源有限的M0单片机上运行RTOS
在M0单片机上也可以运行RTOS,但是其资源有限,应用场景也主要应用于一些成本敏感的产品上,其定位以及决定了性能上限,所以没有必要在M0单片机上运行RTOS。
2025-11-10 10:54:57
583
原创 USB设备无法识别问题解决记录
摘要:在STM32F103RCT6开发USB设备时遇到PC无法识别问题。硬件检查正常,软件配置正确,但更换F429验证板可识别。最终发现F103需在USB_DP(D+)引脚外接1.5kΩ上拉电阻至3.0-3.6V(部分芯片可能内置该电阻)。问题解决的关键在于满足USB2.0全速电气规范要求的上拉电阻配置。
2025-09-19 19:29:39
436
原创 单片机开发之理解面向对象思想
本文对比了面向过程与面向对象编程在LED灯控制模块开发中的不同实现方式。新手开发者小张最初采用面向过程方法,导致代码冗长、难以维护;经过培训后改用面向对象设计,通过抽象基类Light和具体子类(单色LED、RGB灯、智能灯带)实现统一接口,同时保留底层面向过程的硬件操作。面向对象设计展现了三大优势:统一控制接口、易于扩展新类型、简化系统管理。文章强调在实际开发中,应结合面向对象的设计架构与面向过程的底层实现,既保持代码可维护性,又能精准控制硬件。
2025-06-15 16:52:59
693
原创 CAN数据帧的标准格式刨析
CAN的数据帧以一个显性位(逻辑0)开始,以7个连续的隐性位(逻辑1)结束,在它们之间,分别有仲 裁段、控制段、数据段、CRC段和ACK段。
2025-06-10 18:14:04
1575
1
原创 关于GPIO配置模式的区别
本文详细分析了STM32微控制器的GPIO(通用输入输出)结构和工作原理。GPIO内部包含肖特基触发器(用于信号整形和噪声抑制)、保护二极管(防止过压损坏)以及弱上拉/下拉电阻等关键组件。GPIO支持多种工作模式:输入模式(浮空、上拉、下拉)、输出模式(推挽、开漏)、复用功能模式(推挽、开漏)和模拟模式。文章还介绍了输出驱动能力、速度配置等关键参数,并对比了推挽输出与复用推挽的区别。最后提出了模式选择错误的风险和电平兼容性问题,为GPIO的正确使用提供了指导。
2025-06-03 15:22:19
1162
原创 关于程序进入HardFault_Handler中的排查方法
在使用Keil对STM32程序进行DEBUG时,程序有时会跑飞并停留在HardFault_Handler函数中的死循环中,表明STM32发生了硬件错误。主要原因包括栈溢出、内存非法访问和中断异常处理错误。排查措施包括:首先,通过查看LR寄存器的值确定使用的堆栈类型(MSP或PSP),然后检查堆栈内容以定位异常发生时的寄存器状态,最后通过反汇编窗口找到异常前的指令地址。另一种方法是在HardFault_Handler中设置断点,并通过调用堆栈窗口定位到出错的函数位置。
2025-05-20 18:35:51
1657
原创 STM32启动文件剖析
启动文件是系统上电复位后执行的第一个程序,主要完成初始化堆栈指针、PC指针、中断向量表、系统时钟以及调用C库函数_main初始化用户堆栈,最终调用main函数进入C语言程序。
2025-05-12 08:55:13
1064
原创 嵌入式开发之状态机思维
在嵌入式系统中,状态机不是可选设计模式,而是控制复杂性的生存必需品。在一个资源受限的裸机环境下,当业务比较复杂时,如果尝试使用状态机的思想去实现,编程的难度会大大降低,后期软件的升级维护也会变得更加方便。
2025-03-30 22:14:57
1050
原创 单相交流相控调压
把两个晶闸管反并联后串联在交流电路中,通过对晶闸管的控制就可以控制交流输出。不用改变交流电的频率,在每半个周波内通过对晶闸管开通相位的控制,可以方便地调节输出电压的有效值,这种电路称为交流调压电路
2025-02-19 16:53:06
2241
原创 关于主从定时器单脉冲模式下产生的异常脉冲分析
在维护温控代码的时候,发现其控制MOS斩波用的是主从定时器触发模式的单脉冲模式,这种方法当时确实是吸引到我了(这种配置通常用于需要精准控制PWM输出的场合)。我又拿着示波器去测了一下PWM的输出情况。发现当业务逻辑不需要控制MOS时,接近0%。
2025-02-15 22:42:39
620
原创 关于使用J-Link时SW Device检测不到芯片的解决办法
将芯片的BOOT0引脚接高电平,然后将芯片复位,再将BOOT0接回低电平,可以重新下载程序
2025-02-07 11:12:42
2965
原创 关于RS485通信丢帧问题的分析与解决
发送数据就是往TDR寄存器中写数据,然后TDR寄存器会通过并行通信把数据传给移位寄存器,这个时候TXE会置1,再次向TDR写入数据会使TXE置0,TDR进入移位寄存器之后,会一位一位的发送,如果移位寄存器把数据帧发送完了,同时TDR为空,TXE为1(意味着此刻不仅移位寄存器没事干了,DR寄存器也没事干了),那么TC标志位置1。
2023-09-17 18:51:33
3938
4
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅