Advertisement

STM8S---TIM2生成PWM与TIM1定时器中断周期相关的时钟问题

阅读量:

1 问题

在以下测试程序中,若将Init_CLK()函数内的CLK_CKDIVR |= 0x08;语句中的“|”符号删除,则TIM1的功能表现与预期一致(实现10ms中断一次),但TIM2的PWM频率会随之升高;反之,若保留该符号,则TIM2的功能表现符合预期(生成1Hz的PWM信号),而TIM1的周期则会延长。
经过多次尝试测试,结果均未发生改变(无论是使用购买的开发板还是自行绘制的gs开发板进行测试,结果一致)。

2 尝试

由于STM8S默认启用的是内部16M高速RC振荡器,并对其进行8分频处理,因此系统启动时的主时钟频率为2M。此时CLK_CKDIVR寄存器的值被设置为0X18。如果再次对CLK_CKDIVR执行或运算操作,即CLK_CKDIVR |= 0X08,则主时钟的数值仍保持不变,仍为0X18。然而,若将CLK_CKDIVR重新赋值为0X08,则主时钟频率会改变,提升至8M。理论上TIM1和TIM2所使用的Fmaster时钟应保持一致,因此对CLK_CKDIVR进行赋值操作应当同时影响这两个定时器。但实际配置中却出现了差异,只有一个定时器能够按照预期设定正常运行,这背后的原因尚不清楚。

通过实验发现,在将CLK_CKDIVR设置为0X08(对应主时钟频率为8M)的情况下,TIM1可以按照预设参数正常工作,而TIM2的工作频率却明显加快了

全部评论 (0)

还没有任何评论哟~