一句话: delay 不是随便放的——main 初始化允许长延时仅一次、外设初始化允许短延时仅一次、主循环和 ISR 绝对禁止。放错地方系统卡死。适合谁读代码里到处塞 delay 的嵌入式开发者。三条位置允许上限原因main 初始化允许≤5000ms上电仅一次不影响运行外设初始化允许≤100ms上电仅一次等外设就绪主循环禁止0会阻塞其他任务ISR禁止0中断里 delay 等于自杀上电初始化跑 5000ms 没问题——只跑一次慢点不影响。外设初始化等 100ms 也行——等芯片上电就绪。主循环里写DelayMs(100)——每轮慢 100ms累积下来其他任务全被拖慢。ISR 里写 delay——整个中断系统瘫痪。主循环里需要延时怎么办用定时器标志代替 delay// 不要 while(1) { Do_Something(); DelayMs(100); // 卡 100ms其他事全停 } // 应该 if (g_bTimer100ms) { // 100ms 定时器设的标志 g_bTimer100ms 0; Do_Something(); // 只在时间到了执行 } // 其余时间继续跑其他任务定时器在后台跑主循环只判断标志。100ms 到了就做事没到就跳过——不阻塞任何代码。有用的话点个收藏下次调试直接用。有问题欢迎评论区交流看到了都会回。