CH32V203F6P6设置TIM4后,打印TIM4的CNT值为0,没有任何变化。

    /* 配置TIM4 */

    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure={0};


    TIM_TimeBaseInitStructure.TIM_Period = 1000;

    TIM_TimeBaseInitStructure.TIM_Prescaler = 1000;

    TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;

    TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;

    TIM_DeInit(TIM4);

    RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM4, ENABLE);


    /* 初始化TIM4 */

    TIM_TimeBaseInit(TIM4, &TIM_TimeBaseInitStructure);

    TIM_ClearFlag( TIM4, TIM_FLAG_Update );

    TIM_ARRPreloadConfig( TIM4, ENABLE );

    TIM_Cmd( TIM4, ENABLE );


USART_Printf_Init(9600);

while(1){

    printf("Timer4 CNT:0x%06\r\n",TIM_GetCounter(TIM4));

    Delay_Ms(200);

}


打印结果:

Timer4 CNT:0x00000

Timer4 CNT:0x00000

Timer4 CNT:0x00000

Timer4 CNT:0x00000

Timer4 CNT:0x00000

Timer4 CNT:0x00000

Timer4 CNT:0x00000

Timer4 CNT:0x00000

Timer4 CNT:0x00000

Timer4 CNT:0x00000

Timer4 CNT:0x00000

Timer4 CNT:0x00000

Timer4 CNT:0x00000


您好,对定时器时钟的使能以及DeInit函数放在最前面,可以参考一下下图TIM4的配置

image.png



void TIM_DeInit(TIM_TypeDef *TIMx)

{

    if(TIMx == TIM1)

    {

        RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM1, ENABLE);

        RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM1, DISABLE);

    }

    else if(TIMx == TIM2)

    {

        RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM2, ENABLE);

        RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM2, DISABLE);

    }

    else if(TIMx == TIM3)

    {

        RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM3, ENABLE);

        RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM3, DISABLE);

    }

    else if(TIMx == TIM4)

    {

        RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM4, ENABLE);

        RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM4, DISABLE);

    }

 

从TIM_DeInit函数内容看,应该放在RCC_APB1PeriphResetCmd函数前面;

另外,1楼示例,除了没启用中断,与你给的示例基本一样,但是就是看不到CNT寄存器值变化:(


对比技术支持给出的代码,再看看你的,你这都没使能定时器模块的时钟好么?这才是根本问题啊!

不要纠结在 Reset 与 DeInit 上啊。

没时钟,你再怎么操作都没用的嘛。


成了睁眼瞎了,硬是将RCC_APB1PeriphResetCmd 看成 RCC_APB1PeriphClockCmd :(


只有登录才能回复,可以选择微信账号登录