嗨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。
问候,
马克
嗨马克,
很高兴你能够启动/停止广告,并将设备设置为睡眠模式。如果你发现答案有用,请为其他论坛用户标记为“接受”。
在每次唤醒时执行peripher_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读取函数()上卡住了。
为了从睡眠中中断对话芯片,我使用了外部处理器的gpio引脚。中断后,外部处理器在7ms后通过UART发送1个字节。我在示波器上证实了这一点。芯片使用回调函数从睡眠中正常唤醒,但在uart读取时卡住。是UART还是其他什么问题?
注意:要确认外部处理器是否已正确发送数据,我尝试了SDK中外设示例文件夹中的UART示例之一。它收到数据不变。只有当我从睡眠中醒来时使用UART时,问题才是问题。
问候,
马克
嗨马克,
很抱歉我回复晚了。您能分享uart读取功能吗?你启用了还是禁用了WDOG ?
谢谢,PM_DIALOG.
嗨PM_Dialog,
是的,我已经关闭了看门狗定时器。
问候,
马克
嗨马克,
你能启用WDOG吗?可能是固件卡住了…WDOG可用于检测由软件失控引起的意外执行序列,并可生成完全系统复位(WDOG复位)或不可屏蔽中断(NMI)。
谢谢,PM_DIALOG.