嗨PMDialog,
我正在努力'ble_app_noncon'例如'杂项”文件夹中。广告数据被填充到广告字符串中。我正在使用BLE扫描仪应用程序来查看我的手机上的字符串。当我试图通过拨打'app_easy_gap_advertise_stop ()功能,广告停止。我正在运行一个调试会话和程序停止在ASSERT_ERROR (0);
case GAPM_CANCEL: {if(param->status != GAP_ERR_NO_ERROR) {ASSERT_ERROR(0);//意外错误}if (app_process_catch_rest_cb != NULL) {app_process_catch_rest_cb(msgid, param, dest_id, src_id);}}打破;
我正在尝试停止广告并转到睡眠模式。请指导。
问候,
马克
设备:
嗨马克,
不确定您使用的是哪个SDK,但我们强烈推荐使用我们最新的SDK6版本6.0.12。此版本适用于DA14531和DA14585/586产品。雷电竞官网登录
请注意,如果您正在开始一个新的设计,我们强烈建议您开始使用DA14531和我们最新的SDK6.0.12,因为它有了更多的改进。我们有很多代码示例,改进的文档等等
https://www.dialog-seminile.com/produ雷电竞官网登录cts/connectivity/bluetooth-low ...
这个功能已经在SDK的ble_app_sleepmode示例中实现了。该应用程序增加了睡眠模式API的使用,利用了两个可用的睡眠模式-扩展睡眠模式(带或不带OTP副本)与OTP副本。
具体来说,设备默认启动无定向广告。在user_app_adv_start()中设置了一个“app easy”计时器。在预定义的时间(APP_ADV_DATA_UPDATE_TO)之后,计时器将过期,并触发adv_data_update_timer_cb()回调函数。这个函数调用app_easy_gap_advertise_stop(),因此系统停止发布,并执行user_app_adv_undirect_complete()。该功能使芯片进入睡眠模式。只有外部(GPIO)唤醒事件才能唤醒处理器
关于ble_app_nonconn, app_easy_gap_advertise_stop()发送一个GAPM_CANCEL_CMD消息到堆栈以停止不可连接的广告。然后,触发user_app_adv_nonconn_complete()回调函数。如果广告被取消(GAP_ERR_CANCELED),则更新广告数据并重新开始广告。在您的情况下,您应该根据应用程序的要求修改此功能——将设备设置为睡眠模式。
谢谢,PM_DIALOG.
嗨PM_Dialog,
谢谢您的答复。如您所说,我能够停止广告并将设备放入睡眠状态。我通过使用万用表测量电流消耗来确认这一点。我还添加了一个唤醒按钮中断,并且设备唤醒并开始传输数据。现在一切都很好。
我有另一项要求。当我获得一个按钮中断时,我必须在唤醒时启用UART。我在periph_init()中初始化了UART_INITIALIZE()函数。在按钮中断回调时,我正在调用Arch_resume_from_sleep()函数,这唤醒了设备,但设备粘贴在UART_RECEIVE(UART1,(UINT8_T *)缓冲区,4,UART_OP_BLOCKING)函数上。外部处理器通过UART发送数据,我在范围内确认了它。
我只想唤醒并从UART读取9个字节的数据,并将那些转移到广告字符串。我被困在设备唤醒的UART。
问候,
马克
嗨马克,
很高兴您能够启动/停止广告,并将设备置于睡眠模式。如果您发现答案有用,请将其标记为“接受”,供其他论坛用户使用。
每次唤醒都会执行外围init()。BLE_WAKEUP_LP_Handler是系统唤醒时触发的ISR。然后,CPU将从WFI恢复。请检查arch_main.c文件中的main()。在WFI之后,arch_resume_from_sleep()当处于睡眠模式时,包括UART在内的所有外设块将被关闭。我的建议是在app_wakeup_cb()函数中初始化UART。为了执行UART读取,请参考SDK6.0.12的UART示例并检查uart_register_rx_cb()。这个例子位于projects\target_apps\peripheral_examples\uart SDK路径下。您还可以使用uart_read_buffer()来指定字节数。
谢谢,PM_DIALOG.
嗨PM_Dialog,
我照你的建议做了。我在app_wakeup_cb()函数上初始化了uart,我在那里执行uart读取,但它在uart read function()上卡住了。
为了中断对话芯片休眠,我使用一个外部处理器的gpio引脚。中断后,外部处理器在7ms后通过UART发送1个字节。我用示波器证实了这一点。芯片使用回调函数从睡眠中正确唤醒,但它在uart读取时卡住。是UART的问题还是别的什么?
注意:要确认外部处理器是否已正确发送数据,我尝试了SDK中外设示例文件夹中的UART示例之一。它收到数据不变。只有当我从睡眠中醒来时使用UART时,问题才是问题。
问候,
马克
嗨马克,
抱歉我回复晚了。你能分享uart读取功能吗?你启用或禁用WDOG了吗?
谢谢,PM_DIALOG.
嗨PM_Dialog,
是的,我已经禁用了看门狗定时器。
问候,
马克
嗨马克,
你能启动WDOG吗?可能是固件卡住了…WDOG可用于检测由软件逃逸引起的意外执行序列,并可生成一个完整的系统复位(WDOG复位)或一个不可屏蔽中断(NMI)。
谢谢,PM_DIALOG.