Files
STM32F4-Base/Inc
wandering1 7feeea6c56 实现独立看门狗:CubeMX 配置 IWDG + 任务心跳位图,恢复三处被覆盖定制
经 CubeMX 图形界面启用 IWDG(Prescaler=64 / Reload=1249,标称 2498ms /
最坏 1701ms),并落地心跳位图判定、各任务埋点、RCC_CSR 复位原因上报与
configASSERT 改造。重生成覆盖的既有定制已全部恢复。

P0(开机死循环):HAL_IWDG_Init() 内部立即启动看门狗,而 CubeMX 把
MX_IWDG_Init() 插在 app_main_init() 之前——该段 NAND/RTC/ADC 初始化耗时
数秒无喂狗点,按 2.5s 超时必然复位。改 Src/iwdg.c 为只填参数不启动,
启动移交 task_wd_start(),由 defaultTask 在存储 bring-up 完成后调用。

恢复的三处定制(重生成覆盖):
- Src/stm32f4xx_it.c:HardFault_Handler 崩溃现场采集被打回空 while(1)
- Inc/FreeRTOSConfig.h:栈溢出检测与堆失败钩子两个宏被整块删除
- Src/freertos.c:三处任务栈实测记录中文注释丢失(数值未丢)

新增:
- App/util/task_watchdog.{c,h}:心跳位图 + 抽样判定 + IWDG 延后启动
- time_sync.c 长等待切片:net_recv_to 单次可睡满 30s 预算,切成 200ms 片
- Src/main.c 复位原因锁存(读后即清 RMVF,防残留误判)

埋点:defaultTask(唯一喂狗者)/ netTask(含 PHY 等待循环)/ uiTask /
timeSyncTask。ftpTask 首期剔除掩码,待二期改 lftpd。

门禁:build 0 错误 0 警告;pre-commit 10 钩子全通过;Flash +2956B / RAM +40B。
2026-09-29 07:22:04 +08:00
..
2026-07-21 00:30:59 +08:00

Inc/ — CubeMX 生成的头文件

⚠️ 本目录文件由 STM32CubeMX 生成(.ioc 重生成会覆盖),不是自研代码。 允许在 USER CODE BEGIN/END 标记区之间写自定义内容。

文件一览

文件 生成 作用
main.h CubeMX 主头文件:引脚宏定义(xxx_Pin / xxx_GPIO_Port)
FreeRTOSConfig.h CubeMX FreeRTOS 内核配置(堆大小、tick、优先级位数等)
stm32f4xx_hal_conf.h CubeMX HAL 模块裁剪开关(启用/禁用各外设 HAL 模块)
stm32f4xx_it.h CubeMX 中断服务函数声明
gpio.h / dma.h / spi.h / i2c.h / usart.h CubeMX 各外设初始化函数声明

⚠️ 修改约定

  • 自定义内容只写 USER CODE BEGIN xxx / USER CODE END xxx 标记区之间
  • 引脚宏(如 CH395F_CS_Pin)在 main.h 中定义,改引脚须在 CubeMX 中改后重新生成

关键配置速查

配置 值 位置
FreeRTOS 堆 configTOTAL_HEAP_SIZE(已迁 CCM) FreeRTOSConfig.h
栈溢出检查 configCHECK_FOR_STACK_OVERFLOW = 2 FreeRTOSConfig.h
HAL 时基 TIM7(HAL_TIMEBASE 覆盖) stm32f4xx_hal_conf.h + Src/
NVIC 分组 4 位优先级 CubeMX 配置

相关文档

  • 内存/堆预算:docs/内存管理/RAM使用分析与优化方案.md
  • 硬件引脚:根 README.md「外设接口」表