news 2026/9/7 19:58:43

D223定时器系统分配全表:14个定时器的完整分工

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
D223定时器系统分配全表:14个定时器的完整分工

www.z-linear.com

STM32H743有17个定时器——基本定时器、通用定时器、高级定时器。D223用了其中14个。TIM1~TIM14各自干什么?时钟频率多少?中断优先级怎么设?本文是D223定时器系统的完整分配表。


一、STM32H743定时器概览

1.1 定时器分类

类型定时器数量特点
高级定时器TIM1, TIM82互补PWM、死区、刹车
通用定时器(32位)TIM2, TIM5232位计数器
通用定时器(16位)TIM3, TIM4216位计数器
通用定时器(16位)TIM9~146基本通用
基本定时器TIM6, TIM72仅定时(DAC触发)

1.2 定时器时钟

STM32H743的定时器挂在不同APB总线上,时钟频率不同。

APB总线定时器APB时钟定时器时钟(×2)
APB1(120MHz)TIM2~7, TIM12~14120MHz240MHz
APB2(120MHz)TIM1, TIM8~11120MHz240MHz

当APB预分频≠1时,定时器时钟=APB时钟×2。D223中APB1和APB2都是120MHz,定时器时钟为240MHz。


二、D223定时器分配全表

定时器APB时钟频率用途ARRPSC中断优先级
TIM1APB2240MHzPWM CH1动态动态
TIM2APB1240MHzPWM CH2动态动态
TIM3APB1240MHzPWM CH3动态动态
TIM4APB1240MHzPWM CH4动态动态
TIM5APB1240MHzPWM CH5动态动态
TIM8APB2240MHzPWM CH6动态动态
TIM12APB1240MHz1ms系统节拍2399996
TIM13APB1240MHzADC采样触发动态动态5
TIM14APB1240MHzDAC输出触发动态动态5
TIM6APB1240MHz备用(DAC触发)
TIM7APB1240MHz备用
TIM9APB2240MHz备用
TIM10APB2240MHz备用
TIM11APB2240MHz备用

三、功能定时器详解

3.1 TIM12:1ms系统节拍

// TIM12配置: 240MHz / (999+1) / (239+1) = 1000Hz = 1mshtim12.Init.Prescaler=999;htim12.Init.Period=239;// 中断优先级: 6voidHAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef*htim){if(htim==&htim12){dio_tim_task();// DIO刷新+PWM加减速(每100ms)}}

TIM12每1ms触发一次中断,执行DIO刷新和PWM加减速计算(加减速每100ms一次,通过motorAccDiv分频)。

3.2 TIM13:ADC采样触发

// TIM13配置: 根据采样率动态计算// 500KSPS: ARR = 240MHz/500K - 1 = 479// 10KSPS: ARR = 240MHz/10K - 1 = 23999// 1KSPS: ARR = 240MHz/1K - 1 = 239999// 中断优先级: 5voidHAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef*htim){if(htim==&htim13){qspiAdcTimTask();// QSPI DMA读取FPGA FIFO}}

TIM13的ARR/PSC在main线程的adc_dac_paramCalcThread()中根据采样率动态更新。

3.3 TIM14:DAC输出触发

// TIM14配置: 根据DDS输出频率动态计算// 中断频率 = DDS频率 × 查找表点数// 中断优先级: 5voidHAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef*htim){if(htim==&htim14){ddsDacTimTask();// DDS查表+DAC写入}}

3.4 TIM1~TIM8(非TIM12/13/14):PWM输出

PWM通道定时器定时器通道引脚功能
PWM1TIM1CH1PA8步进电机轴1
PWM2TIM4CH3PB8步进电机轴2
PWM3TIM3CH2PA7步进电机轴3
PWM4TIM8CH4PC9步进电机轴4
PWM5TIM5CH3PA2步进电机轴5
PWM6TIM2CH2PB3步进电机轴6

PWM定时器不使用中断(PWM硬件输出),但在TIM12中断中动态更新ARR/PSC实现加减速。


四、ARR/PSC动态计算

4.1 PWM频率计算

