【STM32】新手折腾笔记--03 系统级延时(Systick定时器)

时间:2023-01-22 23:36:57

——————————————————————
采用STM32F030C8T6核心板
STlink为调试下载器
Keil-MDK5 V5.14
固件库 V1.5.0
——————————————————————
老规矩 不讲原理,想知道详细的请看网路上各类大神的视频

我们将在上一讲的基础上改编,让LED能亮一秒,灭一秒,精确定时

精确定时采用的是STM32内部的sysTick定时器(滴答定时器)

一、文件结构【STM32】新手折腾笔记--03 系统级延时(Systick定时器)

二、驱动程序
在Bsp目录下建立
systick.c 和 systick.h 文件

#ifndef __SYSTICK_H //类似led.h的写法
#define __SYSTICK_H

#include "stm32f0xx.h"

void Systick_Init(void);
void Delay_ms(__IO uint32_t nTime);
void TimingDelay_Decrement(void);

#endif /* __SYSTICK_H */

在systick.c中写入

#include "systick.h"

static __IO uint32_t TimingDelay;

void Delay_ms(__IO uint32_t nTime)
{
TimingDelay = nTime;

while(TimingDelay != 0);
}

/**
* @brief Decrements the TimingDelay variable.
* @param None
* @retval None
*/

void TimingDelay_Decrement(void)
{
if (TimingDelay != 0x00)
{
TimingDelay--;
}
}

void Systick_Init(void)
{
if (SysTick_Config(SystemCoreClock / 1000))//配置为1ms
{
/* Capture error */
while (1);
}
}

既然用到定时器,和51类似,也要用定时器中断
在stm32f0xx.it.c 中找到SysTick_Handler在函数内部添加一句话

void SysTick_Handler(void)
{
TimingDelay_Decrement();//调动中断函数
}

三、主函数

#include "main.h"
#include "led.h"
#include "systick.h"
int main(void)
{
SystemInit(); //初始化系统
Systick_Init();//初始化滴答定时器

led_init();
while (1)
{
led_on();
Delay_ms(1000);
led_off();
Delay_ms(1000);
}
}