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

2019-08-16 21:02发布

就是在程序运行中,如何修改PSC?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
Admin
1楼-- · 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.所以,再你要改变的地方调用这个函数即可。。。
lanny_cn
2楼-- · 2019-08-17 00:13
竟然后台BOSS冒泡了。。。
wft2
3楼-- · 2019-08-17 00:15
 精彩回答 2  元偷偷看……
wft2
4楼-- · 2019-08-17 02:16
我的问题是:如何在程序运行中不断改变频率?
正点原子
5楼-- · 2019-08-17 02:56
一定要人给你写好代码,帮你测试好了,才能做么?
那你请人帮你做就是了,简单的很,说你要什么效果,出什么价,价格合适,我相信大把人愿意做。
频率受2个参数控制,PSC和ARR,要改变频率,无非就是改这两个东西。
RuiYing
6楼-- · 2019-08-17 08:32
Admin 发表于 2013-11-7 17:34
1.你的问题是:怎么在程序改变PSC
2.我告诉你是,改变PSC,看初始化代码:
    TIM_Ti ...

谢谢谢谢

一周热门 更多>