OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4144|回复: 0

UCOSIII软件定时器无法正常启用

[复制链接]

4

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
166
金钱
166
注册时间
2017-8-9
在线时间
36 小时
发表于 2018-9-26 10:24:25 | 显示全部楼层 |阅读模式
1金钱
我用UCOSIII软件定时器来防止遥控器按键连按。
遥控器接收到信息后,就会开启软件定时器,
为此,我还用了LED灯来验证定时器是否打开。
结果发现定时器回调函数不能执行,
必须在启用定时器前先进行至少500Ms是系统延时才能正常执行回调函数。
请问大家有没有遇到类似的情况,望解答!


void remote_task(void *p_arg)
{
    OS_ERR err;
    p_arg = p_arg;
    while(1)
    {
        Remote_Scan();
        delay_ms(500);                 //必须在此处进行延时操作
//        TIM4->DIER|=1<<4;       //允许捕获中断
//        TIM4->DIER|=1<<0;       //允许更新中断        
        OSTmrStart(&tmr1,&err);    //开启定时器1
        OSTimeDlyHMSM(0,0,0,500,OS_OPT_TIME_HMSM_STRICT,&err); //延时500ms
    }
}
void tmr1_callback(void *p_tmr, void *p_arg)      //回调函数
{
    LED0=~LED0;
    LED1=0;
    TIM4->DIER|=1<<4;       //允许捕获中断
    TIM4->DIER|=1<<0;       //允许更新中断
}
延时后定时器能执行,说明初始化啥的都没写错,就是不知道问题出现在哪里。


这是初始化构建任务:

OSTmrCreate((OS_TMR        *)&tmr1,        
                (CPU_CHAR    *)"tmr1",        
                (OS_TICK     )40,            //延时  
                (OS_TICK     )0,                       
                (OS_OPT         )OS_OPT_TMR_ONE_SHOT,     //单次定时器
                (OS_TMR_CALLBACK_PTR)tmr1_callback,    //定时器1回调函数
                (void        *)0,            
                (OS_ERR        *)&err);                        


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-2 08:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表