STM32F407VET6 采集、双 CAN 与双路 DAC 控制板
15 路状态采集4 路频率输入双 CAN 500 kbit/s双 MCP4725 DAC串口调试| 功能 | 当前实现 |
|---|---|
| 状态采集 | 采集 PD0–PD14 共 15 路数字输入。上电和任一输入变化时,向 CAN1、CAN2 发送完整状态与变化掩码。 |
| 频率采集 | 采集 PA0、PA2、PA6、PB14 的上升沿频率,每 500 ms 通过 CAN 和串口输出。 |
| 电压采集 | ADC1_IN8(PB0)测量外部经分压后的输入;对外输出分压前、已标定且滤波后的电压。 |
| CAN | CAN1 与 CAN2 均为 500 kbit/s、11 位标准数据帧,并使用相同协议。 |
| DAC | 通过 I2C2 控制两颗 MCP4725,接收 CAN 命令或串口命令设置 0–5.000 V 输出。 |
| 运行指示 | PE0 每 500 ms 翻转一次作为运行心跳;发生初始化错误时 PE0、PE1 快速翻转。 |
| 接口 | MCU 引脚 / 外设 | 说明 |
|---|---|---|
| 15 路状态输入 | PD0–PD14 / EXTI | bit0 对应 PD0,bit14 对应 PD14。 |
| 频率输入 | PA0/TIM5、PA2/TIM9、PA6/TIM3、PB14/TIM12 | 上升沿输入捕获。 |
| 电压输入 | PB0 / ADC1_IN8 | 报告值为分压前电压,单位 mV。 |
| CAN1 / CAN2 | PB8/PB9;PB5/PB6 | 分别为 RX/TX。 |
| DAC I2C | PB10/PB11 / I2C2 | DAC1 地址 0x61,DAC2 地址 0x60(7 位地址)。 |
| 调试串口 | PA9/PA10 / USART1 | 115200、8N1、无硬件流控。 |
所有字段均为小端序(低字节在前)。板卡主动上报的帧会分别发到 CAN1 和 CAN2。
| CAN ID | 名称 | 方向 / 时机 | 数据定义 |
|---|---|---|---|
0x100 | 心跳 | 板卡发送,每 1 s | A1 01 seq_L seq_H uptime_0..3;板号 A1、协议版本 1、序号、运行时间 ms。 |
0x102 | 输入电压 | 板卡发送,每 500 ms | uint16,单位 mV。例如 90 2F = 0x2F90 = 12176 mV = 12.176 V。 |
0x103 | 四路频率 | 板卡发送,每 500 ms | 4 个 uint16,单位 Hz;依次为 PA0、PA2、PA6、PB14。 |
0x321 | DAC 设置 | 外部发送给板卡 | [DAC 编号][mV_L][mV_H],编号仅允许 1 或 2。 |
0x322 | DAC 应答 | 板卡发送,设置后 | [结果][DAC 编号][mV_L][mV_H];结果 1 成功,0 失败。 |
0x330 | 15 路状态 | 板卡发送,上电或状态变化 | 状态 uint16、变化掩码 uint16、时间戳 uint32 ms。 |
电压 V 到 CAN 数据的换算:mV = round(V × 1000),随后拆为低字节和高字节。
DAC1 输出 3.000 V:ID = 0x321,DLC = 3,DATA = 01 B8 0B DAC2 输出 1.140 V:ID = 0x321,DLC = 3,DATA = 02 74 04 应答示例(DAC1 成功设为 3.000 V):ID = 0x322,DATA = 01 01 B8 0B
ADC 输出为分压前输入电压,换算使用 100 kΩ / 30 kΩ 分压参数,并采用实测标定系数 12300 / 11656。单次报告包含 16 次 ADC 平均,随后对最近 4 次报告做移动平均;输出刷新周期为 500 ms,滤波时间约 2 秒。
串口示例:ADC=12300mV PWM=10,0,0,0Hz
串口参数:115200、8 数据位、1 停止位、无校验、无流控。USB-TTL 应交叉连接:PA9/TX → 转换器 RX,PA10/RX → 转换器 TX,并连接公共地。
DAC1 1.234 DAC2 2500 D1 2.5V
命令不区分大小写,支持伏特小数或毫伏整数。设置完成后串口会回显结果,CAN1/CAN2 同时发送 0x322 应答。
频率使用相邻上升沿时间差计算;连续 1 秒没有新边沿时,该通道输出 0 Hz。当前版本只测频率,不输出占空比。
cd A11_F407_SDC_ACQ_DAC_CubeMX cmake --preset Release cmake --build --preset Release # 修改 .ioc 后重新生成(保留 USER CODE 区) ./tools/cubemx_generate.sh
生成文件:build/Release/A11_F407_SDC_ACQ_DAC.bin。
/opt/st/stm32cubeclt_1.21.0/STM32CubeProgrammer/bin/STM32_Programmer_CLI \ -c port=SWD mode=UR reset=HWrst \ -w build/Release/A11_F407_SDC_ACQ_DAC.bin 0x08000000 -v -rst