1. 程式人生 > >STM32學習筆記——系統定時器SysTick

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();//每毫秒呼叫一次
}