nrf51822代码流程(从main展开)

一、main函数的流程

以SDK中examples\ble_peripheral\ble_app_uart\为例:

int main(void)
{
    uint32_t err_code;
    bool erase_bonds;
    uint8_t  start_string[] = START_STRING;
    
    // Initialize.
    APP_TIMER_INIT(APP_TIMER_PRESCALER, APP_TIMER_OP_QUEUE_SIZE, false);//初始化软件定时器模块,用定时器队列实现。内部用到的是RTC1。最后False:不使用调度,调度模块没有细看。貌似 51822 关于调度的都是传 False 不使用调度。51822 的协议栈实现是基于异步事件驱动的。
    uart_init();//主要设置 uart 的引脚,波特率。接收,发送中断等。并开启 uart 模块中断。官方的流控貌似都是开着的,我们用的时候要记得关掉。
    buttons_leds_init(&erase_bonds);//初始化 LED 指示灯,用来指示广播和连接状态。初始化按键。
    ble_stack_init();//协议栈初试化,设置时钟,demo 里面设置为外部时钟。并且注册事件派发函数
    gap_params_init(); //GAP必要额一些参数的设置,设置设备名(手机扫描时会显示),设置 PPCP(外围设备首选链接参数)。(手机连上某个蓝牙设备后可以从 Generic Access Service 中看到设置的这些参数)(只有主机可以设置参数,但这里是从机设备推荐使用的参数。)
    services_init(); //服务初始化(服务的创建和特征值添加)。不同的服务内容不同,这个demo中是:添加 uart 的串口服务。主要提供两个特征值来供手机和板子以及电脑的通信
    advertising_init();//设置广播数据以及扫描响应数据
    conn_params_init(); //链接参数设置。主要设置什么时候发起更新链接参数请求以及间隔和最大尝试次数。
    printf("%s",start_string);
    err_code = ble_advertising_start(BLE_ADV_MODE_FAST);//设置广播类型,白名单,间隔,超时等特性。并开始广播。
    APP_ERROR_CHECK(err_code);

    for (;;)
    {
    //电源管理,调用 arm0 的指令__WFE();进入睡眠
    power_manage();//不用深究。其中调用的指令有_WFE这种看不懂的,要看arm0/3内核中睡眠那一部分的介绍。
     } 
    }


补充:按键中貌似有一个这样的按键:设置作为产生 DETECT signal信号, 用来唤醒 system off 模式,51822的一种低功耗睡眠模式,具体参看数据手册 power 章节,从这个模式唤醒会执行一个reset的操作。(通过 PIN_CNF 寄存器来设置一个 IO 口来作为来作为 sensing mechanism 机制的引脚。这里是设置了 WAKEUP_BUTTON_PIN 这个引脚来作为这个功能,设置成低电平时触发这个机制。)??????

1、定时器初始化

        初始化软件定时器模块,该定时器模块并不是使用timer0-2 来实现定时功能。而是使用 51822
中的 RTC1 来软件模拟出定时器模块。 RTC1 使用 32.768K 时钟经过分频后是时钟来作为时钟
源。所以该函数内部实现就是设置 RTC1 相关的寄存器和做一些初始化。其原理和 timer
/ 计数器模块类似。
         APP_TIMER_PRESCALER:设置分频系数。( 32.768K 来分频 )
        APP_TIMER_OP_QUEUE_SIZE:定时器操作队列,因为是用 RTC 模拟的软件定时器,因此内部是维护了一个软件定时器的操作队列
(有些版本还会有一个参数APP_TIMER_MAX_TIMERS :设置可以创建的最大定时器个数 )
        False:不使用调度,调度模块没有细看。貌似 51822 关于调度的都是传 False 不使用调度。
518
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值