微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 关于stm32的定时器主从模式概念

关于stm32的定时器主从模式概念

时间:11-30 来源:互联网 点击:
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;//从模式选择

仿真结果与库函数描述相同。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top