Files
STM32F4-Base/Inc
wandering1 1166ab1c2e fix(adc): 挂 DMA 前关闭 ADC,消除乒乓缓冲 +2 格相位旋转
问题:ADC1 在 MX_ADC1_Init() 里使能,而 DMA 在 app_main_init() 步骤
4b 才挂载,中间隔着 GD5F 全片 BBT 扫描(数秒)。台架同一次开机内用
无 DMA 单通道逐路取真值、与 DMA 路径对照,得 9/9 完美置换:乒乓缓冲
从 rank 3 开始搬,槽 i 装的是 rank ((i+1) mod 9)+1,整体错开 2 格。
表象是"接地 AIN2、UB 却读到别的通道的值",极易误判为映射表写错或
注入点标签不对。

修法:新增 adc1_disable()(Src/adc.c 的 USER CODE BEGIN 1),在
app_main_init() 步骤 4b-pre 调用,把 ADC 置为关闭态,使能动作交给
HAL_ADC_Start_DMA() 内部完成(它自己 __HAL_ADC_ENABLE + 等 Tstab
约 20 us,紧接着开 CR2.DMA 并启流),使能与搬运之间不留可观测间隔。
顺序不可调换:本调用必须严格早于 adc_input_init()。

台架验证:在 MX_ADC1_Init() 末尾关闭 4/4 次、在 4b-pre 调本 API
3/3 次,均 UB=0;同开机对照差值 <=4 码(修前 7/7 次 UB=783~786)。

文档:ADC采样节拍设计说明.md 新增 4.5 节(9 行证据表、判据陷阱、
根因与修法)与设计铁律第 8 条。

台账:Flash 261,764 -> 261,928 B(+164,新增函数),RAM 无变化;
CubeMX 存活审计基线重建(adc1-calibration-impl / adc1-dma-link
两项漂移均属本次有意改动,锚点已逐条复核在位)。
2026-10-27 20:42:06 +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「外设接口」表