一、 STM32F407ZGT6 定时器特性与通道数总结
STM32F407ZGT6 共有17 个定时器,其中常规外设硬件定时器为14 个,分为三大类。它们总共能提供32 路硬件独立 PWM 通道:
高级控制定时器(2个):TIM1、TIM8
特点:16位计数器,专为电机和功率控制设计。支持硬件死区时间插入和 3 组互补输出。
通道数:每个有 4 个独立通道,共8 路 PWM。
通用定时器(10个):TIM2 ~ TIM5、TIM9 ~ TIM14
特点:应用最广泛。其中 TIM2/TIM5 是32位计数器(精度极高),其余为 16位计数器 。
通道数:
4通道全功能通用(TIM2、TIM3、TIM4、TIM5):$4 \times 4 = 16$ 路 PWM 。
2通道精简通用(TIM9、TIM12):$2 \times 2 = 4$ 路 PWM 。
1通道微型通用(TIM10、TIM11、TIM13、TIM14):$4 \times 1 = 4$ 路 PWM 。
总计:24 路通用 PWM 通道。
基本(普通)定时器(2个):TIM6、TIM7
特点:16位纯软件定时器,内部没有输入捕获/输出比较通道 。
通道数:0 路 PWM(无法输出硬件 PWM) 。
二、 方案为什么只有 14个阀门 + 2舵机 + 2电机?
虽然芯片理论上有 32 路硬件 PWM 通道,但在你的执行板+控制板实际架构设计中,绝对不能把通道盲目开满。你的方案最终定格在这个资源比例,是由以下四个底层工程原因决定的:
1. I/O 功能复用(AF)冲突 —— 必须优先保证系统命脉
芯片的引脚是多外设共享的。为了保证整个控制系统的完整性,许多能输出 PWM 的引脚必须被强行让给更核心的通讯和调试总线:
调试总线:为了保证程序能烧录、在线仿真不脱机,必须保留SWD 调试接口(PA13/PA14)。
上位机通讯:USART1(PA9/PA10)被锁死用于连接电脑或屏幕进行 485 通信。
总线舵机通讯:USART3(PB10/PB11)被霸占用于串联控制外部的总线舵机板。
外设中断:PA4 ~ PA7被配置为 GPIO 输入,作为 4 路限位开关的独立中断线(EXTI),用于安全闭环。
结果:这些系统命脉功能“割让”了大量的物理管脚,导致一大批定时器通道无法被引出。
2. 核心“点火与燃烧系统”的硬性占位(与 TIM2 冲突原因)
在底层代码中,你最核心的燃烧室控制(乙醇阀、氧气阀、火花塞点火)占用了PA0 ~ PA3这四个极其核心的引脚。
硬件上,这四个引脚虽然是 TIM2 和 TIM5 共享的,但它们已经在底层配置中被TIM5(CH1 ~ CH4)锁死。
结果:这导致性能强悍、拥有 4 个通道的TIM2 无法在这些引脚上复用;而它的重映射引脚又与 USART3(总线舵机)及 JTAG 下载防御机制冲突。为了保护点火系统的绝对安全,TIM2 必须保持空闲。
3. 定时器的“同频捆绑”物理限制
在 STM32 中,同一个定时器的所有通道必须共享同一个计数周期(ARR)。
舵机属于特殊执行机构,它的控制信号必须死守 50Hz频率。
你的方案优势:为了不浪费定时器,方案进行了精妙的“同频捆绑”复用:
TIM3的通道 1 给了舵机 1(PB4),通道 2/3/4 则紧凑地分给了阀门 6、9、10,全员强制共享 50Hz 基准。
TIM9的通道 1 给了阀门 14(PE5),通道 2 给了舵机 2(PE6),彻底与大部队频率解耦。
结果:由于 50Hz 的硬性限制,我们无法无限制地把其他需要高频驱动的阀门或设备塞进这些定时器,通道的扩充受到了频率特性的物理限制。
4. 高频步进电机的独立资源抢占
你的方案里包含2 路步进电机(电缸)控制,它们需要的是高达几千赫兹(kHz)甚至更高、且需要随时变频的脉冲信号(CLK)。
它们绝对不能和 50Hz 的阀门、舵机混用定时器。
结果:方案中单独扣留并锁死了最强的高级定时器TIM8(CH1/CH2 对应 PC6/PC7),专供步进电机发送高频脉冲。这直接从常规 PWM 队列中划走了核心的高级定时器资源。
三、 结论
你的14个阀门 + 2个舵机 + 2个电机方案:
利用TIM3、TIM4、TIM5、TIM12、TIM9错落有致地填满了 16 路 50Hz 的低频输出(14阀+2舵)。
利用TIM8独立撑起了 2 路高频电机脉冲。
通过切换到 SWD,安全释放了PB4(舵机1),避开了
PA15、PB3的上电误动作大坑(修改为了安全的PE5/PE6)。