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 |= 0X08; 则主时钟仍是不变即0X18,可是假如赋值为CLK_CKDIVR = 0X08;,则主时钟就会改动,变为8M。可是TIM1和TIM2的Fmaster时钟应该是相同的,这样的赋值应该会对TIM1和TIM2都会发生影响,可是两个赋值不同,完成功用的装备正确,而总只要一个能按预设定作业,这到底是怎样回事呢?
发现设置为CLK_CKDIVR = 0X08时(8M),TIM1能按预设定作业,而TIM2的作业频率却显着快了,像是快了一倍,带着这个发现,我就将现在的TIM2的Fmaster时钟频率当做为TIM1的一倍,即16M,再去重新装备TIM2的寄存器,再编译、下载进单片机,竟然和TIM1完成的功用相同了。这又到底是怎样回事呢?莫非TIM2的Fmaster时钟总是TIM1的Fmaster时钟的一倍吗?又去测验几种不同的CLK_CKDIVR(当然则TIM1的Fmaster频率不能超过8M)。
接下来测验了 CLK_CKDIVR = 0X10;(4M), CLK_CKDIVR = 0X18;(2M)均是如此。是不是猜测正确了,仍是想不明白是怎样回事。看着STM8S的时钟树怎样也想不明白。
3 测验程序