你好
我触发一个中断来唤醒DA14580。
我想知道的是什么时候可以接收UART信息并发送它们。它是在回调函数的末尾还是在代码的后面?
提前谢谢。
关键词:
设备:
你好
我触发一个中断来唤醒DA14580。
我想知道的是什么时候可以接收UART信息并发送它们。它是在回调函数的末尾还是在代码的后面?
提前谢谢。
你好,阿沃艾,
在睡眠模式下,设备会关闭XTAL16,这对UART的时钟生成至关重要,因此醒来后,您必须等待XTAL16稳定下来。确保XTAL16已安装的最安全的地方是在app_on_ble_支持的回调中(因为内核也需要XTAL16才能运行),在完成该功能后,只要您不睡觉,设备将安装XTAL16并准备就绪,您将能够通过UART接收数据。
谢谢你的对话
你好
谢谢你的回答。
我实际上使用的是V.150.2版,我找不到任何应用程序支持的功能。你知道我使用的版本中是否有类似的版本吗。
提前谢谢
当做
你好,阿沃艾,
在所有SDK5版本中,即使在SDK5中,回调也被命名为app_on_ble_powered。0.2.1这是第一个SDK 5版本,我想您使用的是SDK3。在这种情况下,没有可以附加源代码的回调,可以放置代码的相关挂钩是app_asynch_trm()函数。但我强烈建议转到SDK 5。
谢谢你的对话
你好
好的,我明白了。
我试图做的是将BLE模块从延长睡眠模式唤醒,并向uC发送中断,以在UART就绪时发出警告。
有没有可能为我提供一个回调函数,可以正确唤醒BLE模块所有必要的函数?之后我会添加中断以符合我的要求。
当做
你好
差不多完成了,callbcack函数被正确调用,我在内部切换BLE_int以在uC上生成中断。
问题是,在整整3次醒来后,它毫无理由地不再切换BLE_int。
下面是我的回调函数的代码:
void ext_wakeup_cb(void)
{
如果(fsleep==ARCH_EXT_SLEEP_ON)
{
if(GetBits16(系统统计,PER下降))
{
if(开发调试){
GPIO_预订部();
}
}
设置32(GP_CONTROL_REG,BLE_WAKEUP_REQ,1);
fsleep=ARCH_SLEEP_OFF;
}
其他的
fsleep=ARCH_EXT_SLEEP_ON;
GPIO_设置激活(GPIO_端口0、GPIO_引脚7)//向uC发出警告UART的信号已准备就绪
wkupct_enable_irq(0x40,0x00,1,0);
wkupct_寄存器_回调(ext_wakeup_cb);
GPIO_设置不活动(GPIO_端口_0,GPIO_引脚_7)//向uC发出警告UART的信号已准备就绪
}
我的函数中一定有我看不到的错误。
提前谢谢
你好,阿沃艾,
我不确定这是否是您想要的,但为了强制唤醒BLE(没有计划挂起的事件,因此应用程序必须强制唤醒BLE),您必须调用arch_BLE_force_wakeup();完成此操作后,设备应启动Core的唤醒过程,一旦Core唤醒,app_asynch_trm()将被执行。
关于你在后面的帖子中提到的问题,我想你没有看到GPIO像你预期的那样切换,我没有看到回调函数中的任何地方调用periph_init()函数来初始化你的管脚,因此,当设备切换pin时,设备和外围设备可能处于唤醒状态。还有一些注释,没有必要调用GPIO_reservations(),该函数在系统初始化期间只调用一次,没有必要再次调用它。如果我没记错的话,你可以使用arch_ble_force_wakeup()函数,而不是通过直接在寄存器上写来启用ble内核。SDK 3上的app_ble_force_wakeup()也有同样的功能。请允许我再次指出,您请求唤醒BLE core并不意味着core会立即唤醒,正如我之前提到的,只要设备进入app_asynch_trm(),core就会立即唤醒。请查看SDK5中的ble_app_sleepmode示例。它可能与SDK稍有不同,但唤醒顺序在SDK之间非常相似。我坚持使用最新的SDK。
谢谢你的对话
你好
非常感谢你的帮助。
我将转到最新的SDK,并设法使一切工作与您的提示。
主题可以关闭。
当做
奥雷利昂