通过GPIO中断广播

⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.xmece.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
5个职位/ 0个新职位
最后发表
尼克长
离线
最后看到:8个月1天前
加入:2020-05-20内
通过GPIO中断广播

你好对话的东西,我正计划开发一个基于DA14531的计数器。
最后的效果是,当DA14531的P0_1引脚检测到上升沿时,一个变量COUNTER将加1,然后COUNTER的值将随后被公告三次。之后DA14531进入睡眠状态并侦听PIN P0_1上的下一个中断。我将在智能手机扫描APP上的制造商特定数据中看到COUNTER的值。
我认为结合Timer1_Software_Example和ble_app_barebone示例可以实现我的目标。然而,我尝试了,但失败了。

你能给我一个具体的流程吗?非常感谢。

设备:
尼克长
离线
最后看到:8个月1天前
加入:2020-05-20内
你好,

你好,

我找到了另一个例子来达到我的目的。这是Ble_Button_Wakeup示例。但是,我在user_wake .c中添加了一个全局变量COUNTER,在user_app_wakeup_press_cb()函数中添加了代码“COUNTER++;”。如何将COUNTER的值更新为“mnf_data”。在user_barebone.c中发布这个值?你能帮忙吗?谢谢。

PM_Dialog
离线
最后看到:6天12小时前
工作人员
加入:2018-02-08 11:03
嗨,尼克,

嗨,尼克,

谢谢你的在线问题。我认为最好的开始项目是SDK6的ble_app_sleepmode示例。

你可以在6.0.14.1114\projects\target_apps\ble_examples\ble_app_sleepmode SDK路径中找到它。

这个例子是使用唤醒控制器来唤醒设备。请检查app_button_enable()。为了检测高电平信号,极性应该从WKUPCT_PIN_POLARITY_LOW改变为WKUPCT_PIN_POLARITY_HIGH。

这个示例还演示了如何更新特定于制造商的数据。看到mnf_data_update()函数。

谢谢,PM_Dialog

尼克长
离线
最后看到:8个月1天前
加入:2020-05-20内
嗨PM_Dialog。谢谢你的

嗨PM_Dialog。谢谢你的回复。你是对的。我可以修改ble_app_sleepmode示例来实现我的目的。我发现了一个帖子https://support.dialog-semiconductor.com/forums/post/dialog-smartbond-bl..。给出程序。以下是你的对话内容所给出的步骤:

1)注释掉被user_app_adv_start()函数调用的app_easy_timer()。这个定时器执行adv_data_update_timer_cb()函数,该函数停止通过app_easy_gap_advertise_stop()函数发布每一个APP_ADV_DATA_UPDATE_TO秒。
2)关于广告字符串的更新,你应该停止广告,然后动态更新你的数据,然后重新开始广告。在app_wakeup_cb()函数中添加app_easy_gap_advertise_stop()来停止广告。
3)将app_button_enable添加到user_app_adv_start()中,以便通过按下按钮更新广告数据
4)然后在user_app_adv_undirect_complete()注释掉arch_ble_ext_wakeup_on()和app_button_enable()并添加user_app_adv_start()。user_app_adv_start()将在广告数据更新后启动广告。

app_button_enable()函数将按钮设置为唤醒触发器事件,并设置唤醒控制器。wkupct_register_callback()注册app_button_press_cb()函数,该函数将在唤醒控制器中被调用。同样,wkupct_enable_irq()选择按钮连接的GPIO,当唤醒中断发生时触发GPIO。

但仍有一些东西他没有阐明清楚。以下是根据我的理解,我的实现步骤。请检查一下是否正确?

1)comment out app_adv_data_update_timer_used = app_easy_timer(APP_ADV_DATA_UPDATE_TO, adv_data_update_timer_cb);在user_app_adv_start()函数中,并在user_app_adv_start()函数的第一行添加app_button_enable()函数。我不确定app_button_enable()函数的位置是否正确。

2)在app_button_press_cb()函数的最后两行添加app_easy_gap_advertise_stop()和mnf_data_update()函数。

3)根据我的需要在app_button_enable()函数定义中修改GPIO_BUTTON_PORT, GPIO_BUTTON_PIN, WKUPCT_PIN_POLARITY_LOW。

4)在user_app_adv_undirect_complete()函数中注释掉arch_ble_ext_wakeup_on()和app_button_enable()函数,随后添加user_app_adv_start()函数。

5)像这样更改mnf_data_update()计数。
静态孔隙mnf_data_update ()

mnf_data.proprietary_data [1] + +;

通过这五个步骤修改代码后,当我将我设置为按钮按脚的P0_1连接到GND时,我的扫描仪APP中显示的厂商数据会添加一个。然而,这并不是很稳定。有时DA14531会停止广告,我无法通过连接P0_1和GND来唤醒它。我只能按重置键重新计数。你能帮忙解决这个问题吗?谢谢!

问候,
尼克

PM_Dialog
离线
最后看到:6天12小时前
工作人员
加入:2018-02-08 11:03
嗨,尼克,

嗨,尼克,

谢谢你的回复。我建议您开始调试项目。因此,请在调试模式下运行,并检查固件是否正确运行。fw是否在运行,或者它冻结成一个断言,NME等?还需要添加一些断点,这样您就可以验证所有工作是否如预期的那样。

问:设备是从SPI Flash还是System-RAM启动的?对于System-RAM,行为是什么?

您可以在调试模式下运行它,按下“开始/停止调试会话”按钮,然后从Keil IDE?

谢谢,PM_Dialog