ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

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

D223定时器系统分配全表:14个定时器的完整分工 www.z-linear.comSTM32H743有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~14120MHz240MHzAPB2(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系统节拍2399996TIM13APB1240MHzADC采样触发动态动态5TIM14APB1240MHzDAC输出触发动态动态5TIM6APB1240MHz备用(DAC触发)———TIM7APB1240MHz备用———TIM9APB2240MHz备用———TIM10APB2240MHz备用———TIM11APB2240MHz备用———三、功能定时器详解3.1 TIM121ms系统节拍// TIM12配置: 240MHz / (9991) / (2391) 1000Hz 1mshtim12.Init.Prescaler999;htim12.Init.Period239;// 中断优先级: 6voidHAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef*htim){if(htimhtim12){dio_tim_task();// DIO刷新PWM加减速(每100ms)}}TIM12每1ms触发一次中断执行DIO刷新和PWM加减速计算加减速每100ms一次通过motorAccDiv分频。3.2 TIM13ADC采样触发// 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(htimhtim13){qspiAdcTimTask();// QSPI DMA读取FPGA FIFO}}TIM13的ARR/PSC在main线程的adc_dac_paramCalcThread()中根据采样率动态更新。3.3 TIM14DAC输出触发// TIM14配置: 根据DDS输出频率动态计算// 中断频率 DDS频率 × 查找表点数// 中断优先级: 5voidHAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef*htim){if(htimhtim14){ddsDacTimTask();// DDS查表DAC写入}}3.4 TIM1~TIM8(非TIM12/13/14)PWM输出PWM通道定时器定时器通道引脚功能PWM1TIM1CH1PA8步进电机轴1PWM2TIM4CH3PB8步进电机轴2PWM3TIM3CH2PA7步进电机轴3PWM4TIM8CH4PC9步进电机轴4PWM5TIM5CH3PA2步进电机轴5PWM6TIM2CH2PB3步进电机轴6PWM定时器不使用中断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 arr240000000/samplingRate-1;// ARR最大65535超出时需要PSCu16 pscarr/65536;arrarr/(psc1);// 更新TIM13htim13.Instance-PSCpsc;htim13.Instance-ARRarr;}采样率ARRPSC中断间隔500K47902μs100K2399010μs10K239990100μs1K5999931ms100599993910ms五、中断优先级与嵌套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优先级最低6TIM12执行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触发而非TIM6TIM6/TIM7保持备用。6.3 SysTick vs TIM12定时器频率用途RTOS关系SysTick1KHzRT-Thread节拍RTOS管理TIM121KHzDIO/PWM加减速用户管理SysTick和TIM12都是1ms但用途不同。SysTick用于RTOS调度TIM12用于业务逻辑。七、定时器初始化代码7.1 CubeMX配置// TIM12 (1ms系统节拍)htim12.InstanceTIM12;htim12.Init.Prescaler999;htim12.Init.Period239;htim12.Init.CounterModeTIM_COUNTERMODE_UP;htim12.Init.ClockDivisionTIM_CLOCKDIVISION_DIV1;HAL_TIM_Base_Init(htim12);HAL_TIM_Base_Start_IT(htim12);// TIM13 (ADC采样触发)htim13.InstanceTIM13;htim13.Init.Prescaler0;htim13.Init.Period479;// 初始500KSPSHAL_TIM_Base_Init(htim13);HAL_TIM_Base_Start_IT(htim13);// TIM14 (DAC输出触发)htim14.InstanceTIM14;htim14.Init.Prescaler0;htim14.Init.Period2399;// 初始100KHAL_TIM_Base_Init(htim14);HAL_TIM_Base_Start_IT(htim14);// PWM定时器 (TIM1/2/3/4/5/8)// 使用PWM输出模式非中断htim1.Init.Prescaler0;htim1.Init.Period24000;// 初始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的IRQnSTM32H743中断向量表中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~10kHzTIM2240MHzPWM21~10kHzTIM3240MHzPWM31~10kHzTIM4240MHzPWM41~10kHzTIM5240MHzPWM51~10kHzTIM8240MHzPWM61~10kHzTIM12240MHz1ms节拍1kHz/优先级6TIM13240MHzADC采样1~500kHz/优先级5TIM14240MHzDAC输出可变/优先级5从6路PWM到3个功能定时器从240MHz时钟到动态ARR/PSC计算D223的定时器系统为500KSPS高速采样、DDS波形输出和PWM电机控制提供了精确的时序基础。5个备用定时器为功能扩展预留了充足空间。下篇预告《D223 vs 国产竞品对比分析》
返回列表