voidfun_calcPwmParam(u8 ch,TIM_HandleTypeDef*_pTim){// 定时器时钟240MHz_dioParam.arr[ch]=240000000/_dioParam.presentFreq[ch];// ARR最大65535,超出时增加PSC分频_dioParam.psc[ch]=_dioParam.arr[ch]/0x10000;_dioParam.arr[ch]=_dioParam.arr[ch]/(_dioParam.psc[ch]+1);// 占空比(千分比)_dioParam.duty[ch]=(_framDatas._pwmDatas[ch].pwmDuty*_dioParam.arr[ch])/1000;// 直接写寄存器(中断中不能调用HAL函数)_pTim->Instance->PSC=_dioParam.psc[ch];_pTim->Instance->ARR=_dioParam.arr[ch];_pTim->Instance->CCR1=_dioParam.duty[ch];}

4.2 频率与ARR/PSC对照

目标频率ARRPSC实际频率误差
1Hz2400099991.0Hz0%
10Hz2400099910.0Hz0%
100Hz2400099100.0Hz0%
1kHz2400091000.0Hz0%
5kHz4800005000.0Hz0%
10kHz24000010000.0Hz0%
50kHz4800050000.0Hz0%
100kHz24000100000.0Hz0%

4.3 ADC采样率计算

// TIM13 ARR计算voidadc_dac_paramCalcThread(){u32 samplingRate=_framDatas._adcParam.samplingRate;// TIM13 ARR = 240MHz / samplingRate - 1u32 arr=240000000/samplingRate-1;// ARR最大65535,超出时需要PSCu16 psc=arr/65536;arr=arr/(psc+1);// 更新TIM13htim13.Instance->PSC=psc;htim13.Instance->ARR=arr;}
采样率ARRPSC中断间隔
500K47902μs
100K2399010μs
10K239990100μs
1K5999931ms
100599993910ms

五、中断优先级与嵌套

5.1 定时器中断优先级

定时器优先级功能嵌套关系
TIM135ADC采样可被TIM14(同级)、DMA(4)打断
TIM145DAC输出与TIM13同级,不互相嵌套
TIM126DIO/PWM加减速可被TIM13(5)打断

5.2 为什么TIM13和TIM14同级?

TIM13和TIM14优先级相同(5),不会互相嵌套。但它们的任务很短(2~5μs),即使串行执行也不会错过采样窗口。

5.3 为什么TIM12优先级最低(6)?

TIM12执行DIO刷新和PWM加减速,不需要实时性。降低优先级让ADC和DAC优先执行。


六、定时器资源冲突

6.1 PWM与DO引脚复用

PWM定时器使用GPIO的复用功能,与DO输出共享引脚:

PA8: TIM1_CH1(PWM1) 或 GPIO_DO1 PB8: TIM4_CH3(PWM2) 或 GPIO_DO2 PA7: TIM3_CH2(PWM3) 或 GPIO_DO3 PC9: TIM8_CH4(PWM4) 或 GPIO_DO4 PA2: TIM5_CH3(PWM5) 或 GPIO_DO5 PB3: TIM2_CH2(PWM6) 或 GPIO_DO6

同一引脚不能同时做PWM和DO。固件根据用户选择配置GPIO模式。

6.2 TIM6/TIM7的特殊用途

TIM6和TIM7是基本定时器,主要用于触发DAC和ADC。D223中DAC由TIM14触发而非TIM6,TIM6/TIM7保持备用。

6.3 SysTick vs TIM12

定时器频率用途RTOS关系
SysTick1KHzRT-Thread节拍RTOS管理
TIM121KHzDIO/PWM加减速用户管理

SysTick和TIM12都是1ms,但用途不同。SysTick用于RTOS调度,TIM12用于业务逻辑。


七、定时器初始化代码

7.1 CubeMX配置

// TIM12 (1ms系统节拍)htim12.Instance=TIM12;htim12.Init.Prescaler=999;htim12.Init.Period=239;htim12.Init.CounterMode=TIM_COUNTERMODE_UP;htim12.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;HAL_TIM_Base_Init(&htim12);HAL_TIM_Base_Start_IT(&htim12);// TIM13 (ADC采样触发)htim13.Instance=TIM13;htim13.Init.Prescaler=0;htim13.Init.Period=479;// 初始500KSPSHAL_TIM_Base_Init(&htim13);HAL_TIM_Base_Start_IT(&htim13);// TIM14 (DAC输出触发)htim14.Instance=TIM14;htim14.Init.Prescaler=0;htim14.Init.Period=2399;// 初始100KHAL_TIM_Base_Init(&htim14);HAL_TIM_Base_Start_IT(&htim14);// PWM定时器 (TIM1/2/3/4/5/8)// 使用PWM输出模式,非中断htim1.Init.Prescaler=0;htim1.Init.Period=24000;// 初始10kHzHAL_TIM_PWM_Init(&htim1);HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);

7.2 NVIC配置

HAL_NVIC_SetPriority(TIM8_BR_TIM12_IRQn,6,0);HAL_NVIC_EnableIRQ(TIM8_BR_TIM12_IRQn);HAL_NVIC_SetPriority(TIM8_UP_TIM13_IRQn,5,0);HAL_NVIC_EnableIRQ(TIM8_UP_TIM13_IRQn);HAL_NVIC_SetPriority(TIM8_TRG_COM_TIM14_IRQn,5,0);HAL_NVIC_EnableIRQ(TIM8_TRG_COM_TIM14_IRQn);

TIM12/13/14共用TIM8的IRQn(STM32H743中断向量表中TIM12~14与TIM8共用部分向量)。


八、定时器使用率统计

类别使用数总数使用率
高级定时器2(TIM1,TIM8)2100%
通用定时器(32位)2(TIM2,TIM5)2100%
通用定时器(16位)2(TIM3,TIM4)2100%
通用定时器(其他)3(TIM12,13,14)650%
基本定时器0(TIM6,7备用)20%
合计91464%

九、定时器扩展能力

扩展场景可用定时器方案
增加编码器接口TIM6或TIM7配置为编码器模式
增加PWM通道TIM9或TIM10配置为PWM输出
增加外部脉冲计数TIM11配置为外部时钟输入
增加定时记录TIM6配置为周期定时

D223有5个备用定时器(TIM6/7/9/10/11),扩展能力充足。


十、总结

D223定时器系统分配实现了:

定时器时钟用途频率/优先级
TIM1240MHzPWM11~10kHz
TIM2240MHzPWM21~10kHz
TIM3240MHzPWM31~10kHz
TIM4240MHzPWM41~10kHz
TIM5240MHzPWM51~10kHz
TIM8240MHzPWM61~10kHz
TIM12240MHz1ms节拍1kHz/优先级6
TIM13240MHzADC采样1~500kHz/优先级5
TIM14240MHzDAC输出可变/优先级5

从6路PWM到3个功能定时器,从240MHz时钟到动态ARR/PSC计算,D223的定时器系统为500KSPS高速采样、DDS波形输出和PWM电机控制提供了精确的时序基础。5个备用定时器为功能扩展预留了充足空间。


下篇预告:《D223 vs 国产竞品对比分析》

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/7 19:58:40

Cap录屏教程:10分钟录出你的第一条演示视频

Cap录屏教程:10分钟录出你的第一条演示视频 【免费下载链接】Cap Open source Loom alternative. Beautiful, shareable screen recordings. 项目地址: https://gitcode.com/GitHub_Trending/cap1/Cap Cap 是一个开源、免费、跨平台的屏幕录制工具&#xff0…

作者头像 李华
网站建设 2026/9/7 19:57:58

C#串口十六进制收发工具开发实战:核心原理与源码解析

简介:这是面向C#串口通信学习与硬件调试场景的完整源码工程,基于System.IO.Ports.SerialPort串口控件实现十六进制数据的接收显示与发送,适合嵌入式开发人员、电子工程师及需要与串口设备联调的软件开发者参考。压缩包共21个文件,…

作者头像 李华
网站建设 2026/9/7 19:55:16

JAVA第一课

跟日记本一起学JAVA!相信你可以的,加油~ 本章闯关任务:1.cmd打开的方式(0/2) 2.照猫画虎(0/5) 3.好习惯(0/3) 一. 首先打开cmd: 方法1.win图标R图标(win的图标可能是…

作者头像 李华
网站建设 2026/9/7 19:54:49

HarmonyOS 7.0 API26 沉浸光感取色:背景变化后按钮对比度如何保护

HarmonyOS 7.0 API26 沉浸光感取色:背景变化后按钮对比度如何保护 这篇只拆一个具体点:沉浸光感取色。版本边界先放前面:下面的写法面向 HarmonyOS 7.0 / API 26。工程里如果还在混用旧 SDK、旧模拟器镜像或旧设备系统,先不要直接…

作者头像 李华