前次的 守时器搞得我比较晕,勉着重通了程序,就实用主义来说应该算是牵强合格了。
当然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 on
* @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;
}
}