實驗目的:利用 SysTick 産生 1s 的時基,LED 以 1s 的頻率閃爍。
程式設計要點
1、設定重裝載寄存器的值
2、清除目前數值寄存器的值
3、配置控制與狀态寄存器
過程
我們建立了兩個檔案:bsp_SysTick.c 和 bsp_ SysTick.h 檔案用來存放 SysTick 驅動程式及相關宏定義。
bsp_systick.c
#include “bsp_systick.h”
void SysTick_Delay_us(uint32_t us)
{
uint32_t i;
SysTick_Config(72);
for(i=0; i<us; i++)
{ //讀取SysTick的CTRL的第十六位,讀取後自動置0,重複us次,每次1us
while( !((SysTick->CTRL) & (1<<16)) );
}
SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;
}
void SysTick_Delay_ms(uint32_t ms)
{
uint32_t i;
SysTick_Config(72000);
for(i=0; i<ms; i++)
{ //讀取SysTick的CTRL的第十六位,讀取後自動置0,重複ms次,每次1ms
while( !((SysTick->CTRL) & (1<<16)) );
}
SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;
}

bsp_systick.h
#ifndef __BSP_SYSTICK_H
#define __BSP_SYSTICK_H
#include "stm32f10x.h"
#include "core_cm3.h"
void SysTick_Delay_us(uint32_t us);
void SysTick_Delay_ms(uint32_t ms);
#endif /* __BSP_SYSTICK_H */
main.c
#include "stm32f10x.h" // 相當于51單片機中的 #include <reg51.h>
#include "bsp_led.h"
void Delay( uint32_t count )
{
for(; count!=0; count--);
}
int main(void)
{
// 來到這裡的時候,系統的時鐘已經被配置成72M。
LED_GPIO_Config();
while(1)
{
LED_G(OFF);
SysTick_Delay_ms(500);
LED_G(ON);
SysTick_Delay_ms(500);
}
}