USBHS 添加TIM1定时器异常

Hi,大家好,我在调试CH32V307\CH32V307EVT\EVT\EXAM\USB\USBHS\DEVICE\CH372Device Demo时,添加了1ms定时器,用于闪灯,大部分LED闪烁正常,但是有时候发现LED闪烁不正常,会出现抖动情况,瞬间一亮一灭,感觉程序异常了,找不到原因,哭了。这个是我TIM1的初始化及中断函数,


volatile uint32_t system_timer_cnt = 0;

void TIM1_UP_IRQHandler(void)? __attribute__((interrupt("WCH-Interrupt-fast")));

void TIM1_UP_IRQHandler(void)

{

? ? TIM_ClearFlag(TIM1, TIM_FLAG_Update);

? ? system_timer_cnt ++;

}


void TIM1_Init(void)

{

? ? TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure = {0};


? ? RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);


? ? TIM_TimeBaseInitStructure.TIM_Period = 999;

? ? TIM_TimeBaseInitStructure.TIM_Prescaler = 95;

? ? TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;

? ? TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;

? ? TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;

? ? TIM_TimeBaseInit(TIM1, &TIM_TimeBaseInitStructure);


? ? NVIC_EnableIRQ(TIM1_UP_IRQn);

? ? TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE);

? ? TIM_Cmd(TIM1, ENABLE);

}


我在main while 1中的代码:

while(1)

{

? ? USBHS_IRQHandler1();

? ? if((system_timer_cnt % 1000) == 0) {

? ? ? ? led_tongle1();

? ? ? ? //printf("system_timer_cnt = %d\r\n", system_timer_cnt);

? ? }


我在想怎么也不会产生一闪一灭的现象发生呀,有没有大佬遇到过这样的问题,第一次使用CH32V307,有时候感觉程序运行很奇怪。

附件是我的代码工程

icon_rar.gifCH372Device.zip




您好,感觉应该不是你定时器部分出了问题,你可将程序中USB相关处理部分函数注释掉,只保留定时器以及点灯部分,测试一下LED闪烁是否有问题,这边测试是没有问题的。我看你程序中将USB中断的处理以及LED灯的闪烁都放在while循环中,有可能是USB中断处理这部分对LED灯的闪烁产生了影响。下图圈出部分我看对其是注释掉了,例程中是没有注释掉的,你可取消注释试一下闪烁是否有问题。后续若有问题,可通过邮箱(lzs@wch.cn)和我具体沟通一下。

image.png


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