Skip to content

DlaBoard_A — MCU IO 资源分配与配置清单

MCU: STM32F407VET6(LQFP100)
配置来源: DlaBoard_A.ioc(STM32CubeMX 6.15.0 / FW_F4 V1.28.3)+ Core/Src 应用层 USER 区覆盖
核对日期: 以当前工程源码为准;Cube 重新生成后请对照本文 §8 维护项复查。


1. 系统时钟(RCC)

项目配置
HSE8 MHz(HSE_VALUE=8000000
PLLM=8, N=336, P=2, Q=4,源 = HSE
SYSCLK168 MHz
HCLK168 MHz(AHB ÷1)
APB142 MHz(÷4);定时器时钟 ×2 → 84 MHz
APB284 MHz(÷2);定时器时钟 ×2 → 168 MHz
实现SystemClock_Config()Core/Src/main.c

2. 引脚总表(按功能)

说明:

  • 固件用途:当前 DlaCart 应用是否使用该引脚/外设。
  • 有效电平:数字输入若无特别说明,应用按 低有效(按下/触发接地为 0)理解。
  • Cube 中部分 GPIOD 档位脚为 无上下拉board_inputs.h 注释要求上拉,请与原理图一致(外置上拉或后续在 MX_GPIO_Init 中改为 GPIO_PULLUP)。

2.1 应用已使用

引脚复用 / 模式外设固件用途驱动模块 / 备注
PA8TIM1_CH1 AFTIM1电机 PWM CH1motor_control.chtim1
PE11TIM1_CH2 AFTIM1电机 PWM CH2同上;运行时 PSC=167, ARR=999 → 1 kHz PWM
PA2TIM2_CH3 AFTIM2轮速 FG(右轮,CN20)wheel_speed.c CH3;上升沿;ICFilter=8
PA3TIM2_CH4 AFTIM2轮速 FG(左轮,CN19)wheel_speed.c CH4
PC6TIM3_CH1 AFTIM3遥控转向 PWM 输入rc_input.c CH1;1 MHz 捕获
PC7TIM3_CH2 AFTIM3遥控油门 PWM 输入rc_input.c CH2
PB8CAN1_RX AFCAN1转向伺服 CAN RXservo_can.chcan1
PB9CAN1_TX AFCAN1转向伺服 CAN TX波特率 1 Mbit/s
PA9USART1_TX AFUSART1Jetson / 主机 TXtrain_uart.c
PA10USART1_RX AFUSART1Jetson / 主机 RX115200 8N1;RX 内部上拉(MSP USER)
PD5USART2_TX AFUSART2VGUS 屏 TXscreen.c
PD6USART2_RX AFUSART2VGUS 屏 RX9600 8N1
PB0ADC1_IN8 模拟ADC1CN30 加速踏板连续转换默认通道;MX_ADC1_Init USER
PC1ADC1_IN11 模拟ADC1电池电压分压board_battery.c 单次采样后恢复 IN9
PD0GPIO 输入档位 Pboard_inputs.h GEAR_P_Pin,低有效
PD1GPIO 输入档位 RGEAR_R_Pin
PD3GPIO 输入档位 NGEAR_N_Pin
PD4GPIO 输入档位 DGEAR_D_Pin
PE2GPIO 输入上拉刹车开关 1MX_GPIO_Init USER 覆盖;训练帧 brake
PE3GPIO 输入上拉刹车开关 2同上;任一为低则视为刹车按下

2.2 Cube 已配置、应用未使用(预留 / 调试)

引脚复用 / 模式外设Cube / 硬件说明固件状态
PA0TIM2_CH1TIM2未走线未启 IC 中断
PA1TIM2_CH2TIM2未走线未启 IC 中断
PA4GPIO 推挽输出注释:IMU CS,空闲高MX_GPIO_Init USER 拉高;无 SPI 业务
PA5–PA7SPI1 SCK/MISO/MOSISPI1预留给 IMU 等MX_SPI1_Init 存在,主循环未调用
PA11–PA12USB_OTG_FSUSB未初始化 USB 栈
PA13–PA14SWD调试
PE13–PE14TIM1_CH3/CH4 AFTIM1MSP 已映射,应用未用 PWM
PE5–PE6EXTI 上升沿无 EXTI 中断服务函数
PC8–PC9TIM3_CH3/CH4TIM3未用
PD14–PD15TIM4_CH3/CH4 AFTIM4GPIO 仅 AF 配置MX_TIM4_Init
PC10–PC11USART3 TX/RXUSART3未初始化 USART3
PB6–PB7I2C1I2C1仅 GPIO AF
PB10–PB11I2C2I2C2仅 GPIO AF
PB12–PB15SPI2SPI2仅 GPIO AF
PC0, PC2–PC5ADC1_IN10/12–15ADC1模拟输入已使能应用未采样
PB1ADC1_IN9ADC1模拟输入已使能应用未采样
PE0–PE1, PE4, PE7–PE10, PE12, PE15GPIO 输出Cube 默认推挽;PE0/1 初值 SET应用未驱动
PD7–PD13GPIO 输入无上下拉应用未读
PH0–PH1HSERCC8 MHz 晶振
PC14–PC15LSERCC32.768 kHz

2.3 继电器 / 原车输出(占位)

项目状态
停转 / 倒车 / 刹车缸等board_relays.c 占位,未绑定具体 GPIO;Board_Relay_BrakeCylinder() 当前为空实现

3. 外设配置清单

3.1 USART1 — Jetson / 训练跟随协议

参数
引脚PA9 TX, PA10 RX
波特率115200
格式8N1,无流控
句柄huart1
初始化MX_USART1_UART_Init()
RXUSART1_IRQHandler TrainUART_ReceiveISR()(不走 HAL_UART_IRQHandler 收字节)
NVIC优先级 5train_uart.c

3.2 USART2 — VGUS 串口屏

参数
引脚PD5 TX, PD6 RX
波特率9600.ioc 固化,与屏出厂一致)
格式8N1
句柄huart2
RXUSART2_IRQHandlerScreen_ReceiveISR() + HAL_UART_IRQHandler(&huart2)
NVIC优先级 6screen.c

