我使用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);//添加由我
}
请让我知道我在做什么错在这里?
感谢你的帮助。

嗨idarshan,
能否请你试着描述多一点点,你要完成什么?如果我理解正确的,你想在LED开关而DA14580启动广告和基于计时器到期该设备应该进入睡眠模式并关闭导致?如果我误解的东西,请大家指正。如果你的意思是一个可能的解决方案将是如下:
请尝试这个,如果你有任何问题,让我知道。
谢谢,PM_DIALOG.
我想在我第一次按下按钮的时候打开LED,在我再次按下按钮的时候关闭LED。现在,按下按钮后,LED打开,但然后它自动关闭DA14583进入睡眠。我想让LED一直亮着,即使DA14583睡着了。我希望你们现在理解了问题陈述。如果您需要更详细的说明,请告诉我。
嗨idarshan,
该设备保持引脚的状态,当它在睡眠模式下,所以当你在睡眠模式下的领导应该保持,但醒来时,该设备将运行periph_init()函数,当代码执行的那部分也将重新配置它们的默认状态引脚。因此,为了让LED一直亮着,你必须在唤醒时“记住”引脚的状态,而当peripher_init()函数执行时,你必须在它休眠时重新应用引脚的值。乐牛逼我告诉你一些澄清。在SDK的ble_app_all_in_one例如,该装置用于在预定的时间量,其为10秒(APP_ADV_DATA_UPDATE_TO)开始广告。当计时器到期时,设备停止广告将进入深度睡眠模式。这意味着,所有的外围设备已关闭,您可以从唤醒控制器精心醒来。根据你的描述,你想开启/时设备所宣传的领导?请注意,DA14583将转入休眠模式下的广告或连接间隔之间。代码段,你已经张贴到你的初始后,将打开LED器件从永久休眠模式唤醒。
谢谢,PM_DIALOG.
谢谢你的回复。我想你误解了我的用途。我不想在广告开始/停止时打开/关闭LED。我的用例与广告无关。我想在按下按钮的时候打开LED,保持LED亮着直到按下按钮。当用户松开按钮时,关闭LED。我希望这能澄清我的用例。
所以你在这个帖子上的最后一个回复并不能解决我的用例的问题。你能给出正确的解决办法吗?
嗨idarshan,
在user_all_in_one.c文件,你应该做如下修改:
布尔led_flag__attribute __((部分( “retention_mem_area0”),zero_init));// @RETENTION MEMORY
!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();
在user_periph_setup.c文件:
GPIO_ConfigurePin(GPIO_LED_PORT, GPIO_LED_PIN, OUTPUT, PID_GPIO, led_flag);
设备开始做广告,然后在广告间隙进入睡眠状态。因此,每次设备醒来时,BLE_WAKEUP_LP_Handler都会被执行,如果检查这个处理程序,就会触发外围init()函数。因此,为了让LED一直亮着,你必须在唤醒时“记住”引脚的状态,而当peripher_init()函数执行时,你必须在它休眠时重新应用引脚的值。
谢谢,PM_DIALOG.