你好,
我的工作与基本套件DA14580 BLE。
船上有两个LED。使用PWM使用定时器处理器和控制强度闪烁LED。
在此之后,根据我发布的论坛的链接,我已经修改了睡眠和唤醒的代码和从按钮(GPIO Inerrupt)。
https://support.dialog-semiconductor.com/forums/post/dialog-smartbond-bl..。
在开发逻辑之后,睡眠和唤醒正常工作,但在修改后的睡眠代码之后,我面临以下一些问题。
1. LED闪烁HANLDER不起作用的完美,先前工作正常,闪烁一直在使用“app_easy_timer”函数的定时器处理程序。
2.我使用PWM控制强度,现在PWM行为也随机。有时它非常明亮,有时候很低。
我已经调用“app_easy_timer”函数在唤醒时创建处理程序,并调用“app_easy_timer_cancel”函数在睡眠时取消处理程序。
请问我如何解决上述问题。
谢谢
设备:
嗨jbaczuk,
当您提到修改了睡眠代码时,我认为您的意思是您已启用睡眠模式。由于您启用了睡眠模式,请注意,设备将关闭所有外围设备,定时器,UART,SPI等,以便睡觉,如果您设置了计时器,则没有检查设备唤醒的任何检查或者意识到580将在进入睡眠模式时锁存设备的GPIO,这意味着它将将PIN的状态保留到睡眠前的状态。所以你所看到的是,在每次唤醒(为了宣传或保持连接),所有外围设备都被初始化并开始运营,一旦开始睡眠,PWM关闭,LED之前保持在他们的状态睡觉。因此,对于PWM来说,为了正常工作,您将必须保持设备唤醒,并且关于LED您必须将引脚的状态保持在自定义变量中,以便在设备唤醒时重新初始化到该状态(580将在睡眠时保持GPIO的状态,但在唤醒时,唤醒Periph_Init函数将运行,并将引脚重新升级在原始状态下,因此您必须将PIN状态保持在变量中并尾尾up在periph_init函数中应用此值)。
由于MT_dialog
mt_dialog,
谢谢回复。对不起,我会澄清我的问题。当我第一次接通设备时,它立即使用:
arch_set_deep_sleep ();
ARCH_BLE_EXT_WAKEUP_ON();
app_button_enable();
没有使用LED,定时器或PWM。
然后,当按下按钮时,我们使用BLE_APP_SLEEPMODE示例使用代码唤醒设备:
静态void app_button_enable(void)
{
app_easy_wakeup_set(app_wakeup_cb);
wkupct_register_callback(app_button_press_cb);
GPIO_ConfigurePin(GPIO_BUTTON_PORT, GPIO_BUTTON_PIN, INPUT_PULLUP, PID_GPIO, false);
wkupct_enable_irq(WKUPCT_PIN_SELECT(GPIO_BUTTON_PORT, GPIO_BUTTON_PIN), //选择pin (GPIO_BUTTON_PORT, GPIO_BUTTON_PIN)
wkupct_pin_polarity(gpio_button_port,gpio_button_pin,wkupct_pin_polarity_low),//极性低
1,// 1事件
40);// debouncing time = 0
}
静态void app_wakeup_cb(void)
{
if(ke_state_get(task_app)== app_connectable)
{
user_app_adv_start();
LED_MODE模式= POWER_ON;
LED_Pattern(模式);
}
}
但是,它看起来有些事情正在干扰LED。我们有2个LED,都使用Timer2和PWM2(适用于1个LED)和PWM3(适用于另一个),而它们是骑自行车(每秒左右打开和关闭),请关闭它们(每秒约3次)。
我想知道睡眠模式是否会影响到计时器。它们只有在设备唤醒时才初始化,所以我不认为深度睡眠会导致它忘记PWM或计时器(它们在设备唤醒前不会启动)。
嗨jbaczuk,
如上所述,当器件处于睡眠模式时(醒来并跌倒以睡眠以便仅服务于BLE事件),580将关闭其所有外围设备。因此,为了使PWM和计时器没有中断,在唤醒和睡眠过程中,您将不得不在计时器运行时禁用睡眠(您可以使用ARCH_DISABLE_SLEEP()在运行时执行此操作。这将保持设备唤醒以及在PWM模式下工作的定时器。完成后,您可以通过ARCH_SET_DEEP_SLEEP()或ARCH_SET_EXTEDDE_SLEEP()重新启用休眠模式。
由于MT_dialog