STM32的每个守时器都能够由另一个守时器触发发动守时器一般是经过软件设置而发动,STM32的每个守时器也能够经过外部信号触发而发动,还能够经过别的一个守时器的某一个条件被触发而发动.这儿所谓某一个条件能够是守时届时、守时器超时、比较成功等许多条件.这种经过一个守时器触发另一个守时器的作业方式称为守时器的同步,宣布触发信号的守时器作业于主形式,承受触发信号而发动的守时器作业于从形式
以下程序是从官方的修正而来
修正为寄存器版(主守时器:TIM2;从守时器:TIM3,省掉了TIM4):
/*从形式:TIM2主形式,TIM3从形式*/
void TIM_Parallel_Synchro(void)
{
/* System Clocks Configuration */
RCC->APB2ENR|=1<<2; //使能PORTA时钟
RCC->APB1ENR|=1<<0; //TIM2时钟使能
RCC->APB1ENR|=1<<1; //TIM3时钟使能
/* GPIO Configuration */
GPIOA->CRL&=0XFFFFFFF0;//PA0输出
GPIOA->CRL|=0X0000000B;//50Hz,复用功用输出
GPIOA->ODR|=1<<0; //PA0上拉
GPIOA->CRL&=0XF0FFFFFF;//PA6输出
GPIOA->CRL|=0X0B000000;//50Hz,复用功用输出
GPIOA->ODR|=1<<6; //PA6上拉
/* Timebaseconfiguration */
TIM2->ARR=255;//设定计数器主动重装值
TIM2->PSC=0 ;//预分频器分频
TIM2->CR1 &=~(3<<8);// 挑选时钟分频
TIM2->CR1 &=~(3<<5);// 挑选计数模式
TIM3->ARR=9; //设定计数器主动重装值
TIM3->PSC=0 ;//预分频器分频
TIM3->CR1 &=~(3<<8);// 挑选时钟分频
TIM3->CR1 &=~(3<<5);// 挑选计数形式
/* Master Configuration in PWM1 Mode */
TIM2->CCMR1|=6<<4; //输出比较形式
TIM2->CCER |=1<<0; //OC1 输出使能
TIM2->CCR1 =64; //捕获比较寄存器(占空比)
TIM2->CCER &=~(1<<1); //OC1 输出极性
/* Select the Master Slave Mode */
TIM2->SMCR|=1<<7;//挑选主从形式
/* Master Mode selection */
TIM2->CR2 |=2<<4;// 主形式挑选
/* Slaves Configuration: PWM1 Mode */
TIM3->CCMR1|=6<<4; //输出比较形式
TIM3->CCER |=1<<0; //OC1 输出使能
TIM3->CCR1 =3; //捕获比较寄存器(占空比)
TIM3->CCER &=~(1<<1); //OC1 输出极性
/* Slave Mode selection: TIM3 */
TIM3->SMCR|=5<<0;//从形式挑选
TIM3->SMCR|=1<<4;//触发挑选
/* TIM enable counter */
TIM3->CR1|=0x01; //CEN=1,使能守时器
TIM2->CR1|=0x01; //CEN=1,使能守时器
}
仿真成果:
可是仿真成果并不是库函数注释中描绘的那样
The TIMxCLK is fixed to 72 MHz, the TIM2 counter clock is 72 MHz.
The Master Timer TIM2 is running at 281.250 KHz and the duty cycle is equal to 25%
The TIM3 is running:
– At (TIM2 frequency)/ (TIM3 period + 1) = 28.125 KHz and a duty cycle
equal to TIM3_CCR1/(TIM3_ARR + 1) = 30%
假如修正:TIM3->SMCR|=5<<0;//从形式挑选
为:TIM3->SMCR|=7<<0;//从形式挑选
仿真成果与库函数描绘相同。