微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32--SYSTICK超简易定时器

STM32--SYSTICK超简易定时器

时间:12-03 来源:互联网 点击:
上次的 定时器搞得我比较晕,勉强调通了程序,就实用主义来说应该算是勉强合格了。

当然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;
}
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top