您的位置:首页 > 其它

STM32用SysTick来做定时器

2016-11-01 06:50 447 查看
1 硬件电路配置这里还是借用前面LED电路我就不贴图片。2 时钟说明SysTick和HCK的时钟频率是一样的库函数代码如下/*** @brief Initialize and start the SysTick counter and its interrupt.** @param ticks number of ticks between two interrupts* @return 1 = failed, 0 = successful** Initialise the system tick timer and its interrupt and start the* system tick timer / counter in free running mode to generate* periodical interrupts.*/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_CLKSOURCE_Msk |SysTick_CTRL_TICKINT_Msk |SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */return (0); /* Function successful */}
由库函数可知道没有进行分频动作所以时钟和主时钟一样
配置时钟中断的时间间隔
<pre name="code" class="cpp">void SysTick_Init(void)
{
/* SystemFrequency / 1000    1ms中断一次
* SystemFrequency / 100000	 10us中断一次
* SystemFrequency / 1000000 1us中断一次
*/
//	if (SysTick_Config(SystemFrequency / 100000))	// ST3.0.0库版本
if (SysTick_Config(SystemCoreClock / 1000))	// ST3.5.0库版本
{
/* Capture error */
while (1);
}
// 我需要不断的开启中断所以这句话屏蔽起来
//	SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;
}
用中断模式所以需要在中断文件中做定时标志。一下这个函数在中断文件中
<pre name="code" class="cpp">/**
* @brief  This function handles SysTick Handler.
* @param  None
* @retval : None
*/
void SysTick_Handler(void)
{
TimingDelay_Decrement();
}
中断函数在调用一个计数函数,计数函数应该放在外面一个公共文件中方便各个文件中数据传递。
/** 函数名 :TimingDelay_Decrement* 描述  获取节拍程序* 输入  无* 输出 无* 调用  在 SysTick 中断函数 SysTick_Handler()调用*/void TimingDelay_Decrement(void){if (TimingDelay != 0x00){TimingDelay--;}}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  stm32 key 硬件