×
单片机 > 单片机程序设计 > 详情

STM32--SYSTICK超简易定时器

发布时间:2020-05-28 发布时间:
|
上次的 定时器搞得我比较晕,勉强调通了程序,就实用主义来说应该算是勉强合格了。

当然CORTEX-M3独有的定时功能可是超级简单的 那就是SySTick,所谓的系统定时器.配置方式简单
简单的不能再简单,因为STM32 的库函数已经帮我们搞好了,只需要调用一个函数,就可以配
置系统时钟的频率和开启系统时钟的中断.呵呵....不过这么好用的定时器只有一个。

 

//SYSTICK 分频--1ms的系统时钟中断
if (SysTick_Config(SystemFrequency / 1000))
{
/* Capture error */
while (1);
}
就是这么简单,系统就会产生一个1MS 的系统时钟中断(如果除数是500,那么当然地就是
2MS的中断了).中断函数是:
void SysTick_Handler(void);


这个函数将以每1MS 就会运行一次,而且进入中断后不需要清除任何标志位,特省时间.而且
还有点要说明的,SysTick是24 位倒计时的.设置的定时值最大就是2 的24 次方个系统时钟
---已经很大了.

 

 

直接 SysTick_Config(SystemFrequency / 1000); 也行。

/***********************************************

const uint32_t SystemFrequency         = SYSCLK_FREQ_72MHz;

#define SYSCLK_FREQ_72MHz  72000000

************************************************/

 

/*******************************************************************************
* Function Name  : SysTickHandler
* Description    :系统时钟,一般调教到1MS中断一次
*******************************************************************************/

void SysTick_Handler(void)
{
 if(Timer1)
  Timer1--;
}

 

/********************************************
**函数名:SysTickDelay
**功能:使用系统时钟的硬延迟
**注意事项:一般地,不要在中断中调用本函数,否则会存在重入问题.另外如果屏蔽了全局中断,则不要使用此函数
********************************************/
volatile u16 Timer1;
void SysTickDelay(u16 dly_ms)
{
 Timer1=dly_ms;
 while(Timer1);
}

 

/**********************************************************************************

3.0的库相对2.0来说貌似删减了部分内容


/**
  * @brief  Configures the SysTick clock source.
  * @param SysTick_CLKSource: specifies the SysTick clock source.
  *   This parameter can be one of the following values:
  * @arg SysTick_CLKSource_HCLK_Div8: AHB clock divided by 8
  *   selected as SysTick clock source.
  * @arg SysTick_CLKSource_HCLK: AHB clock selected as
  *   SysTick clock source.
  * @retval : None
  */
void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)
{
  /* Check the parameters */
  assert_param(IS_SYSTICK_CLK_SOURCE(SysTick_CLKSource));
  if (SysTick_CLKSource == SysTick_CLKSource_HCLK)
  {
    SysTick->CTRL |= SysTick_CLKSource_HCLK;
  }
  else
  {
    SysTick->CTRL &= SysTick_CLKSource_HCLK_Div8;
  }
}

关键字:STM32  SysTick  定时器 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
AVR熔丝位操作时的要点和需要注意的相关事项