关于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;//从模式选择
仿真结果与库函数描述相同。
stm32定时器主从模 相关文章:
- stm32之定时器彻底研究(11-26)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)