这应是蓝牙的Blink了吧,我以前实现过USB鼠标,应该没差太多.(自我安慰的开头)
这不一样有VID PID嘛,跟USB一样一样的.
先从main函数看下来.
/**@brief Function for application main entry. */ int main(void) { bool erase_bonds; // Initialize. log_init(); timers_init(); buttons_leds_init(&erase_bonds); ble_stack_init(); scheduler_init(); gap_params_init(); gatt_init(); advertising_init(); services_init(); sensor_simulator_init(); conn_params_init(); peer_manager_init(); // Start execution. NRF_LOG_INFO("HID Mouse example started. "); timers_start(); advertising_start(erase_bonds); // Enter main loop. for (;;) { app_sched_execute(); if (NRF_LOG_PROCESS() == false) { power_manage(); } } }
第一步初始化LOG,LOG怎么用呢,要不用RTT要不用UART,我比较习惯用RTT调试.所以打开RTT.
然后一个LOG都见不到,啊!求助工具吧,原来还要使能.
我开到DEBUG等级,调好颜色,开始再试试.
坑的第二发,原来每个工程有自己的config文件.千万别打开错了.
当配置好是RTT调试时候,再来一次.终于走上DEBUG的正确路上了.
连接上就这样,DEBUG的信息也太少了吧.
然后第二个函数是定时器的初始化.定时器是什么玩意不难想象.里面函数特别多,为了节约时间,当然是从官网了解.
然后...翻车了.这个不是没参数吗,怎么会有参数呢.
原来是SDK太新,东西移动到config.h里面配置了.init不用参数了.然后定时器自己也有Log开来看看.
然而没有反应.定时器原来函数要的QUEUE_SIZE在这里.
其他没找到也不知道是不是弃用了.从名字可以知道是监控电池电量的.中断回调是battery_level_meas_timeout_handler,周期定时.定时周期是...
static void timers_init(void) { ret_code_t err_code; err_code = app_timer_init(); APP_ERROR_CHECK(err_code); // Create battery timer. err_code = app_timer_create(&m_battery_timer_id, APP_TIMER_MODE_REPEATED, battery_level_meas_timeout_handler); APP_ERROR_CHECK(err_code); }
的原来定时周期还要后面看到app_timer_start再定义,那就算了.
接下来的buttons_leds_init不用说废话,我也懒得进去了,但是下面的ble_stack_init应该是我研究的重点!然后继续下去,HardFault了,我擦.
然后发现无处可打断点,判断是优化等级太高了,调到不优化方便调试.改变了优化程度,就可以到这里.看到里面全是SoftDevice API.因为是sd开头的,不是我一本正经敢胡说八道,真有哦.
只要看着文档没有不懂得东西.但是刚开始还是很失败啊,学一下文档吧,返回基础.