嗨pmdialog,
我正在骚扰'ble_app_noncon'在'杂项' 文件夹。广告数据填充在广告字符串中。我正在使用BLE Scanner应用程序来查看我的手机上的字符串。当我试图通过致电停止广告时'app_easy_gap_advertise_stop()'功能广告停止。我正在运行一个调试会话,程序停止assert_error(0);
案例GAPM_CANCEL:{if(param-> status!= gap_err_no_error){assert_error(0);//意外错误}如果(app_process_catch_rest_cb!= null){app_process_catch_rest_cb(msgs,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_add_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_ADVERTES_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。
问候,
标记
嗨马克,
很高兴您能够启动/停止广告并将设备放入睡眠模式。如果您发现答案有用,请将其标记为其他论坛用户的“接受”。
每个唤醒都执行periph_init()。BLE_WAKEUP_LP_HANDLLL是在系统唤醒时触发的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.