Files
STM32F4-Base/Inc
wandering1 9231a3c22c adcTask 事件驱动消费(P1-5 方案 a)+ 补 F4 ADC 上电自校准 + 修正 2 ms 忙等过期表述
P1-5 方案 a(事件驱动消费,Task #32):
- TIM6 1 kHz ISR 除触发 CONVST 外再调 adc_tick_irq_notify(),置位
  ADC_WAKE_FLAG;adcTask 循环尾改 osThreadFlagsWait(osWaitForever),
  删除 ADC_TASK_BEAT_MS 定时轮询
- adcTask 优先级 Normal(24) -> AboveNormal(32)(Src/freertos.c USER CODE 区)
- 补消费者就绪门(规划未预见):TIM6 在 app_main_init 就启动,比调度器
  早约 100 ms,未就绪时 ISR 不得 osThreadFlagsSet
- 实测 6 次上板:idle 由 1~649 降到 0/20000 拍,frames 1000.0 Hz,
  seq-frames=7 正是就绪窗口;UI 侧 uip/uiw/uis 无退化

补 STM32F4 ADC 上电自校准(此前项目从未做过):
- 核查证实裁剪版 HAL 无 HAL_ADCEx_Calibration_Start、裁剪版 CMSIS 头无
  ADC_CR2_CAL -> 按 RM0090 13.3.6 在 Src/adc.c 的 USER CODE 区手写
  adc1_calibrate(),MX_ADC1_Init() 末尾调用
- 新增 cubemx-survival 审计项 adc1-calibration-call / -impl(清单 21->23)
- 实测校准前后同一拍 STM32 侧 6 路同向偏移 +10~+63 LSB,TPAFE 侧不变

修正两处过期表述(实测反证):
- 原文 9 通道全超时最坏 = 18 ms 连占 有误:stm32_scan() 在首个超时处即
  Stop+return,单拍上界 = 一次超时约 2~3 ms
- adcm 约 2.1 ms 的峰值归因由 ADC 采集改判为每 10 s 一次的心跳日志;
  6 次对照 adcp = 122 us(无超时)/ 2209 us(超时 1 次)
- 同步修正 adc_task.c 两处过期注释;新发现超时拍 STM32 侧静默沿用
  上一拍值的正确性代价,硬化排序记入 4.4 / 10.4(未实施)

验证:@build 0 错 0 警(Code 256728 -> 256868);@test 6/6 PASS;
stack_report 7 任务全 PASS(adcTask 832 B / 余 59%);18 钩子全绿
2026-10-10 22:41:19 +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「外设接口」表