如何使用LED显示当前状态(广告,连接)。
我想向用户展示我的设备的连接状态。
因此,我使用“使用Timer2”的“PWM2”,用于在广告模式下打开LED。
LED在0.1ms期间。
LED在0.9ms时关闭。
所以,
LED始终看起来“在州”。保存权力是我选择这种方法的原因。
我在这个函数上使用它的代码。
void user_app_adv_start(void)
{
//安排下一个广告数据更新
app_add_data_update_timer_used = app_easy_timer(app_add_data_update_to,avd_data_update_timer_cb);
struct gapm_start_advertise_cmd * cmd;
cmd = app_easy_gap_undirected_advertise_get_active();
//动态添加制造商特定数据
mnf_data_update();
app_add_ad_struct(cmd,&mnf_data,sizeof(struct mnf_specific_data_ad_structure));
app_easy_gap_undircated_advertise_start();
// 带领
timer2_timer_on();
}
并且我使用此代码以连接模式打开LED。
void user_app_connection(uint8_t connection_idx,struct gapc_connection_req_ind const * param)
{
......
LED_TIMER_USED = APP_EASY_TIMER(APP_LED_TIMER_DELAY,APP_LED_TIMER_CB_HANDLER);
}
我为LED Blinky创建了新功能,“app_led_timer_cb_handler()”
void app_led_timer_cb_handler()
{
静态UINT8_T LED_STATE = 0;
LED_STATE ++;
// timer2_timer_on();
交换机(LED_STATE)
{
案例1:// 1단계:LED
timer2_timer_on();
休息;
案例2:// 2단계:발광센서关闭
//带领
timer2_timer_off();
LED_STATE = 0;
休息;
}
//再次设置它,直到控制特性接收到停止命令
if(ke_state_get(task_app)== app_connected)
{
LED_TIMER_USED = APP_EASY_TIMER(APP_LED_TIMER_DELAY,APP_LED_TIMER_CB_HANDLER);
}
}
但是,问题是我无法良好地连接设备。
当我尝试连接在广告模式上工作的设备时,我必须平均尝试约5〜7次。
有时,我可以首先尝试连接它。
我认为PWM2信号对于LED的信号,发生了该设备未连接的连接问题。
当我不使用Timer2 - PWM2的LED时,它效果很好地没有问题。
如何使用LED显示设备的状态?
另一个设备如何使用LED来使用它?
其次,关键问题是“系统下”。
当系统关闭时,它显示在“错误”之后
/ **
****************************************************************************************
* @brief取消活动计时器。
* @param [in] timerid将计时器处理程序取消。
* @return没有。
****************************************************************************************
* /
void app_easy_timer_cancel(const timer_hnd timer_id)
{
如果app_easy_timer_hnd_is_valid(timer_id)
{
if((timer_callbacks [app_easy_timer_hnd_to_idx(timer_id)]!= null)&&
(timer_callbacks [app_easy_timer_hnd_to_idx(timer_id)]!= app_easy_timer_canceled_handler)))
{
ke_timer_clear(app_easy_timer_hnd_to_msg_id(timer_id),task_app);
timer_callbacks [app_easy_timer_hnd_to_idx(timer_id)] = app_easy_timer_canceled_handler;
struct cancel_timer_struct * req = ke_msg_alloc(app_cancel_timer,task_app,task_app,
cancel_timer_struct);
req-> timer_id = timer_id;
KE_MSG_SEND(REQ);
}
别的
assert_warning(0);
}
别的
assert_warning(0);<< ------------------------------------错误!
}
你好,
是app_easy_timer_cancel()调用您的项目?app_easy_timer()最多只能支持10个回调函数注册。将App_easy_Timer()和app_easy_timer_cancel()以对更好。或者,使用app_easy_timer_modify()用其关联的回调函数重用现有定时器ID。
嗨okmegi,
这取决于您使用的引脚以输出PWM脉冲,引脚1_2和1_3干扰16MHz晶体振荡器,导致BLE链路损耗。端口应仅用于静态或低速信号。所以请尝试另一个端口。大多数用户切换了广告或连接指示的LED,请注意,当设备将睡眠时,引脚状态被锁定,但唤醒引脚的状态将因Periph_init()函数而重新初始化,该函数将设置引脚他们的申请违法状态。
关于计时器和错误断言似乎您正在尝试取消已取消的定时器,传递无效的timer_id值。请检查app_easy_timer_hnd_is_valid定义,以及您将作为参数传递的timer_id。
谢谢mt_dialog.