STM8S103F3 无法运行 TIM2、TIM4,时钟已开但CNT不跑,求帮助
rt现象:用相同的方法配置TIM1、TIM2、TIM4,但TIM1正常,TIM2、TIM4完全不跑,找了很久资料毫无进展,求帮助,看有啥缺漏,谢谢!!!
固件库2.1.0
IAR stm8 1.41.1
使用st-link v2
void main(void)
{
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
/*
串口初始化代码
*/
/*TIM1初始化*/
CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER1,ENABLE);
TIM1_DeInit();
TIM1_SetCounter(0);
TIM1_TimeBaseInit(15999,TIM1_COUNTERMODE_UP,100,0);
/*TIM2初始化*/
CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER2,ENABLE);
TIM2_DeInit();
TIM2_SetCounter(0);
TIM2_TimeBaseInit(TIM2_PRESCALER_16384, 100);
TIM2_PrescalerConfig(TIM2_PRESCALER_16384,TIM2_PSCRELOADMODE_UPDATE);
/*TIM4初始化*/
CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER4,ENABLE);
TIM4_DeInit();
TIM4_SetCounter(0);
TIM4_TimeBaseInit(TIM4_PRESCALER_128, 100);
TIM4_PrescalerConfig(TIM4_PRESCALER_128,TIM4_PSCRELOADMODE_UPDATE);
/*使能定时器*/
TIM1_Cmd(ENABLE);
TIM2_Cmd(ENABLE);
TIM4_Cmd(ENABLE);
while(1)
{
/*打印当前CNT值*/
printf("%x,%x,%x\r\n",TIM1_GetCounter(),TIM2_GetCounter(),TIM4_GetCounter());
}
}
输出结果是把3个TIM的CNT打印出来,但只有TIM1在跑。
打印结果如下:
1,0,1
2,0,1
4,0,1
5,0,1
6,0,1
7,0,1
9,0,1
a,0,1
b,0,1
d,0,1
e,0,1
f,0,1
谢谢!
回复:STM8S103F3 无法运行 TIM2、TIM4,时钟已开但CNT不跑,求帮助
终于好了,固件库有问题。STM8S103F3的spec上描述TIM4的地址为0x005340,其后是两个保留字节。
而固件库上,TIM4的结构体中没有这两个保留字节,因此导致错位!
TIM2的问题也是同样处理。
RE:STM8S103F3 无法运行 TIM2、TIM4,时钟已开但CNT不跑,求帮助
原来是固件库版本太低了,用4.0.0就好了。RE:STM8S103F3 无法运行 TIM2、TIM4,时钟已开但CNT不跑,求帮助
呵呵, 有新的固件库就得用更新的试试RE:STM8S103F3 无法运行 TIM2、TIM4,时钟已开但CNT不跑,求帮助
寄存器使用错误导致。在使用stm库函数时,还是需要看看寄存器手册,寄存器手册才是最权威的,RE:STM8S103F3 无法运行 TIM2、TIM4,时钟已开但CNT不跑,求帮助
不是吧 库的版本低也会出现这问题RE:STM8S103F3 无法运行 TIM2、TIM4,时钟已开但CNT不跑,求帮助
建议楼主还是查一下原因。 我用2.0的库都没有任何问题。固件库问题可能性太小了。
页:
[1]