USBHS 添加TIM1定時器異常

Hi,大家好,我在調試CH32V307\CH32V307EVT\EVT\EXAM\USB\USBHS\DEVICE\CH372Device Demo時,添加了1ms定時器,用于閃燈,大部分LED閃爍正常,但是有時候發(fā)現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);

? ? }


我在想怎么也不會產生一閃一滅的現象發(fā)生呀,有沒有大佬遇到過這樣的問題,第一次使用CH32V307,有時候感覺程序運行很奇怪。

附件是我的代碼工程

icon_rar.gifCH372Device.zip




您好,感覺應該不是你定時器部分出了問題,你可將程序中USB相關處理部分函數注釋掉,只保留定時器以及點燈部分,測試一下LED閃爍是否有問題,這邊測試是沒有問題的。我看你程序中將USB中斷的處理以及LED燈的閃爍都放在while循環(huán)中,有可能是USB中斷處理這部分對LED燈的閃爍產生了影響。下圖圈出部分我看對其是注釋掉了,例程中是沒有注釋掉的,你可取消注釋試一下閃爍是否有問題。后續(xù)若有問題,可通過郵箱(lzs@wch.cn)和我具體溝通一下。

image.png


只有登錄才能回復,可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频