3.3 CAN1 — 转向伺服

参数
引脚PB8 RX, PB9 TX
波特率1 Mbit/s(Prescaler=3, BS1=11TQ, BS2=2TQ, SJW=1,APB1 42 MHz 时)
模式Normal;AutoBusOff=Enable;AutoRetransmission=Enable
滤波器Bank0,32bit 掩码全 0,FIFO0(MX_CAN1_Init USER)
启动HAL_CAN_Start() 在 USER 区
协议servo_can.c,节点 ID=0 → 标准 ID 0x64
句柄hcan1

3.4 ADC1

参数
引脚PB0 IN8, PB1 IN9, PC0–PC5 IN10–IN15
分辨率12 bit,右对齐
时钟PCLK/4
默认运行连续转换,通道 ADC_CHANNEL_8(CN30 踏板),采样 56 cycles
Cube 初值IN10,3 cycles(USER 区覆盖为 IN8 连续模式)
电池采样Battery_GetLevel() 临时切 IN11(PC1),144 cycles,单次转换后恢复 IN8

3.5 TIM1 — 电机 PWM

阶段PrescalerARR频率 / 说明
Cube 初值065535占位
Board_TuneTimersForCart()1679991 kHz(168 MHz 定时器时钟)
使用通道CH1 (PA8), CH2 (PE11)PWM1,高有效
占空比0–1000MOTOR_PWM_MAX_DUTY;逻辑占空再 × MOTOR_SPEED_SCALE(120%) / 100
模块motor_control.c

3.6 TIM2 — 轮速输入捕获

参数
使用通道CH3 (PA2)CH4 (PA3)
运行时 PSC83 → 计数 1 µs(84 MHz 定时器时钟)
ARR0xFFFFFFFF
捕获上升沿,ICFilter=8Board_TuneTimersForCart
速度换算500 ms 窗口;WHEEL_DIAMETER_MM=260,15 脉冲/圈
中断TIM2_IRQHandlerHAL_TIM_IRQHandler(&htim2);NVIC 优先级 2

