STM32学习笔记——系统定时器SysTick

SysTick定时器的应用。

程序运行效果:LED周期性闪烁。

代码:
main.c:

#include "stm32f10x.h"

static __IO uint32_t TimingDelay;

void LED_Config(void);
void RCC_Configuration(void);
void Delay(__IO uint32_t nTime);
void TimeDelay_Decrement(void);

int main(void)
{
    RCC_Configuration();
    LED_Config();
    TimingDelay = 500;
    SysTick_Config(72000);//初始化SysTick定时器,设置时钟源为FLCK,系统时钟频率为72MHz,对应的定时时间即为1毫秒
    while(1){
        GPIO_ResetBits(GPIOD, GPIO_Pin_2);
        Delay(500);
        GPIO_SetBits(GPIOD, GPIO_Pin_2);
        Delay(500);
    }
}

void LED_Config(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOD, &GPIO_InitStructure);
}

void RCC_Configuration(void)
{
    SystemInit();
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
}

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

    SysTick->CTRL |=  SysTick_CTRL_ENABLE_Msk;//使能SysTick定时器
    while(TimingDelay != 0);
    SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;//关闭SysTick定时器
}

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

stm32f10x_it.c:

#include "stm32f10x_it.h"

extern void TimeDelay_Decrement(void);

void SysTick_Handler(void)
{
    TimeDelay_Decrement();//每毫秒调用一次
}

你可能感兴趣的:(STM32)