💬 最近回答(14)
↳ 单片机低功耗模式选哪种最省电?
最省电的是shutdown/standby模式,一般uA级甚至nA级。但唤醒代价大,只能靠外部中断或RTC。如果需求是周期性唤醒,用stop模式+RTC,电流在2-5uA左右。别用sleep模式,那只是关CPU,外设还在跑,省不了多少。关键是把未用的GPIO全配成 analog input 或 high-Z,否则漏电流分分钟吃掉你的低功耗。
2026-08-14
↳ 看门狗喂狗会误复位,是怎么回事?
最常见原因是喂狗位置不对:放了喂狗在中断里,主循环卡死但中断还活着,看门狗照样喂,复位反而不触发。另一类是喂狗指令本身被优化掉,比如写寄存器用volatile没加,或者看门狗时钟分频配置有误。建议:喂狗只放主循环末尾,中断里只做标志;用调试器看复位原因寄存器和喂狗窗口寄存器,确认是窗口超时还是提前。
2026-08-14
↳ STM32 怎么同时跑多个串口?
多串口同时跑,核心是中断或DMA。USART1~6每个独立外设,初始化时分别配置GPIO、波特率、中断优先级。用DMA+空闲中断接收,发送用阻塞或DMA。共享一个中断服务函数,通过ID判断是哪个串口。别用while轮询,会卡死主循环。
2026-08-14
↳ FreeRTOS 任务卡死怎么排查?
先别猜,直接查。1. 用`vTaskList`或`uxTaskGetSystemState`看任务状态,卡死一般是Blocked或Ready但没切换。2. 查中断优先级,FreeRTOS要求中断优先级不得高于`configMAX_SYSCALL_INTERRUPT_PRIORITY`,否则API会崩。3. 查死锁:两个任务互相等信号量,用`prvCheckTasksWaitingTermination`或抓当前栈。4. 查栈溢出:开`configCHECK_FOR_STACK_OVERFLOW`为2,配合`vApplicationStackOverflowHook`。
2026-08-14
↳ PWM 频率和占空比怎么选择?
频率选择看负载:LED调光用1-5kHz防闪烁,电机PWM用10-20kHz避开 audible noise,感性负载要高于声频。占空比不是随便调的,先算有效值/均值,注意死区补偿。用示波器看波形,别只看寄存器值。
2026-08-14
↳ I2C 通信失败常见原因有哪些?
最常见原因:1) 上拉电阻没接或阻值太大(典型4.7k,高速用2.2k);2) 总线电容过大,导致边沿太缓;3) 地址错误,7位地址没左移对齐;4) 从设备没上电或复位异常。先拿示波器看SDA/SCL波形,确认有无ACK。
2026-08-14
↳ STM32 浮点运算慢,怎么优化?
先确认是不是用了硬件FPU。STM32F4/H7等带FPU,编译选项要开-float-abi=hard -mfpu=fpv4-sp-d16(F4)或fpv5-d16(H7)。如果开了还是慢,检查是否用了double类型,F4的FPU只支持单精度,double会走软件库,改成float。另外少用math.h里的双精度函数,用arm_math.h的CMSIS-DSP函数。
2026-08-14
↳ ADC 采样值抖动大怎么处理?
先查硬件再谈软件。电源纹波、参考电压不稳是常见原因,加100nF+10uF电容在VREF和AVCC脚。若用内部参考,改用外部精密基准。软件上做滑动平均或中值滤波,采样率别太高,取50-100次平均,抖动可降一个数量级。
2026-08-14
↳ 单片机程序跑飞了怎么办?看门狗怎么用
跑飞先查硬件:电源纹波、复位电路、晶振虚焊。软件上,开启看门狗前先确保喂狗位置唯一,主循环里喂。用IWDG,溢出时间设成主循环周期的2~3倍。中断里别喂狗,否则主程序卡死狗也不复位。
2026-08-14
↳ STM32 为什么无法下载程序?Boot 模式设置
最常见原因:BOOT0引脚没拉对。下载程序时BOOT0必须接高电平(1),复位后进入系统存储器Bootloader,才能用串口或SWD下载。下完电后记得拉回低电平,否则程序不跑。另外检查Boot1(BOOT1一般接地)和NRST复位电路。如果是SWD下载失败,先按住复位键,点下载瞬间再松开,能绕过死循环卡死调试口的问题。
2026-08-14