你好Dialog,
void timer0\u general\u user\u callback\u函数(void){static uint8\u t n=0;//当通过10*100ms时,如果(10==n){n=0;超时\u过期--;if(GPIO_GetPinStatus(GPIO_LED_PORT,GPIO_LED_PIN)){GPIO_SetInactive(GPIO_LED_PORT,GPIO_LED_PIN);}else{GPIO_SetActive(GPIO_LED_PORT,GPIO_LED_PIN);}}n++;}静态无效按钮\u计时器\u激活(uint8 \u t延迟\u秒){wdg \u freeze();//输入设置定时器0_Stop()的停止定时器;超时\u过期=延迟\u秒;//为SWTIM_IRQn irq timer0_register_callback注册回调函数(timer0_general_user_callback_function);//Enable TIMER0 clock set_tmr_Enable(CLK_PER_REG_tmr_ENABLED);//将TIMER0、TIMER2时钟分频因子设置为8,因此TIM0 Fclk为F=16MHz/8=2Mhz set_tmr_div(CLK_PER_REG_tmr_div_8);//清除PWM设置寄存器以不生成PWM定时器0\u设置\u PWM\u高\u计数器(0x0);定时器0_设置_pwm_低_计数器(0x0);//用2MHz源时钟除以10设置定时器,所以Fclk=2MHz/10=200kHz定时器0_init(TIM0_CLK_FAST,PWM_MODE_ONE,TIM0_CLK_DIV_by_10);//100ms的重新加载值(T=1/200kHz*重新加载100ms=0000005*20000=100ms)定时器0设置pwm在计数器上(20000);//启用SWTIM_IRQn irq timer0_Enable_irq();//开始时间0 Timer0_Start();//等待所需的秒数while(timeout_expiration);//禁用定时器0,定时器2时钟设置\u tmr \u启用(CLK \u PER \u REG \u tmr \u DISABLED);wdg_reload(看门狗_DEFAULT_PERIOD);}
上面的代码是在while(1){schedule_while_ble_on();}之前的main()中的system_init()之后调用的。
代码没有按照所需的逻辑运行。
即使超时过期时间达到0,也会调用ISR回调。
我需要尽快的帮助。
谢谢
当做
拉朱
霍尼韦尔
设备:
你好Dialog,
这是个设计问题-
超时\u过期应为“VOLATILE”
当做
拉朱
你好rajucoolsuraj,
很高兴你解决了问题,谢谢你的提示,
谢谢,下午好