OpenEdv-开源电子网

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

ucosIII 软件定时器用程序打不开

[复制链接]

8

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2012-6-3
在线时间
21 小时
发表于 2015-11-8 12:34:34 | 显示全部楼层 |阅读模式
5金钱

在移植了ucosIII后创建了两个定时器

//创建软定时器 1     

 OSTmrCreate((OS_TMR  *)&Timer1,  //定时器1
                (CPU_CHAR *)"Timer1",  //定时器名字
                (OS_TICK  )200,   //200*01=2000ms
                (OS_TICK  )200,          //100*10=1000ms
                (OS_OPT   )OS_OPT_TMR_PERIODIC, //周期模式
                (OS_TMR_CALLBACK_PTR)Timer1_Callback,//定时器1回调函数
                (void     *)0,   //参数为0
                (OS_ERR     *)&err);  //返回的错误码
        
  //创建软定时器 2    

 OSTmrCreate((OS_TMR  *)&Timer2,  //定时器1
                (CPU_CHAR *)"Timer2",  //定时器名字
                (OS_TICK  )20,   //200*01=2000ms
                (OS_TICK  )20,          //100*10=1000ms
                (OS_OPT   )OS_OPT_TMR_PERIODIC, //周期模式
                (OS_TMR_CALLBACK_PTR)Timer2_Callback,//定时器1回调函数
                (void     *)0,   //参数为0
                (OS_ERR     *)&err);  //返回的错误码
 OSTmrStart(&Timer2,&err);       


定时器2创建完成后直接启动,没有问题,可以进入回调函数。

定时器1通过按键启动也没问题,可以进入回调函数。

if(keys==0)
  OSTmrStart(&Timer1,&err); 

但是我想通过上位机发送命令来启动定时器,死活不行。


 if((AutoSendFlag==1 )&&(Timer1_Sta==0))
  {
   OSTmrStart(&Timer1,&err); 
   SYS_STA |=0x0004;
//   printf("Autosend: %d\r\n",AutoSendFlag);
//   printf("Timer1_Sta: %d\r\n",Timer1_Sta);
  }
  
  if((AutoSendFlag==0) && (Timer1_Sta==1))
  {
   OSTmrStop(&Timer1,OS_OPT_TMR_NONE,0,&err);
    Timer1_Sta=0;
  }

AutoSendFlag  通过上位机修改它的值,通过串口打印和仿真,都能实现修改,但是就是启动不了软定时器!

还请高手们指点

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-11-8 22:39:24 | 显示全部楼层
回复

使用道具 举报

8

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2012-6-3
在线时间
21 小时
 楼主| 发表于 2015-11-8 22:49:55 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
谢谢专家帮忙给顶!

不知道是为什么!

我在执行完启动定时器后面加了个2s的延时就可以用了!

if((AutoSendFlag==1 )&&(Timer1_Sta==0))
{
OSTmrStart(&Timer1,&err);
SYS_STA |=0x0004;


OSTimeDlyHMSM(0,0,2,0,OS_OPT_TIME_HMSM_STRICT,&err);//延时2s

                         
// printf("Autosend: %d\r\n",AutoSendFlag);
// printf("Timer1_Sta: %d\r\n",Timer1_Sta);
}

if((AutoSendFlag==0) && (Timer1_Sta==1))
{
OSTmrStop(&Timer1,OS_OPT_TMR_NONE,0,&err);
  Timer1_Sta=0;
                      SYS_STA&=0xFFFB;


OSTimeDlyHMSM(0,0,2,0,OS_OPT_TIME_HMSM_STRICT,&err);//延时2s
}
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-20 01:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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