功能需求:多个管脚能唤醒系统..问题描述:我看应用程序按钮,他的wkupct_enable_irq只能使用一个管脚的呢?我有多个管脚想唤醒。怎么弄呢?
建议你看一下鼠标演示的工程。
void app_kbd_enable_wakeup_irq(void){// p10 (mot), p11 (bl), p07 (bm), p01 (br)const uint32_t sel_pins = ((1 < < 7) | (1 < < 1) | (((1 < < 1) | (1 < < 0)) < < 8);/ /支持几路GPIO做唤醒const uint32_t pol_pins = ((! middle_button_pressed < < 7) | (! right_button_pressed < < 1 )) | ( ((! left_button_pressed < < 1) | (1 < < 0)) < < 8);
wkupct_register_callback (wakeup_handler);//TODO:不需要总是调用,只在appl期间调用一次。初始化。
wkupct_enable_irq(sel_pins,pol_pins,wakeup_events_quota,wakeup_key_debouncing_time_in_ms);}
我这样试了 的.可是不行哦wkupct_enable_irq (WKUPCT_PIN_SELECT (GPIO_BUTTON_PORT GPIO_BUTTON_PIN)| WKUPCT_PIN_SELECT (GPIO_DISMANTLE_CHECK2_PORT GPIO_DISMANTLE_CHECK2_PIN), //选择pin (GPIO_BUTTON_PORT, GPIO_BUTTON_PIN)
WKUPCT_PIN_POLARITY (GPIO_BUTTON_PORT GPIO_BUTTON_PIN WKUPCT_PIN_POLARITY_HIGH)| wkupct_pin_极性(gpio_disable_check2_port, gpio_disable_check2_pin, wkupct_pin_polarity_high), / /极性高1, // 1事件0 x30);//恢复时间= 0
}
鼠标演示的工程不在sdk5.0.3和5.0.4中的啊
鼠标是单独的项目,可以在参考设计里面找。你现在不行是按单个键就换不醒吗?
如果单独设置一个按键,那个按键是没问题的,可是或上其他一个按键,却导致2个按键都没有唤醒系统的功能的了!
你们那边有试过的吗?为什么我这边会不行的呢?我直接使用的是5.0.3的prox_reporter工程里的user_proxr.c他原来就一个按键。我看他按键的或结构, 所以就添加了一个按键.添加上去后, 原来那个按键都不能唤醒系统了.我的系统睡眠模式是ARCH_EXT_SLEEP_ON。另外我看他在user_periph_setup.h里面定义了WKUP_ENABLED的。
有人回应一下的吗?在线等
我这里可以的,添加了一个button2,然后在app_button_press_cb里打印信息
空白app_button_enable(空白){app_easy_wakeup_set (app_wakeup_cb);wkupct_register_callback (app_button_press_cb);#如果USE_PUSH_BUTTONif (GPIO_GetPinStatus(GPIO_BUTTON_PORT, GPIO_BUTTON_PIN))WKUPCT_PIN_SELECT(GPIO_BUTTON_PORT, GPIO_BUTTON_PIN), //选择pin (GPIO_BUTTON_PORT, GPIO_BUTTON_PIN)wkupct_pin_极性(GPIO_BUTTON_PORT, GPIO_BUTTON_PIN, WKUPCT_PIN_POLARITY_LOW), //极性低1, // 1事件0);//恢复时间= 0# endif}
既然你可以打印信息, 证明你是在非深度睡眠状态下.请尝试在ARCH_EXT_SLEEP_ON状态下测试确认一下。谢谢.而且我发表在arch_ext_sleep_on唤醒后,有色其他奇怪现象。这个暂不锈钢。后面再请教一下。
就是在const静态sleep_state_t app_default_sleep_mode = ARCH_EXT_SLEEP_ON;
打印我是放在外设电起来后。
空白app_button_press_cb(空白){.................如果(GetBits16 (SYS_STAT_REG PER_IS_DOWN))periph_init ();
printf_string(“hello \ n”);///}
空白uart_send_byte (char ch){而((GetWord16 (UART_LSR_REG) &0x20) = = 0);//读取status reg,检查THR是否为空SetWord16 (UART_RBR_THR_DLL_REG (0 xff&ch));//写入THR寄存器}
Void printf_string(char * str){而(* str ! = ' \ 0 '){//而不是最后一个字符串字符uart_send_byte (str);//发送下一个字符串字符str + +;}}
谢谢.我明天把你代码应用到我的系统上看看行不行.因为我观察唤醒,是我的oled屏被点亮的。或许是点亮失败.因为我发现单独一个按键时,正常应该屏唤醒3 s后再灭屏,但是实际测试时,发现是屏亮一下后,马上又灭了。明天上班再测测看看咯.
另外我想问一下,你们那边是不是把精力更多地放在sdk5.0.4上的吗?因为我看8月8号发布了sdk5.0.4。我现在用的是5.0.3的。
你好。我觉得你的,首先,在user_perph_setup.c里的set_pad_functions()函数里初始化串口:GPIO_ConfigurePin(UART_GPIO_PORT, UART_TX_PIN, OUTPUT, pid_uart_tx, false); / /输出GPIO_ConfigurePin(UART_GPIO_PORT, UART_RX_PIN, INPUT, pid_uart_rx, false);SetBits16 (CLK_PER_REG UART1_ENABLE 1);//为UART 1启用时钟uart_init (UART_BAUDRATE UART_DATALENGTH);
然后在app_button_press_cb添加打印。但是我是在arch_main.c里屏蔽掉/ / arch_turn_peripherals_off (sleep_mode);否则打印不出来.
另外发现有时打印出乱码.【2016-08-19 11:56:56:454】?【2016-08-19 11:56:56:712】?!!!问蓂)?>醕失去
打印乱码的时候, 就是我程序控制不正常的时候.我使用了一个定时器来定时自动关闭屏幕。正常的时候是亮屏3 s后,自动关闭。但是当不正常时, 他亮屏后, 就马上灭屏.我从打印日志中看的到,这个是他调用了定时的处理程序。【2016-08-19 14:15:23:071】鰴?憽问【2016-08-19 14:15:23:329】?!!!问蓂)?︷密切
【2016-08-19 14:15:23:538】手
但是他是突然调用的.不是正常按照定时之后的
是不是不能在app_button_press_cb()里调用用时比较多的函数的。我这边把他弄到app_wakeup_cb()函码里再看看。
SDK5.0.4刚发布,所以也在熟悉阶段
打印乱码确实会出现,因为刚在唤醒状态,16米还不稳定。但是不会出现你说的这种情况。”然后在app_button_press_cb添加打印。但是我是在arch_main.c里屏蔽掉/ / arch_turn_peripherals_off (sleep_mode);否则打印不出来.”
建议你看一下鼠标演示的工程。
void app_kbd_enable_wakeup_irq(void)
{
// p10 (mot), p11 (bl), p07 (bm), p01 (br)
const uint32_t sel_pins = ((1 < < 7) | (1 < < 1) | (((1 < < 1) | (1 < < 0)) < < 8);/ /支持几路GPIO做唤醒
const uint32_t pol_pins = ((! middle_button_pressed < < 7) | (! right_button_pressed < < 1 )) | ( ((! left_button_pressed < < 1) | (1 < < 0)) < < 8);
wkupct_register_callback (wakeup_handler);//TODO:不需要总是调用,只在appl期间调用一次。初始化。
wkupct_enable_irq(sel_pins,pol_pins,wakeup_events_quota,wakeup_key_debouncing_time_in_ms);
}
我这样试了 的.可是不行哦
wkupct_enable_irq (WKUPCT_PIN_SELECT (GPIO_BUTTON_PORT GPIO_BUTTON_PIN)
| WKUPCT_PIN_SELECT (GPIO_DISMANTLE_CHECK2_PORT GPIO_DISMANTLE_CHECK2_PIN)
, //选择pin (GPIO_BUTTON_PORT, GPIO_BUTTON_PIN)
WKUPCT_PIN_POLARITY (GPIO_BUTTON_PORT GPIO_BUTTON_PIN WKUPCT_PIN_POLARITY_HIGH)
| wkupct_pin_极性(gpio_disable_check2_port, gpio_disable_check2_pin, wkupct_pin_polarity_high)
, / /极性高
1, // 1事件
0 x30);//恢复时间= 0
}
鼠标演示的工程不在sdk5.0.3和5.0.4中的啊
鼠标是单独的项目,可以在参考设计里面找。你现在不行是按单个键就换不醒吗?
如果单独设置一个按键,那个按键是没问题的,可是或上其他一个按键,却导致2个按键都没有唤醒系统的功能的了!
你们那边有试过的吗?为什么我这边会不行的呢?我直接使用的是5.0.3的prox_reporter工程里的user_proxr.c他原来就一个按键。我看他按键的或结构, 所以就添加了一个按键.添加上去后, 原来那个按键都不能唤醒系统了.我的系统睡眠模式是ARCH_EXT_SLEEP_ON。
另外我看他在user_periph_setup.h里面定义了WKUP_ENABLED的。
有人回应一下的吗?在线等
我这里可以的,添加了一个button2,然后在app_button_press_cb里打印信息
空白app_button_enable(空白)
{
app_easy_wakeup_set (app_wakeup_cb);
wkupct_register_callback (app_button_press_cb);
#如果USE_PUSH_BUTTON
if (GPIO_GetPinStatus(GPIO_BUTTON_PORT, GPIO_BUTTON_PIN))
WKUPCT_PIN_SELECT(GPIO_BUTTON_PORT, GPIO_BUTTON_PIN), //选择pin (GPIO_BUTTON_PORT, GPIO_BUTTON_PIN)
wkupct_pin_极性(GPIO_BUTTON_PORT, GPIO_BUTTON_PIN, WKUPCT_PIN_POLARITY_LOW), //极性低
1, // 1事件
0);//恢复时间= 0
# endif
}
既然你可以打印信息, 证明你是在非深度睡眠状态下.请尝试在ARCH_EXT_SLEEP_ON状态下测试确认一下。谢谢.
而且我发表在arch_ext_sleep_on唤醒后,有色其他奇怪现象。这个暂不锈钢。后面再请教一下。
就是在const静态sleep_state_t app_default_sleep_mode = ARCH_EXT_SLEEP_ON;
打印我是放在外设电起来后。
空白app_button_press_cb(空白)
{
.................
如果(GetBits16 (SYS_STAT_REG PER_IS_DOWN))
periph_init ();
printf_string(“hello \ n”);///
}
空白uart_send_byte (char ch)
{
而((GetWord16 (UART_LSR_REG) &0x20) = = 0);//读取status reg,检查THR是否为空
SetWord16 (UART_RBR_THR_DLL_REG (0 xff&ch));//写入THR寄存器
}
Void printf_string(char * str)
{
而(* str ! = ' \ 0 ')
{//而不是最后一个字符串字符
uart_send_byte (str);//发送下一个字符串字符
str + +;
}
}
谢谢.我明天把你代码应用到我的系统上看看行不行.
因为我观察唤醒,是我的oled屏被点亮的。或许是点亮失败.因为我发现单独一个按键时,正常应该屏唤醒3 s后再灭屏,但是实际测试时,发现是屏亮一下后,马上又灭了。
明天上班再测测看看咯.
另外我想问一下,你们那边是不是把精力更多地放在sdk5.0.4上的吗?因为我看8月8号发布了sdk5.0.4。我现在用的是5.0.3的。
你好。我觉得你的,
首先,在user_perph_setup.c里的set_pad_functions()函数里初始化串口:
GPIO_ConfigurePin(UART_GPIO_PORT, UART_TX_PIN, OUTPUT, pid_uart_tx, false); / /输出
GPIO_ConfigurePin(UART_GPIO_PORT, UART_RX_PIN, INPUT, pid_uart_rx, false);
SetBits16 (CLK_PER_REG UART1_ENABLE 1);//为UART 1启用时钟
uart_init (UART_BAUDRATE UART_DATALENGTH);
然后在app_button_press_cb添加打印。但是我是在arch_main.c里屏蔽掉
/ / arch_turn_peripherals_off (sleep_mode);
否则打印不出来.
另外发现有时打印出乱码.
【2016-08-19 11:56:56:454】?
【2016-08-19 11:56:56:712】?!!!问蓂)?>醕失去
打印乱码的时候, 就是我程序控制不正常的时候.
我使用了一个定时器来定时自动关闭屏幕。正常的时候是亮屏3 s后,自动关闭。但是当不正常时, 他亮屏后, 就马上灭屏.我从打印日志中看的到,这个是他调用了定时的处理程序。
【2016-08-19 14:15:23:071】鰴?憽问
【2016-08-19 14:15:23:329】?!!!问蓂)?︷密切
【2016-08-19 14:15:23:538】手
但是他是突然调用的.不是正常按照定时之后的
是不是不能在app_button_press_cb()里调用用时比较多的函数的。
我这边把他弄到app_wakeup_cb()函码里再看看。
SDK5.0.4刚发布,所以也在熟悉阶段
打印乱码确实会出现,因为刚在唤醒状态,16米还不稳定。
但是不会出现你说的这种情况。
”
然后在app_button_press_cb添加打印。但是我是在arch_main.c里屏蔽掉
/ / arch_turn_peripherals_off (sleep_mode);
否则打印不出来.
”