3.7 TIM3 — 遥控 PWM 输入捕获

参数
使用通道CH1 (PC6) 转向,CH2 (PC7) 油门
运行时 PSC831 µs
ARR65535
捕获上升/下降沿测脉宽;ICFilter=0
脉宽范围1000–2000 µs(rc_input.h
中断TIM3_IRQHandler;NVIC 优先级 3

3.8 SPI1(未接入应用)

参数
引脚PA5 SCK, PA6 MISO, PA7 MOSI
模式主机,8 bit,Mode0,预分频 ÷2(约 42 Mbit/s)
NSS软件;片选意图 PA4
状态MX_SPI1_Init,主循环 未使用

4. 中断与 NVIC

IRQn优先级使能位置服务函数 / 行为
TIM2_IRQn2wheel_speed.cTIM2_IRQHandler → HAL TIM2
TIM3_IRQn3rc_input.cTIM3_IRQHandler → HAL TIM3
USART1_IRQn5train_uart.cTrainUART_ReceiveISR()
USART2_IRQn6screen.cScreen_ReceiveISR() + HAL UART2
SysTick15内核HAL_IncTick()

未使能: CAN RX 中断(轮询 HAL_CAN_GetRxMessage)、ADC DMA、EXTI5/6。


5. 应用层逻辑与 IO 对应

逻辑IO / 外设
工作模式(手动/遥控/训练/跟随)仅串口屏 SCREEN_ADDR_MODE(0x05A1),无专用模式 GPIO
档位 PRNDPD0/1/3/4 + 屏 0x05E1;50 ms 消抖
刹车(训练上报)PE2、PE3 或 P 档
刹车缸继电器占位,未接脚
电机允许D/R 档或跟随 brake==0
踏板CN30 ADC IN8;D/R 档映射为 CAN 油门请求
转向伺服定位速度CAN 0x23AUTO_ROTATION_SPEED=650
轮速显示TIM2 → WheelSpeed_GetSpeed_01kmh() → 屏 SCREEN_ADDR_SPEED_DISPLAY

6. 初始化顺序

main() 中 Cube 初始化顺序(main.c):

  1. HAL_InitSystemClock_Config
  2. MX_GPIO_InitMX_ADC1_InitMX_CAN1_InitMX_TIM1_InitMX_SPI1_Init
  3. MX_USART1_InitMX_USART2_InitMX_TIM3_InitMX_TIM2_Init
  4. DlaCart_AppInit() — 内含 Board_TuneTimersForCart()、各模块 *_Init()、ADC Start

7. 关键源文件索引

内容文件
Cube 引脚 / 时钟DlaBoard_A.ioc
外设 InitCore/Src/main.c
引脚 MSPCore/Src/stm32f4xx_hal_msp.c
定时器运行时参数Core/Src/dla_cart_app.cBoard_TuneTimersForCart()
PRND 宏Core/Inc/board_inputs.h
中断Core/Src/stm32f4xx_it.c
捕获分发Core/Src/tim_capture.c

8. Cube 重新生成后检查项

  • [ ] MX_CAN1_Init USER:HAL_CAN_ConfigFilter + HAL_CAN_Start
  • [ ] MX_ADC1_Init USER:连续模式 + ADC_CHANNEL_8 CN30 踏板
  • [ ] MX_GPIO_Init USER:PE2/PE3 上拉输入;PA4 空闲高
  • [ ] stm32f4xx_hal_msp.c USER:USART1 RX 上拉(若被覆盖)
  • [ ] DlaCart_AppInit() / Board_TuneTimersForCart() 仍被 main 调用
  • [ ] 工程仍包含 dla_cart_app.ctrain_uart.cwheel_speed.c 等应用源文件

9. 相关文档

  • 系统行为与协议:DlaBoard_A_Documentation_CN.md
  • 英文说明:DlaBoard_A_Documentation.md