撸蓝牙5 – 先试试最简单的蓝牙鼠标

/ 0评 / 0

 
这应是蓝牙的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开头的,不是我一本正经敢胡说八道,真有哦.

只要看着文档没有不懂得东西.但是刚开始还是很失败啊,学一下文档吧,返回基础.
 

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注