zoukankan      html  css  js  c++  java
  • Examples

    Nordic 52840 SDK学习之定时器

    今天开始学习52840SDK,特在此处记录学习内容,防止以后忘记,或许可以给以后的初学者提供一些帮助。如有错误,请发邮件至843036544@qq.com,我看到会及时改正。

    当前只是初学该sdk,内容可能比较简单,不喜勿喷。

    简介:定时器部分,主要是写了一些测试代码(在源sdk中添加了一些测试接口),用来学习定时器的使用。

    步骤:

    1)包含头文件app_timer.h

    2)定义Timer id和interval

    其中id用来区分不同功能的定时器,interval表示定时器的间隔(即每隔多长时间进入定时器中断函数)

     

    3)Timer初始化(该初始化在原始sdk中已经调用)

    4)创建一个定时器Timer

    ret_code_t app_timer_create(app_timer_id_t const *      p_timer_id,
                                app_timer_mode_t            mode,
                                app_timer_timeout_handler_t timeout_handler);

    p_timer_id: 定时器id

    mode:APP_TIMER_MODE_SINGLE_SHOT(只进入一次);APP_TIMER_MODE_REPEATED(重复进入)

    timeout_handler:定时器中断处理函数

    5)启动定时器

    ret_code_t app_timer_start(app_timer_id_t timer_id, uint32_t timeout_ticks, void * p_context)

    timeout_ticks: 定时器启动后多长时间进入定时器处理函数

    p_context: 如果有参数需要传入定时器处理函数,可通过该参数传入

    6)停止定时器

    ret_code_t app_timer_stop(app_timer_id_t timer_id);

    7)定时器其他函数

    ret_code_t app_timer_stop_all(void);

    uint32_t app_timer_cnt_get(void);

    void app_timer_pause(void);

    void app_timer_resume(void);

    uint8_t app_timer_op_queue_utilization_get(void);

    uint32_t app_timer_cnt_diff_compute(uint32_t   ticks_to, uint32_t   ticks_from);

    其中,我只测试了pause函数,该函数会将所有timer都暂停。 具官方文档介绍,该函数用于debug。

    This function can be used for debugging purposes to ensure that application is halted when entering a breakpoint.

    其他函数后续使用的时候在继续添加使用方法。

    下面是我的测试代码:

    #include "app_timer.h"
    
    APP_TIMER_DEF( ipl_app_timer_id );
    #define IPL_TIME_INTERVAL APP_TIMER_TICKS( 1000 )  //每隔1000ms进入一次
    
    APP_TIMER_DEF( ipl_app_timer_id2 );
    #define IPL_TIME_INTERVAL_2 APP_TIMER_TICKS( 500 ) //每隔500ms进入一次
    
    
    void ipl_app_timerout_handle( void *p_context )
    {
        static int count = 0;
        count ++;
        
        NRF_LOG_INFO( "ipl app timer count=%d
    ",count );
        
        if( count==5 )
        {
            //app_timer_pause(); //此次调用该函数,会导致timer1和timer2都停止        
            app_timer_stop( ipl_app_timer_id );
        }
    }
    
    
    void ipl_app_timerout_handle2( void *p_context )
    {
        static int num = 0;
        num ++;
        
        NRF_LOG_INFO( "ipl app timer2 num=%d
    ",num );
        
        if( num==30 )
        {
            app_timer_start( ipl_app_timer_id, IPL_TIME_INTERVAL, NULL );
        }
    }
    
    
    
    /**@brief Function for ipl timer test init.
     */
    ret_code_t ipl_app_timers_init( void )
    {    
        ret_code_t err_code;
        
    
        err_code = app_timer_create( &ipl_app_timer_id, APP_TIMER_MODE_REPEATED, ipl_app_timerout_handle );
        if( err_code != NRF_SUCCESS )
        {
            NRF_LOG_INFO( "Create timer error
    " );    
            return NRF_ERROR_NULL;
        }
        
        
        app_timer_start( ipl_app_timer_id, IPL_TIME_INTERVAL, NULL );
        return NRF_SUCCESS;
    }
    
    
    ret_code_t ipl_app_timers2_init( void )
    {
        ret_code_t err_code;
        
    
        err_code = app_timer_create( &ipl_app_timer_id2, APP_TIMER_MODE_REPEATED, ipl_app_timerout_handle2 );
        if( err_code != NRF_SUCCESS )
        {
            NRF_LOG_INFO( "Create timer error
    " );    
            return NRF_ERROR_NULL;
        }
        
        app_timer_start( ipl_app_timer_id2, IPL_TIME_INTERVAL_2, NULL );
        return NRF_SUCCESS;
    }
    
    
    int main( void )
    {
        timers_init();  //初始化定时器
        ipl_app_timers_init();
        ipl_app_timers2_init();
       
        ......
        
    }
  • 相关阅读:
    58同城2018提前批前端笔试题总结
    两栏式布局和三栏式布局
    Less学习总结
    网易2018提前批前端笔试编程题
    编写一个函数isMerge,判断一个字符串str是否可以由其他两个字符串part1和part2“组合”而成
    【转】 解释下浏览器是如何判断元素是否匹配某个 CSS 选择器?
    JS数组精简的十三个技巧
    Docker常用命令(命令大全)
    ES6之新的数据结构
    JavaScript高级程序设计(第3版)每章小结(1-5)
  • 原文地址:https://www.cnblogs.com/hjj801006/p/12486729.html
Copyright © 2011-2022 走看看