IWDG 延后启动改走宏改名(L3→L2):生成调用变空操作,重生成后不再需要手工删

This commit is contained in:
2026-10-10 01:30:47 +08:00
parent 63ee090fd1
commit e2e1d0fd42
6 changed files with 71 additions and 50 deletions
+6 -5
View File
@@ -400,8 +400,8 @@ void task_wd_beat(task_wd_id_t id) {
* IWDG-DEFER-START-ANCHOR 注释)。此处才真正启动——使"启动段不喂狗"
* 成立(§4.5)。IWDG 一旦启动不可停,只能靠复位终止。
* ⚠ PR/RLR 的写入由 wd_platform_start() 一并完成(v1.4 修复):
* 删掉 HAL_IWDG_Init() 后它是唯一写这两只寄存器的路径,否则寄存器
* 停在复位默认值、超时只有 ~400ms(详见该函数说明)。
* 生成的 HAL_IWDG_Init() 被改名成空实现后它是唯一写这两只寄存器的路径,
* 否则寄存器停在复位默认值、超时只有 ~400ms(详见该函数说明)。
*/
void task_wd_start(void) {
if (s_started != 0u) {
@@ -553,9 +553,10 @@ __weak void wd_platform_feed(void) {
}
/* ==== 为什么 IWDG 参数必须在这里写(2026-10-02 台架实测,P0 根因)====
* `Src/iwdg.c` 为实现"延后启动"删掉了 `HAL_IWDG_Init()`(见该文件
* IWDG-DEFER-START-ANCHOR),而 `HAL_IWDG_Init()` 是**唯一**会把
* `hiwdg.Init.Prescaler/Reload` 写进寄存器的路径——删掉后 `MX_IWDG_Init()`
* `Src/iwdg.c` 为实现"延后启动"把生成的 `HAL_IWDG_Init(&hiwdg)` 改名成空实现
* (见该文件 `USER CODE BEGIN 0` 里的 IWDG-DEFER-START-ANCHOR;2026-10-09 起
* 不再靠"每次重生成后删掉那一句"),而 `HAL_IWDG_Init()` 是 HAL 里**唯一**会把
* `hiwdg.Init.Prescaler/Reload` 写进寄存器的路径——改名后 `MX_IWDG_Init()`
* 只填结构体,PR/RLR 保持**复位默认值**(PR=0 → /4、RLR=4095)。
* 实测读数:`IWDG->PR = 0`、`IWDG->RLR = 4095` → 实际超时 4×4096/LSI
* ≈ 349~512ms,比设计的 1701~2498ms **短约 5 倍**。后果有二: