- 全部
- 默认排序
在嵌入式开发中,"中断里加延时"是新手最容易踩的坑,没有之一。看起来只是加了一行代码,结果整个系统直接瘫痪。1、为什么会卡死?以STM32的HAL_Delay()为例,它依赖SysTick中断来更新计数。问题在于:SysTick优先级通常比
做电池供电的嵌入式项目时,不少人都遇到过这种尴尬:反复核对了唤醒源配置,引脚、中断、NVIC全检查了一遍,单片机进入低功耗后还是彻底“睡死”,怎么都唤不醒。其实很多时候问题根本不出在唤醒源本身,而是这些容易被忽略的隐性环节。1. 悄悄触发的
很多开发者都遇到过这样的场景:定时器初始化代码反复核对,使能位开了,NVIC优先级也配了,可中断服务函数就是纹丝不动。问题往往不在这些明面上的配置,而是藏在几个容易被忽略的角落。1. 中断服务函数名写错了这是最隐蔽的坑。你在代码里写了一个v
中断嵌套是嵌入式系统的基本功,可不少人配置完NVIC后发现,明明设了高抢占优先级,却还是被低优先级中断打断。排查一圈代码,使能位、中断通道都没问题,最后发现根源在优先级分组这个全局配置上。1. 优先级分组只配一次,配错全局乱NVIC_Pri
嵌入式调试时经常遇到反常情况,定时器的使能位、中断优先级都按手册配置完成,运行后完全进不了中断服务函数,反复读寄存器值也显示配置正确。问题大多不是参数写错,是时钟和硬件的隐性细节没处理到位。1. 定时器外设时钟没开很多MCU的定时器时钟默认
机械按键 · GPIO · 硬件软件防抖按键只按一次,MCU为何会收到一串跳变?手指完成一次动作,机械触点却可能先接通、弹开、再接通 机械触点在闭合或断开的短时间内会反复接触,GPIO看到的是一串高低电平边沿。若中断或扫描程序把每个边沿都当
一直在喂狗,系统为何仍可能假死?喂狗动作只能证明某段代码被执行,不能自动证明所有任务、外设和通信链路都健康 若喂狗放在定时中断、空闲任务或一个仍能运行的主循环分支里,即使关键任务死锁、外设卡住或数据停止更新,看门狗仍会持续刷新。可靠方案要把
优先级数字更小,中断为何仍会被拖住?STM32里“数字更小”只是优先级编码的第一层;是否能抢占,还要看PRIGROUP、实现位数、当前活动异常与屏蔽寄存器一个中断的优先级数字已经设得更小,理论上应该更高。可当低优先级ISR正在执行时,它并没
输入只抖几毫伏,比较器为何反复翻转?比较器没有迟滞时,输入每次跨过同一阈值都会翻转;几毫伏噪声足以制造一串数字脉冲 模拟输入只抖了几毫伏,ADC看起来也不算严重,比较器中断为什么连着进了好几次?因为比较器关心的不是噪声占满量程的比例,而是差
加了volatile,中断共享变量为何仍会错?volatile能防止访问被随意省略,却不能把三条指令合并成不可打断的一步 主循环和中断共享变量时,volatile解决的是编译器是否真正发生访存。它不保证counter++是一条指令,不保证多

扫码关注





















