STM32學習筆記——系統定時器SysTick
阿新 • • 發佈:2019-01-10
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();//每毫秒呼叫一次
}