Files
wandering1 970e574433 feat(adc): 1 kHz 采样节拍改由 TIM6 硬件定时器触发
- CubeMX 加 TIM6(PSC=83 / ARR=999 / ARR 预装载 / NVIC 抢占优先级 6)
- Src/main.c 回调加 TIM6 分支触发 CONVST(USER CODE 区)
- app_main.c 用 HAL_TIM_Base_Start_IT(&htim6) 替换单次触发
- adc_task.c 退化为纯消费者(1 ms 轮询仅作消费节奏)
- @build 0 错 0 警;台架 @test 验收待做
- 同步 ADC采样节拍设计说明 / 继电保护复现规划 / AGENTS / TPAFE README
2026-10-10 15:24:02 +08:00

82 lines
3.0 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* USER CODE BEGIN Header */
/**
******************************************************************************
* @file iwdg.c
* @brief This file provides code for the configuration
* of the IWDG instances.
******************************************************************************
* @attention
*
* Copyright (c) 2026 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "iwdg.h"
/* USER CODE BEGIN 0 */
/*
* IWDG-DEFER-START-ANCHOR — 看门狗"延后启动"改动(勿删本块)
*
* CubeMX 每次都会在 MX_IWDG_Init() 的生成区里写
* if (HAL_IWDG_Init(&hiwdg) != HAL_OK) { Error_Handler(); }
* 而 HAL_IWDG_Init() 内部第一句就是 __HAL_IWDG_START()(写 KR=0xCCCC,**立即启动**)。
* 本函数被 CubeMX 插在 main() 的 MX_*_Init 序列里,早于 app_main_init()——那段含
* NAND 初始化 / RTC / ADC,耗时可达数秒且无喂狗点,按 2.5s 超时的最坏值(≈1.7s)
* 必然复位 → **开机死循环**(2026-09-29 实测确认)。
*
* ⚠ "反初始化"这条路走不通:IWDG 一旦启动就**无法停止**(参考手册:唯一停止手段是
* 复位),所以不能在 `IWDG_Init 2` 区里把它"撤销"掉。
* ✅ 免手工的做法(2026-10-09 改,替代此前"每次重生成后删掉那一句"):把本编译单元里
* 的 HAL_IWDG_Init **改名到下面的空实现**。宏只作用于其后、本文件内的调用点
* (含生成区那一句),生成代码一行都不用动 → 重生成后自动失效,不必再手工删。
* 真正的启动移交 task_wd_start() → wd_platform_start()(App/util/task_watchdog.c),
* 由它解锁并写 PR/RLR、再写 KR=0xCCCC 启动(见 docs/子系统设计/看门狗设计说明.md §4.1)。
* ⚠ 本宏只影响本编译单元;task_watchdog.c 那侧不经过它。
*/
static HAL_StatusTypeDef iwdg_deferred_start(const IWDG_HandleTypeDef *a_h)
{
(void)a_h;
return HAL_OK; /* 刻意什么都不做:只填参数、不启动 */
}
#define HAL_IWDG_Init(a_h) iwdg_deferred_start(a_h)
/* USER CODE END 0 */
IWDG_HandleTypeDef hiwdg;
/* IWDG init function */
void MX_IWDG_Init(void)
{
/* USER CODE BEGIN IWDG_Init 0 */
/* USER CODE END IWDG_Init 0 */
/* USER CODE BEGIN IWDG_Init 1 */
/* USER CODE END IWDG_Init 1 */
hiwdg.Instance = IWDG;
hiwdg.Init.Prescaler = IWDG_PRESCALER_64;
hiwdg.Init.Reload = 1249;
if (HAL_IWDG_Init(&hiwdg) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN IWDG_Init 2 */
/* USER CODE END IWDG_Init 2 */
}
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */