你好,
我的工作与基本套件DA14580 BLE。
有两个LED连接在板上。我闪烁led使用定时器处理器和控制强度使用PWM。
在这之后,我修改了代码睡眠和唤醒按钮(GPIO中断)如下链接的论坛,我张贴。
https://support.dialog-semiconductor.com/forums/post/dialog-smartbond-bl..。
按照上面的逻辑开发后,睡眠和唤醒工作良好,但在修改了睡眠和唤醒代码后,我面临一些以下问题。
1.LED闪烁处理程序并不是完美的工作,以前的工作很好,闪烁一直在做随机不按照设置定时器处理程序使用“app_easy_timer”函数。
2.我用PWM控制强度,现在的PWM行为也是随机的。有时很亮,有时很低。
我已经调用“app_easy_timer”函数在唤醒时创建处理程序,并调用“app_easy_timer_cancel”函数在睡眠时取消处理程序。
请告知我如何解决以上问题。
谢谢
设备:
嗨JBaczuk,
当您提到您修改了睡眠的代码时,我想你的意思是您已经启用了睡眠模式。因为你已经启用了睡眠模式,要知道设备将关闭所有的外设,定时器,uarts, spi等,以便进入睡眠,没有任何检查,将保持设备清醒,如果你设置了一个定时器或切换LED等。但是请注意,当设备进入睡眠模式时,580将锁存设备的gpio,这意味着它将保持引脚的状态到它进入睡眠之前的状态。所以你所看到的是,在每个唤醒(为了宣传或保持连接)所有的外设初始化并开始操作,一旦你进入睡眠,PWM关闭和LED保持在睡眠前的状态。所以为了使PWM正常工作你必须让设备保持清醒,和有关领导你要销的状态保存在一个自定义变量来初始化状态,当设备醒来(580年将保持睡眠的状态,但只要你醒来periph_init函数将在重新启动和运行别针在原来的状态,所以你必须保持pin的状态在一个变量中,并在醒来时应用这个值在外围的init函数)。
由于MT_dialog
MT_dialog,
谢谢你的回复。对不起,我会澄清我的问题。当我第一次开机时,它立即进入深度睡眠状态:
arch_set_deep_sleep ();
arch_ble_ext_wakeup_on ();
app_button_enable ();
没有led,定时器,或pwm已经使用。
然后,当按钮被按下时,我们使用ble_app_sleepmode示例中的代码唤醒设备:
静态孔隙app_button_enable(空白)
{
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_polarization (GPIO_BUTTON_PORT, GPIO_BUTTON_PIN, wkupct_pin_polarization _low), //极性低
1, // 1事件
40);//调试时间= 0
}
静态孔隙app_wakeup_cb(空白)
{
if (ke_state_get(TASK_APP) == APP_CONNECTABLE)
{
user_app_adv_start ();
led_mode模式= POWER_ON;
led_pattern(模式);
}
}
但是,似乎有什么东西干扰了led。我们有两个led,分别使用timer2和pwm2(一个led)和pwm3(另一个led),当它们循环(大约每秒开或关一次)时,有东西在关闭它们(大约每秒3次)。
我想知道睡眠模式是否会影响到计时器。它们只有在设备唤醒时才初始化,所以我不认为深度睡眠会导致它忘记PWM或计时器(它们在设备唤醒前不会启动)。
嗨JBaczuk,
如上所述,当设备处于睡眠模式(醒来和入睡,只为服务BLE事件)时,580将关闭所有外围设备。因此,为了使PWM和定时器工作而不被唤醒和睡眠过程中断,你将不得不在计时器运行时禁用睡眠(你可以通过使用arch_disable_sleep()在运行时做到这一点)。这将保持设备清醒和定时器工作在PWM模式以及。在你完成之后,你可以通过arch_set_deep_sleep()或arch_set_extended_sleep()重新启用睡眠模式。
由于MT_dialog