版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
前言:TIM1、TIM8是STM32的高级定时器,在高容量的STM32芯片中含有TIM8,低容量芯片只有TIM1。这两个定时器是完全独立工作的。在实际工作中,我们希望他们有时间上的联系。比如做全桥移相的时候,需要两个PWM之间有一个相位差,并且可以调整相位宽度。这点STM32是可以做到的。
思路:TIM1作为主定时器,TIM8作为从定时器。TIM1_CH1/CH1N、TIM8_CH1/CH1N互补输出。另取通道TIM1_CH2产生的OC2REF作为触发源TRGO。设置TIM1_CH2的比较寄存器TIM1_CCR2,设定延时时间。当TIM1_CH2比较溢出,产生OC2REF上升沿,TIM8作为从模式收到TRGI上升沿,产生复位,从头产生PWM。从而实现TIM1/TIM8双路PWM产生时间差,即移相。
重点:
MMS@TIM1_CR2设置为“101” 【主模式,OC2REF用作触发输出TRGO】
TS@TIM8_SMCR设置为“000” 【TIM8触发输入TRGI选择内部触发0(ITR0),也就是对应TIM1】
SMS@TIM8_SMCR设置为“100” 【TIM8从模式选择复位模式】
开整:
TIM1模式设置void TIM1_Mode_Config(void) {	TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;	TIM_DeInit(TIM1);	TIM_TimeBaseStructure.TIM_Period =_PWM_PeriodVal;	/*1.设置定时时间ARR*/	TIM_TimeBaseStructure.TIM_Prescaler = 0;	/*2.设置预分频:不预分频,即为72MHz */	TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;	/*3.设置时钟分频因子[TIMx_CR1:CKD]:不分频。采样输入时有效*/	TIM_TimeBaseStructure.TIM_CounterMode = TIM_Co