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

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

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

精确定时采用的是STM32内部的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);
  }
}

posted @ 2017-02-25 13:26  ArtisticZhao  阅读(371)  评论(0编辑  收藏  举报