LED不停留在当DA14583进入睡眠模式

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
6个帖子/ 0新
最后一篇
idarshan
离线
最后一次露面:1年5个月前
加入:2017-05-24 49
LED不停留在当DA14583进入睡眠模式

我使用ble_all_in_one例子,并修改它为我的功能之一。我配置LED GPIO在set_pad_function(),并试图在该button_press_callback GPIO高。因此,使用情况是按下按钮时打开LED。现在LED在转弯,但它在几分之一秒变的。我不是在代码转动的LED,但好像DA14583去睡觉,由于该LED熄灭。如何使LED上停留,即使DA14583去睡觉了吗?以下是我从ble_all_in_one示例代码modfied代码:

//在user_periph_setup.c
空隙set_pad_functions(无效)//组GPIO端口功能模式
{
// ...其他现有的代码
GPIO_ConfigurePin(GPIO_RED_LED_PORT,GPIO_RED_LED_PIN,OUTPUT PID_GPIO,FALSE);
GPIO_ConfigurePin(GPIO_GREEN_LED_PORT,GPIO_GREEN_LED_PIN,OUTPUT PID_GPIO,FALSE);
GPIO_ConfigurePin(GPIO_BLUE_LED_PORT,GPIO_BLUE_LED_PIN,OUTPUT PID_GPIO,FALSE);
}

//在user_all_in_one.c
静态孔隙app_button_press_cb(空白)
{
如果(GetBits16 (SYS_STAT_REG PER_IS_DOWN))
{
periph_init();
}

如果(arch_ble_ext_wakeup_get())
{
arch_set_sleep_mode(app_default_sleep_mode);
arch_ble_force_wakeup ();
arch_ble_ext_wakeup_off();
app_easy_wakeup ();
}

GPIO_SetActive(GPIO_GREEN_LED_PORT,GPIO_GREEN_LED_PIN);//添加由我
}

请让我知道我在做什么错在这里?

感谢你的帮助。

设备:
PM_DIALOG.
离线
最后一次露面:3天20小时前
职员
加入:2018-02-08 11:03
嗨idarshan,

嗨idarshan,

能否请你试着描述多一点点,你要完成什么?如果我理解正确的,你想在LED开关而DA14580启动广告和基于计时器到期该设备应该进入睡眠模式并关闭导致?如果我误解的东西,请大家指正。如果你的意思是一个可能的解决方案将是如下:

  • 在user_periph_setup.c:GPIO_ConfigurePin(GPIO_LED_PORT,GPIO_LED_PIN,OUTPUT PID_GPIO,TRUE);
  • 加入GPIO_SetInactive(GPIO_LED_PORT,GPIO_LED_PIN);在adv_data_update_timer_cb

请尝试这个,如果你有任何问题,让我知道。

谢谢,PM_DIALOG.

idarshan
离线
最后一次露面:1年5个月前
加入:2017-05-24 49
我想打开LED

我想在我第一次按下按钮的时候打开LED,在我再次按下按钮的时候关闭LED。现在,按下按钮后,LED打开,但然后它自动关闭DA14583进入睡眠。我想让LED一直亮着,即使DA14583睡着了。我希望你们现在理解了问题陈述。如果您需要更详细的说明,请告诉我。

PM_DIALOG.
离线
最后一次露面:3天20小时前
职员
加入:2018-02-08 11:03
嗨idarshan,

嗨idarshan,

该设备保持引脚的状态,当它在睡眠模式下,所以当你在睡眠模式下的领导应该保持,但醒来时,该设备将运行periph_init()函数,当代码执行的那部分也将重新配置它们的默认状态引脚。因此,为了让LED一直亮着,你必须在唤醒时“记住”引脚的状态,而当peripher_init()函数执行时,你必须在它休眠时重新应用引脚的值。乐牛逼我告诉你一些澄清。在SDK的ble_app_all_in_one例如,该装置用于在预定的时间量,其为10秒(APP_ADV_DATA_UPDATE_TO)开始广告。当计时器到期时,设备停止广告将进入深度睡眠模式。这意味着,所有的外围设备已关闭,您可以从唤醒控制器精心醒来。根据你的描述,你想开启/时设备所宣传的领导?请注意,DA14583将转入休眠模式下的广告或连接间隔之间。代码段,你已经张贴到你的初始后,将打开LED器件从永久休眠模式唤醒。

谢谢,PM_DIALOG.

idarshan
离线
最后一次露面:1年5个月前
加入:2017-05-24 49
谢谢你的回复。一世

谢谢你的回复。我想你误解了我的用途。我不想在广告开始/停止时打开/关闭LED。我的用例与广告无关。我想在按下按钮的时候打开LED,保持LED亮着直到按下按钮。当用户松开按钮时,关闭LED。我希望这能澄清我的用例。

所以你在这个帖子上的最后一个回复并不能解决我的用例的问题。你能给出正确的解决办法吗?

PM_DIALOG.
离线
最后一次露面:3天20小时前
职员
加入:2018-02-08 11:03
嗨idarshan,

嗨idarshan,

在user_all_in_one.c文件,你应该做如下修改:

  1. 添加一个全局变量到保留RAM。如果LED是开启还是关闭这个标志会通知应用程序。

布尔led_flag__attribute __((部分( “retention_mem_area0”),zero_init));// @RETENTION MEMORY

  1. 添加下面的代码片段app_button_press_cb()

!led_flag = led_flag;

如果(led_flag ==真)

{

GPIO_SetActive(GPIO_LED_PORT,GPIO_LED_PIN);

}

否则,如果(led_flag ==假)

{

GPIO_SetInactive(GPIO_LED_PORT,GPIO_LED_PIN);

}

app_button_enable();

  1. 在user_app_adv_start()和user_app_init()调用app_button_enable()函数,以使该按钮。

在user_periph_setup.c文件:

  1. Extern bool led_flag;
  2. 在set_pad_functions()修改LED配置为:

GPIO_ConfigurePin(GPIO_LED_PORT, GPIO_LED_PIN, OUTPUT, PID_GPIO, led_flag);

设备开始做广告,然后在广告间隙进入睡眠状态。因此,每次设备醒来时,BLE_WAKEUP_LP_Handler都会被执行,如果检查这个处理程序,就会触发外围init()函数。因此,为了让LED一直亮着,你必须在唤醒时“记住”引脚的状态,而当peripher_init()函数执行时,你必须在它休眠时重新应用引脚的值。

谢谢,PM_DIALOG.