STM32F407野火霸天虎系列笔记(五)SysTick—系统定时器

一、前言

         我在学习的过程中,经历过毫无头绪,找到一堆学习资料却不知从何开始的痛苦。我希望我整理的笔记,不光可以方便自己在以后的项目中拿来即用,也希望能够对那些喜欢玩硬件、爱折腾的小伙伴有所帮助。如果你们觉得我的文章对你们有用,欢迎大家点赞+收藏,让我知道,我的工作是有价值的。

        这篇笔记,综合参考了野火、正点原子、st官方以及网络上的一些资料,然后经过我自己的思考、尝试与实践,从而整理出来的。感谢那些愿意在学习的路上分享自己知识与经验的前辈。

二、学习笔记

(一)、编程思路和代码

1.初始化定时器

SysTick_Config()//计算两次中断时间间隔,配置系统中断多少秒中断一次

SystemCoreClock//中断多久

/**
  * @brief 启动系统滴答定时器 SysTick
  * @param  无
  * @retval 无
  */
void SysTick_Init(void)
{
	/* SystemFrequency / 1000    1ms中断一次
	 * SystemFrequency / 100000	 10us
	 * SystemFrequency / 1000000 1us
	 */
	if (SysTick_Config(SystemCoreClock / 100000))//10us
	{ 
		/* Capture error */ 
		while (1);
	}
}

2.中断次数

中断次数*中断时间=定时时间

	
/**
* @brief   us延时程序,10us为一个单位
* @param
*   @arg nTime: Delay_us( 1 ) 则实现的延时为 1 * 10us = 10us
* @retval  无
*/
void Delay_us(__IO u32 nTime)
{
    TimingDelay = nTime;

    while (TimingDelay != 0);
}

3.中断服务函数

需要设置全局变量

static __IO u32 TimingDelay;

此函数要在it.c中实现

/**
* @brief  获取节拍程序
* @param  无
* @retval 无
* @attention  在 SysTick 中断函数 SysTick_Handler()调用
*/
void TimingDelay_Decrement(void)
{
    if (TimingDelay != 0x00) {
        TimingDelay--;
    }
}

你可能感兴趣的:(#,STM32,stm32,嵌入式)