你好对话的东西,我正计划开发一个基于DA14531的计数器。
最后的效果是,当DA14531的P0_1引脚检测到上升沿时,一个变量COUNTER将加1,然后COUNTER的值将随后被公告三次。之后DA14531进入睡眠状态并侦听PIN P0_1上的下一个中断。我将在智能手机扫描APP上的制造商特定数据中看到COUNTER的值。
我认为结合Timer1_Software_Example和ble_app_barebone示例可以实现我的目标。然而,我尝试了,但失败了。
你能给我一个具体的流程吗?非常感谢。
设备:
你好,
我找到了另一个例子来达到我的目的。这是Ble_Button_Wakeup示例。但是,我在user_wake .c中添加了一个全局变量COUNTER,在user_app_wakeup_press_cb()函数中添加了代码“COUNTER++;”。如何将COUNTER的值更新为“mnf_data”。在user_barebone.c中发布这个值?你能帮忙吗?谢谢。
嗨,尼克,
谢谢你的在线问题。我认为最好的开始项目是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
嗨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来唤醒它。我只能按重置键重新计数。你能帮忙解决这个问题吗?谢谢!
问候,
尼克
嗨,尼克,
谢谢你的回复。我建议您开始调试项目。因此,请在调试模式下运行,并检查固件是否正确运行。fw是否在运行,或者它冻结成一个断言,NME等?还需要添加一些断点,这样您就可以验证所有工作是否如预期的那样。
问:设备是从SPI Flash还是System-RAM启动的?对于System-RAM,行为是什么?
您可以在调试模式下运行它,按下“开始/停止调试会话”按钮,然后从Keil IDE?
谢谢,PM_Dialog