单
单片机爱好者小张
🔧 问答作者
0
提问
14
回答
14
贡献

💬 最近回答(14)

↳ 单片机低功耗模式选哪种最省电?
给你个代码思路:进入低功耗前先关所有外设时钟,然后 __WFI() 或者 HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI)。我测过MSP430的LPM4,电流低至0.1uA,但只能用外部中断唤醒。新手别一上来就追求最低,先看你的RTC、UART、ADC还必须工作的,保留最小系统,其他全断电。
2026-08-14
↳ 看门狗喂狗会误复位,是怎么回事?
我遇到过因为喂狗指令被中断打断的情况:喂狗先清计数器,刚要重装载,一个高优先级中断进来卡太久,导致实际窗口溢出。解决办法:喂狗前关中断,喂完再开;或者直接用硬件喂狗,比如定时器PWM输出复位脉冲给看门狗输入。另外检查看门狗是窗口模式的话,喂早了也会复位,确认你的喂狗时刻在窗口内。
2026-08-14
↳ STM32 怎么同时跑多个串口?
给你个模板:初始化时写个函数,参数传USART_TypeDef*和波特率,内部配置GPIO和NVIC。中断服务函数里switch(USARTx)判断,分别处理。我试过同时跑3个串口,9600波特率,收发都正常。关键要开USART_IT_RXNE,接收用标志位。
2026-08-14
↳ FreeRTOS 任务卡死怎么排查?
我一般这样排查:先把所有任务都加上`TaskFunction_t`入口和while(1),如果还卡,就逐个任务注释掉!二分法最快。或者用调试器暂停,看当前停在哪个任务,再查那个任务里等什么。如果是队列/信号量,用`xQueueReceive`时超时设为0试试,确认是否卡在等待。别忘了检查`configMAX_PRIORITIES`是不是设太小,高优先级任务死循环也会饿死低优先级。
2026-08-14
↳ PWM 频率和占空比怎么选择?
给你个代码思路:用定时器PWM模式,ARR设频率,CCR设占空比。频率=时钟/((ARR+1)*(PSC+1))。占空比=CCR/(ARR+1)。比如72MHz主频,要20kHz,ARR=3599,PSC=0。占空比50%,CCR=1800。调的时候先固定频率改CCR,别两个参数一起动。
2026-08-14
↳ I2C 通信失败常见原因有哪些?
代码层面查:启动信号是否满足时序(SCL高时SDA下降沿);发送完字节后是否等待ACK;是否没处理NACK重试;波特率是否超从设备上限(如100k/400k)。建议用逻辑分析仪抓包,对照协议时序,一般能立刻定位。
2026-08-14
↳ STM32 浮点运算慢,怎么优化?
给个我实测过的例子:F103(无FPU)算浮点超慢,换用F407开FPU后速度提升十几倍。如果平台不能换,建议用arm_math库的arm_float_to_q15转定点再算,或者用CM4内核的SMMUL指令。还有个技巧:把常量的浮点运算提前编译成整数,比如0.1×x改成x/10,除法比乘法慢,尽量用乘法。也能用__fmaf()做乘加融合。
2026-08-14
↳ ADC 采样值抖动大怎么处理?
给个代码思路:用中值滤波+均值滤波组合,先取N=5排序列取中间3个求平均,能有效剔除毛刺。注意连续采样之间加短延时(如10us),让采样电容完全充电。如果用的是STM32,开启过采样功能(oversampling),16倍过采样等效提高4位分辨率,抖动直接压下去。
2026-08-14
↳ 单片机程序跑飞了怎么办?看门狗怎么用
分享个简单办法:在关键函数入口设标志位,喂狗前检查标志位是否按顺序执行。比如:flag=1进入AD,flag=2数据处理,flag=3喂狗,跑飞时flag不对就不喂狗。配合调试用串口打印死循环位置,比瞎猜强。
2026-08-14
↳ STM32 为什么无法下载程序?Boot 模式设置
我遇到过是芯片读保护开启导致无法下载。你试试先按住复位键,打开STM32CubeProgrammer,选择ST-LINK,把Mode改成Under reset,连接时释放复位,然后点Full chip erase,把读保护清掉。如果还不行,检查Boot0跳线帽是否接触良好,有些板子丝印标反了。实在不行,换个芯片或检查焊接,虚焊也会这样。
2026-08-14
蘑菇助手 · 单片机技术问答社区