硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3361|回复: 3
收起左侧

[μCOS-III] 创建软件定时器 OSTmrCreate 时间不准 ??

[复制链接]

610

主题

3062

回帖

4912

积分

至尊会员

积分
4912
发表于 2016-6-20 09:44:24 | 显示全部楼层 |阅读模式
uC/OS-III 版本使用  v3.05.01
不知道在哪个地方可以设置软件定时器的时钟节拍 ??


//创建定时器
  OSTmrCreate ((OS_TMR              *)&TmrTouch,        
               (CPU_CHAR            *)"TmrTouch",         
               (OS_TICK              )0,                  
               (OS_TICK              )10,                   //周期重载值, 10ms,我需要一个10ms的定时时间,貌似这个时钟节拍为 100ms,但是使用    OSTimeDlyHMSM 这个时间又是准的,不知道是神马情况啊 ??
                                                                       // 此处的值为1就是99ms,如果为10就是999ms,如果为100就是9999ms
               (OS_OPT               )OS_OPT_TMR_PERIODIC,
               (OS_TMR_CALLBACK_PTR  )TouchTmrCallback,   
               (void                *)"Tmr Touch",                 
               (OS_ERR              *)&err);


系统 ucos systick设置

#define  OS_CFG_TICK_RATE_HZ                        200u   // 此处改成100或者 1000 ,结果软件定时器也还是一样的,使用 OSTimeDlyHMSM  这个始终都是准确的

OS_RATE_HZ     const  OSCfg_TickRate_Hz          =  OS_CFG_TICK_RATE_HZ;


void  BSP_OSTickInit (void)
{
    CPU_INT32U  cpu_clk_freq;
    CPU_INT32U  cnts;

    cpu_clk_freq = HAL_RCC_GetSysClockFreq(); //BSP_ClkFreqGet(BSP_CLK_ID_HCLK);             /* Determine SysTick reference freq.                    */

#if (OS_VERSION >= 30000u)
    cnts = (cpu_clk_freq / (CPU_INT32U)OSCfg_TickRate_Hz);      /* Determine nbr SysTick increments                     */
#else
   cnts = (cpu_clk_freq / (CPU_INT32U)OS_TICKS_PER_SEC);       /* Determine nbr SysTick increments.                    */
#endif     
   
    OS_CPU_SysTickInit(cnts);                           /* Init uC/OS periodic time src (SysTick).              */
}

void  OS_CPU_SysTickInit (CPU_INT32U  cpu_freq)
{
    CPU_INT32U  prio;

    CPU_REG_NVIC_ST_RELOAD = cpu_freq - 1u;

                                                            /* Set SysTick handler prio.                              */
    prio                   = CPU_REG_NVIC_SHPRI3;
    prio                 &=  0x00FFFFFFu;
    prio                 |= (OS_CPU_CFG_SYSTICK_PRIO << 24u);

    CPU_REG_NVIC_SHPRI3    = prio;

                                                            /* Enable timer.                                          */
    CPU_REG_NVIC_ST_CTRL  |= CPU_REG_NVIC_ST_CTRL_CLKSOURCE |
                             CPU_REG_NVIC_ST_CTRL_ENABLE;
                                                            /* Enable timer interrupt.                                */
    CPU_REG_NVIC_ST_CTRL  |= CPU_REG_NVIC_ST_CTRL_TICKINT;  


}
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107034
QQ
发表于 2016-6-20 09:46:06 | 显示全部楼层
宏配置修改错了,不是修改
#define  OS_CFG_TICK_RATE_HZ                        200u   
这个的配置还是 1000u,
你要修改
#define  OS_CFG_TMR_TASK_RATE_HZ                      10u       /* Rate for timers (10 Hz Typ.)  

将其修改为1000
回复

使用道具 举报

610

主题

3062

回帖

4912

积分

至尊会员

积分
4912
 楼主| 发表于 2016-6-21 16:57:18 | 显示全部楼层

回 eric2013 的帖子

eric2013:宏配置修改错了,不是修改
#define  OS_CFG_TICK_RATE_HZ                        200u  
这个的配置还是 1000u,
你要修改
#de .. (2016-06-20 09:46) 
果然是这里,多谢多谢
回复

使用道具 举报

610

主题

3062

回帖

4912

积分

至尊会员

积分
4912
 楼主| 发表于 2016-6-21 16:57:26 | 显示全部楼层

回 eric2013 的帖子

eric2013:
宏配置修改错了,不是修改
#define  OS_CFG_TICK_RATE_HZ                        200u   
这个的配置还是 1000u,
你要修改
#define  OS_CFG_TMR_TASK_RATE_HZ                      10u       /* Rate for timers (10 Hz Typ.)  
.......
果然是这里,多谢多谢
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-15 08:11 , Processed in 0.151901 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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