本帖最后由 iDea 于 2017-1-7 10:14 编辑
最近又搞了一下MCU上面的程序,主要改到了按键配置入网的地方,源码是采用开定时器2(TIM2)的方式循环扫描,看是不是有被按下。
但是在UC/OS上,我们就不用这么麻烦了,因为我们有定时任务,而且优先级也很高的。所以这次我就改用定时器任务来代替定时器。我们要怎么做呢?首先要创建一个定时器任务:
- /*定时器1*/
- OS_TMR tmr1;
- void tmr1_callback_led(void *p_tmr, void *p_arg);
复制代码- void tmr1_callback_led(void *p_tmr, void *p_arg)
- {
- IWDG_FREE();
- keyHandle((keysTypedef_t *)&keys);
- }
复制代码 我在这里连看门狗也一起喂了,最后我们再对定时器任务进行初始化和开始:
- /*初始化定时器1任务*/
- OSTmrCreate ((OS_TMR *)&tmr1,
- (CPU_CHAR *)"tmr1_led",
- (OS_TICK )0,//初始延迟0*10ms
- (OS_TICK )1,//定时周期1*10ms
- (OS_OPT )OS_OPT_TMR_PERIODIC,//周期模式
- (OS_TMR_CALLBACK_PTR )tmr1_callback_led,
- (void *)0,
- (OS_ERR *)&err);
- OSTmrStart(&tmr1,&err);//开启定时器1
复制代码 接下来,我们要把void keyParaInit(keysTypedef_t *keys)函数中初始化定时器的语句注释掉
最后修改一下消抖的时间,有需要的也可以修改一下长按计时的时间,我这里没有修改。因为运行起来的时间也是我想要的。这样就大功告成啦!
下次我看一下能不能把机智云的TIM3的基准时间也给用定时取代了。目测不行,一个时间片是10MS,TIM3每1ms自加一次,不知道改次成自加10行不行。试完了告诉大家。先更新这么多
|