Waveshare
直播中

casuallystone

12年用户 64经验值
擅长:控制/MCU
私信 关注
[经验]

【NRF51822试用体验】Nordic-timer

简单介绍timer的使用方式:
例程目录:C:ProgramFiles(x86)KeilARMDeviceNordicnrf51822Boardpca10001s110ble_app_proximityarmble_app_proximity.uvproj
Nordic提供了个不错的timer机制:
源文件:app_timer.c 使用方式可参看app_timer.h
uint32_tapp_timer_create(app_timer_id_t *           p_timer_id,
                          app_timer_mode_t            mode,
                         app_timer_timeout_handler_t timeout_handler);
uint32_tapp_timer_start(app_timer_id_t timer_id, uint32_t timeout_ticks, void *p_context);
uint32_tapp_timer_stop(app_timer_id_t timer_id);
uint32_tapp_timer_stop_all(void);
简要介绍以上函数的使用方式~看名字就能知道它大概是什么意思了。
so,比如我们要创建个timer,每1s从串口中打印出数据。
1、create timer:
err_code =app_timer_create(&m_uart_output_timer_id,
                               APP_TIMER_MODE_REPEATED,
                               uart_output_timeout_handler);
第一个参数,实际只是个timer的id,是一个32位整型变量,
第二个参数,是定时器的模式,比如进入相应Handler一次或者重复的进入。
第三个参数,是定时器时间到的入口函数(handler),也就是时间到了,要在此处进行处理,比如打印数据。
对于static voiduart_output_timeout_handler(void * p_context)的定义是这样滴,有个参数void *p_context
该参数呢,比方说创建线程也会有个指针参数~,也就是说我们可以将某个数据的指针传进来。

2、start timer
err_code =app_timer_start(m_uart_output_timer_id,
                                  APP_TIMER_TICKS(1000, APP_TIMER_PRESCALER),
                                   (void*)data);
第一个参数,实际是timer的id,就是刚才我们create时候的id。
第二个参数当成计数值吧。
第三个参数则就是我们可以传数据进去,或者指针。
Nordic提供了个不错的宏定义(大家以后可以扣过去使用),APP_TIMER_TICKS(1000, APP_TIMER_PRESCALER) 这样得到的值就是1s的计数值了,具体细节大家可以仔细看进去。
3、在timer handler中进行数据打印。
static voiduart_output_timeout_handler(void * p_context)
{
    printf("1s pass rn");
}
以上,如果你的代码能成功执行,那么恭喜你,见鬼了,哈哈,理论上是不行的,现象是:debug的时候都不知道跑到哪里去了,找了半天,发现有个APP_TIMER_INIT(APP_TIMER_PRESCALER, APP_TIMER_MAX_TIMERS,APP_TIMER_OP_QUEUE_SIZE, false);
其中要修改两个参数:由原来的5和4改为6和5如下
#defineAPP_TIMER_MAX_TIMERS              6                  #defineAPP_TIMER_OP_QUEUE_SIZE           5
这样timer才能成功跑起来,至于为什么呢~~看文档啊看文档。

小乌龙,记得把整个Nordic的工程文件夹里面的文件属性设置为非只读的!!!不然工程关了再打开就不一样了。哎。。白花花的代码不见了。


回帖(1)

chenwei6991627

2016-6-29 15:19:43
哦,怎么就没看见串口的输出的图片呢
举报

更多回帖

发帖
×
20
完善资料,
赚取积分