stm32主从模式定时器产生精确脉冲个数
2017-04-07 17:28
465 查看
STM32的每个定时器都可以由另一个定时器触发启动定时器一般是通过软件设置而启动,STM32的每个定时器也可以通过外部信号触发而启动,还可以通过另外一个定时器的某一个条件被触发而启动.这里所谓某一个条件可以是定时到时、定时器超时、比较成功等许多条件.这种通过一个定时器触发另一个定时器的工作方式称为定时器的同步,发出触发信号的定时器工作于主模式,接受触发信号而启动的定时器工作于从模式。
STM32 的Timer之间可以用Timer Internal Trigger联系起来。
各个Timer之间的联系可以用下表表示
实例:
STM32 的Timer之间可以用Timer Internal Trigger联系起来。
各个Timer之间的联系可以用下表表示
实例:
#include "stm32f10x.h" //定时器4主模式 //PWM输出 void TIM4_config(u32 Cycle) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; //TIM2_CH2 PB7 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); TIM_TimeBaseStructure.TIM_Period = Cycle-1; TIM_TimeBaseStructure.TIM_Prescaler =71; //设置用来作为TIMx时钟频率除数的预分频值 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS= Tck_tim TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式 TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式1 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能 TIM_OCInitStructure.TIM_Pulse = Cycle/2-1; //设置待装入捕获寄存器的脉冲值 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性 TIM_OC2Init(TIM4, &TIM_OCInitStructure); TIM_SelectMasterSlaveMode(TIM4, TIM_MasterSlaveMode_Enable); TIM_SelectOutputTrigger(TIM4, TIM_TRGOSource_Update); TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable); TIM_ARRPreloadConfig(TIM4, ENABLE); } /***定时器3从模式***/ void TIM3_config(u32 PulseNum) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); TIM_TimeBaseStructure.TIM_Period = PulseNum-1; TIM_TimeBaseStructure.TIM_Prescaler =0; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); TIM_SelectInputTrigger(TIM3, TIM_TS_ITR3); //TIM_InternalClockConfig(TIM3); TIM3->SMCR|=0x07; //设置从模式寄存器 //TIM_ARRPreloadConfig(TIM3, ENABLE); TIM_ITConfig(TIM3,TIM_IT_Update,DISABLE); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3); NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } void Pulse_output(u32 Cycle,u32 PulseNum) { TIM3_config(PulseNum); TIM_Cmd(TIM3, ENABLE); TIM_ClearITPendingBit(TIM3,TIM_IT_Update); TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); TIM4_config(Cycle); TIM_Cmd(TIM4, ENABLE); }
相关文章推荐
- 使用stm32主从门控模式精确控制脉冲个数
- STM32定时器----主从模式触发PWM移相
- stm32通用定时器产生pwm时 模式1和模式2有什么区别
- STM32 用定时器产生1Mhz 脉冲,
- stm32定时器主从模式
- STM32 定时器用于外部脉冲计数(转)
- STM32定时器的编码器模式
- Linux_arm驱动之按键模拟脉冲实现定时器的精确计时 (实例)
- 定时器 主从模式 大揭秘
- STM32 定时器用于外部脉冲计数,修改版,解决3..4库对应的无响应外部脉冲的问题
- 亲测鸡汤!!stm32用于进入停止模式的中断和用于产生唤醒的中断,后者的抢占优先级一定要高,否则无法唤醒!
- STM32定时器溢出模式计时设置
- STM32定时器溢出模式设置
- STM32定时器输出比较模式
- STM32 16位定时器对正交编码器计数的方法(附检测输入脉冲的方法)
- STM32 定时器用于外部脉冲计数
- stm32PWM精确控制脉冲个数
- 使用STM32的定时器进行输入脉冲的计数
- STM32--系统时钟定时器(精确定时程序)
- 小熊STM32学习总结:STM32的定时器--输入捕捉模式