/* * 主机侧单测桩:adc.h * 模块功能:为 App/algo/adc_input.c 提供主机可编译的 STM32 ADC1 句柄与 HAL 接口 * 声明(真实 Inc/adc.h 会经 main.h 拖入整套 HAL,主机侧无法编译)。 * * ⚠ 仅供 test/host/adc_input/ 使用,不参与 MCU 构建。 * * 保真点:F4 HAL 的 ADC_CHANNEL_x 宏值**即通道号 x**(0..15),本桩按此定义, * 故被测代码里 `(uint8_t)ADC_CHANNEL_14` 得到 14 —— 与真机一致。 * 另声明 1 个 HAL_ADC_Start_DMA 接口(由测试单元给强符号桩,可注入挂载失败)与 * 3 个 HAL 回调(**由被测代码 adc_input.c 实现**,测试直接调用它们模拟 DMA 中断)。 * * 创建日期:2026-10-10 */ #ifndef ADC_H #define ADC_H #include /* HAL 状态码(与 stm32f4xx_hal_def.h 同值,仅取被测代码用到的子集) */ typedef enum { HAL_OK = 0x00, HAL_ERROR = 0x01, HAL_BUSY = 0x02, HAL_TIMEOUT = 0x03 } HAL_StatusTypeDef; /* ADC 句柄:被测代码只把 &hadc1 透传给 HAL 接口,从不读其字段,故为不透明占位 */ typedef struct { uint32_t reserved; } ADC_HandleTypeDef; extern ADC_HandleTypeDef hadc1; /* ADC 通道宏(F4:宏值 = 通道号) */ #define ADC_CHANNEL_0 (0x00000000U) #define ADC_CHANNEL_1 (0x00000001U) #define ADC_CHANNEL_2 (0x00000002U) #define ADC_CHANNEL_3 (0x00000003U) #define ADC_CHANNEL_4 (0x00000004U) #define ADC_CHANNEL_5 (0x00000005U) #define ADC_CHANNEL_6 (0x00000006U) #define ADC_CHANNEL_7 (0x00000007U) #define ADC_CHANNEL_8 (0x00000008U) #define ADC_CHANNEL_9 (0x00000009U) #define ADC_CHANNEL_10 (0x0000000AU) #define ADC_CHANNEL_11 (0x0000000BU) #define ADC_CHANNEL_12 (0x0000000CU) #define ADC_CHANNEL_13 (0x0000000DU) #define ADC_CHANNEL_14 (0x0000000EU) #define ADC_CHANNEL_15 (0x0000000FU) /* STM32 侧 = TIM3 TRGO 触发 + DMA 双缓冲,本层只调 Start_DMA 一次; * 逐通道 Start / PollForConversion / GetValue / Stop 已从被测代码中消失,桩同步删除 */ HAL_StatusTypeDef HAL_ADC_Start_DMA(ADC_HandleTypeDef *hadc, uint32_t *pData, uint32_t Length); /* 三个 HAL 弱回调:真机上由 DMA 中断上下文调用,这里由**被测代码实现**、 * 由测试单元直接调用以模拟"一帧搬运完成" */ void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc); void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef *hadc); void HAL_ADC_ErrorCallback(ADC_HandleTypeDef *hadc); #endif /* ADC_H */