概述
将定时器3做为定时器2 的时钟输入,可用定时器2的值作为定时器3的中断次数、PWM方波个数等
定时器3作为主定时器,需要配置更新事件作为从定时器的预分频器,另外需将定时器3作为主模式运行,置位从模式控制寄存器(TIMx_SMCR)中的第7位。
定时器2作为从定时器,需要设置从模式控制寄存器(TIMx_SMCR)中的TS位为010,
#include "timer.h"
#include "led.h"
/*
使用正点原子模板例程改编
使用定时器3作为主定时器,定时器2作为从定时器
PB5指定为LED输出,观察定时器运行情况
*/
void TIM2_Slave_Init(u16 period,u16 prescaler)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //时钟使能
//定时器TIM2初始化
TIM_TimeBaseStructure.TIM_Period = period-1; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
TIM_TimeBaseStructure.TIM_Prescaler =prescaler-1; //设置用来作为TIMx时钟频率除数的预分频值
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位
TIM_SelectInputTrigger(TIM2,TIM_TS_ITR2); //选择TIMx输入触发源
TIM_SelectSlaveMode(TIM2,TIM_SlaveMode_External1); //选中触发( TRGI)的上升沿作为计数器时钟
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; //TIM2中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级0级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级3级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
NVIC_Init(&NVIC_InitStructure); //初始化NVIC寄存
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE ); //使能指定的TIM2中断,允许更新中断
TIM_Cmd(TIM2, ENABLE); //使能TIMx
}
void TIM2_IRQHandler(void) //TIM3中断
{
if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET)
{
TIM_ClearITPendingBit(TIM2, TIM_IT_Update ); //清除TIMx更新中断标志
LED1 = !LED1;
}
}
void TIM3_Init(u16 period,u16 prescaler)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能
//定时器TIM3初始化
TIM_TimeBaseStructure.TIM_Period = period-1; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
TIM_TimeBaseStructure.TIM_Prescaler =prescaler-1; //设置用来作为TIMx时钟频率除数的预分频值
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位
TIM_SelectMasterSlaveMode(TIM3, TIM_MasterSlaveMode_Enable);//主定时器模式
TIM_SelectOutputTrigger(TIM3, TIM_TRGOSource_Update); //主定时器更新事件作为从定时器时钟源
TIM_ITConfig(TIM3,TIM_IT_Update,DISABLE ); //使能指定的TIM3中断,允许更新中断
TIM_Cmd(TIM3, ENABLE); //使能TIMx
}
定时器源码见本链接,使用MDK5.18,单片机是STM32F103RET6
源码链接
最后
以上就是高高心锁为你收集整理的STM32F1主从定时器设置的全部内容,希望文章能够帮你解决STM32F1主从定时器设置所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复