求助:库函数定时器(TIM3)例程,如何在程序运行中不断改变频率?

2019-08-16 21:02发布

就是在程序运行中,如何修改PSC?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
6条回答
Admin
2019-08-16 21:26
1.你的问题是:怎么在程序改变PSC
2.我告诉你是,改变PSC,看初始化代码:
    TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值   
   TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为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_Prescaler。
 
3.怎么改变?进入TIM_TimeBaseInit函数(stm32f10x_tim.c文件中),搜索TIM_Prescaler,找到寄存器是要改变:TIMx->SC
    TIMx->SC = TIM_TimeBaseInitStruct->TIM_Prescaler;

4.接下来怎么办?stm32f10x_tim.c文件中中搜索“ TIMx->SC ”,找到对应的函数。
void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t rescaler, uint16_t TIM_PSCReloadMode)
{
  /* Check the parameters */
  assert_param(IS_TIM_ALL_PERIPH(TIMx));
  assert_param(IS_TIM_PRESCALER_RELOAD(TIM_PSCReloadMode));
  /* Set the rescaler value */
  TIMx->SC = rescaler;
  /* Set or reset the UG Bit */
  TIMx->EGR = TIM_PSCReloadMode;
}


5.这就是改变PSC的函数,可以看出,同时要改变  TIMx->EGR。。。。
6.所以,再你要改变的地方调用这个函数即可。。。

一周热门 更多>