stm32 能否在定时器中断中修改定时器重装值?
stm32能否在定时器中断中修改定时器重装值?eg.在定时器2中断库函数TIM2_IRQHandler()中,使用TIM_TimeBaseInit()重新设定定时器2的重...
stm32能否在定时器中断中修改定时器重装值? eg.在定时器2中断库函数TIM2_IRQHandler()中,使用TIM_TimeBaseInit()重新设定定时器2的重装值?如可以需要怎样配置?
展开
2个回答
展开全部
stm32能否在定时器中断中修改定时器重装值?
回答:可以的。
因为我是用的库函数,所以我下面粘贴一段自己写过的定时器的程序:
void tim2_cfg(void)
{
/**************** TIM配置 ****************/
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
TIM_DeInit(TIM2);
TIM_InternalClockConfig(TIM2);
TIM_TimeBaseStructure.TIM_Prescaler = 72; //预分频系数为72,这样计数器时钟为72MHz/72 = 1MHz
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //设置计数器模式为向上计数模式
TIM_TimeBaseStructure.TIM_Period = 1000; //-1; //设置计数溢出大小,每计1000个数就产生一个更新事件
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure); //将配置应用到TIM2中
TIM_ARRPreloadConfig(TIM2, DISABLE); //禁止ARR预装载缓冲器
TIM_Cmd(TIM2, ENABLE); //使能TIMx外设
}
里面设置技术溢出大小那一句,就是设置装载值
回答:可以的。
因为我是用的库函数,所以我下面粘贴一段自己写过的定时器的程序:
void tim2_cfg(void)
{
/**************** TIM配置 ****************/
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
TIM_DeInit(TIM2);
TIM_InternalClockConfig(TIM2);
TIM_TimeBaseStructure.TIM_Prescaler = 72; //预分频系数为72,这样计数器时钟为72MHz/72 = 1MHz
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //设置计数器模式为向上计数模式
TIM_TimeBaseStructure.TIM_Period = 1000; //-1; //设置计数溢出大小,每计1000个数就产生一个更新事件
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure); //将配置应用到TIM2中
TIM_ARRPreloadConfig(TIM2, DISABLE); //禁止ARR预装载缓冲器
TIM_Cmd(TIM2, ENABLE); //使能TIMx外设
}
里面设置技术溢出大小那一句,就是设置装载值
追问
此函数是在中断库函数TIM2_IRQHandler()中调用的吗?改装载值之前需要关计时器吗?万分感谢。
追答
不是……这就是自己写的一个子函数,用于TIME的配置的。这个子函数里
TIM_ARRPreloadConfig(TIM2, DISABLE); //禁止ARR预装载缓冲器
这一句将DISABLE改为ENABLE,就使能了,即打开了TIME。
TIM2_IRQHandler()中只需要写你中断以后需要它执行的程序,并且清零中断位就好了……
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询