这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 使用滴答定时器遇到的问题

共11条 1/2 1 2 跳转至

使用滴答定时器遇到的问题

高工
2013-08-26 15:07:47     打赏

在STM32上移植了操作系统之后需要给滴答定时器设定初值并启动它。我是这样做的:

RCC_ClocksTypeDef  RCC_ClocksStruct;

SysTick_CLKSourceConfig (SysTick_CLKSource_HCLK);   //配置为系统时钟

RCC_GetClocksFreq (&RCC_ClocksStruct);   //获取各个时钟频率

SysTick_Config(RCC_ClocksStruct.HCLK_Frequency / OS_TICKS_PER_SEC);  //设定初值并启动TICKS

系统时钟频率为72M。

我通过上面配置了滴答定时器后感觉是没什么问题,但是之后我发现延时完全不准。

比如我延时1S,结果是一瞬间就结束了。

大家猜猜问题出在哪里?

——回复可见内容——

 




关键词: STM32          SysTick    

高工
2013-08-26 21:17:36     打赏
2楼
什么情况呢?

高工
2013-08-26 21:18:38     打赏
3楼
我怎么看上面调用部分都没有问题啊!

院士
2013-08-26 21:21:37     打赏
4楼
要enable一下吧

高工
2013-08-26 21:23:16     打赏
5楼
问题出哪了呢

菜鸟
2013-08-26 21:24:05     打赏
6楼

看看



高工
2013-08-26 21:26:06     打赏
7楼
SysTick_Config()这个函数里已经使能了的。所以外面没加

高工
2013-08-26 21:28:27     打赏
8楼
问题在SysTick_Config()里面,刚出现这问题的时候也很郁闷。之后改为用寄存器一点点配置不调用固件库里的SysTick_Config就是正常的。这样才发现了这个问题。之后也没多想,今天拿出来分享一下

高工
2013-08-26 21:35:34     打赏
9楼

static __INLINE uint32_t SysTick_Config(uint32_t ticks)
{
  if (ticks > SysTick_LOAD_RELOAD_Msk)  return (1);            /* Reload value impossible */
                                                              
  SysTick->LOAD  = (ticks & SysTick_LOAD_RELOAD_Msk) - 1;      /* set reload register */
 // NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);  /* set Priority for Cortex-M0 System Interrupts */
  SysTick->VAL   = 0;                                          /* Load the SysTick Counter Value */
  SysTick->CTRL  = SysTick_CTRL_TICKINT_Msk   |
                   SysTick_CTRL_ENABLE_Msk;                    /* Enable SysTick IRQ and SysTick Timer */
  return (0);                                                  /* Function successful */
}

将这个函数修改了一下


高工
2013-08-27 00:00:07     打赏
10楼
定时器还是灰常重要滴,进来学习一下。

共11条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]