嗨,对话框中,
我在申请检测按钮按下时间(我需要知道按钮被按了多长时间)。你有解决方案吗?
我把我的代码放在下面:
空白press_button(空白)
{
如果(GetBits16 (SYS_STAT_REG PER_IS_DOWN))
periph_init ();
if((!(GetWord16(P0_DATA_REG) & (1 << 0)))) . GetWord16(P0_DATA_REG))
{
KeyInt_msTime = loop_timer_gettime ();
button_flag = 3;
}
wkupct_register_callback (press_button);
Wkupct_enable_irq (0x000001, 0x000001, 1, 0x14);
如果(button_flag = = 3)
{
#如果DEBUG_LOG3
printf_string(“国旗= = 2 \ r \ n”);
uart2_init (UART_BAUDRATE_115K2 3);
# endif
}
}
空白user_app_init(空白)
{
mnf_data_init ();
default_app_on_init ();
wkupct_register_callback (press_button);
Wkupct_enable_irq (0x000001, 0x000001, 1, 0x14);
}
设备:
嗨liuluan002,
有一个例子很长一段时间按钮在智能标记应用程序与内核定时器,如果多恩不适合你,我想,您可以使用一个h / w计时器开始当你按下按钮,停止当释放它,问题是,你要保持清醒为了定时器计数,当设备处于睡眠模式时,唯一在计数的定时器是内核定时器。
在你放置的代码中,你启用了一个中断,当按钮被按下时触发,但我不知道你是如何测量时间(loop_timer_gettime吗?),我想,你可以设置一个计时器,当按钮被按下计时器10 ms的最低分辨率和计算时间定时器回调函数,当按钮被释放你可以阅读的价值增加从计时器按钮被按下的时间。
由于MT_dialog
我要补充一点,我现在正在现场测试一个5秒唤醒时间的设备。它工作得很好,就像MT建议的内核计时器一样。从用户的角度来看,你可以按住这个按钮直到LED灯闪烁。在唤醒按钮回调中,我启动1秒计时器。在计时器回调中,我检查按钮是否仍然按下。如果是,我重新启动计时器并增加一秒计数。如果按钮在按钮计时器回调中不活跃,我重置计数器并退出而不重新启动计时器。我现在处于延长睡眠模式,所以我就继续睡觉。当第二个计时器回调达到5秒计数时,我闪烁LED并继续启动BLE唤醒。
我注意到的一件事是,在我设置的5秒计数中,LED发出唤醒信号的时间明显超过5秒。我假设这是由于处于睡眠模式和一些延迟时间不得不检测和开始处理唤醒按钮。对我来说,这不是问题。根据你的需要调整计时器和计数器是很容易的。