CubeMX| 怎么动态的修改时钟周期?

我用CubeMX生成的SW4STM32项目,单片机是F103C8T6。

在写一个生成PWM输出的代码,编译运行正常。现在有个问题,我想动态的调整时钟的周期值,这样就可以改变输出的频率了。

时钟描述文件tim.c中:

void MX_TIM4_Init(void)

{

  TIM_MasterConfigTypeDef sMasterConfig = {0};

  TIM_OC_InitTypeDef sConfigOC = {0};

  htim4.Instance = TIM4;

  htim4.Init.Prescaler = 720-1;

  htim4.Init.CounterMode = TIM_COUNTERMODE_UP;

  htim4.Init.Period = 227-1; //周期初始化时候的值


我想在main.c里动态的修改 htim4.Init.Period这个值该怎么做?用哪个函数或者修改哪个寄存器?小白刚刚学一点也不了解,请有经验的朋友指教,谢谢! O(∩_∩)O


//---补充1---------------------------------------//

刚在main.c里修改了计时器的ARR,实现了实时修改周期,以改变PWM输出频率。

TIM4->ARR = thePeriod;

但是这样又出现了新问题,虽然周期改变了,但是之前的计数没有清空,输出时候不正常。如何解决这个问题呢?怎么清空之前的计数?



//---补充2---------------------------------------//

TIM4->CNT = 0;

这样写可以清零计数器。然鹅又有新问题了,哈哈~ 在计数器清零的时候,输出波形会有个“噪音”。

22.jpg


如何消除这个噪音呢?



//---补充3---------------------------------------//

上面这个噪音的问题我怀疑是仅仅清空计数器TIM4->CNT = 0;还不够的原因。但具体还要清空、从新初始化哪些寄存器还是不清楚,于是用了个粗暴的方法来解决。直接停止计时器,然后重新开启。


33.jpg


虽然这样问题解决了,可是感觉代价好像有点大,而且也不知道具体是哪的问题,求指教~

已邀请:

Stormer

赞同来自:

 哈哈 成自问自答的学习笔记了,人这么少吗,还是我问的太水了?

白白一直要努力啊

赞同来自:

正好也要实时修改频率,跑来学习,多谢大神的探索。

要回复问题请先登录注册