1、Keil5 下新建一個STM32F103R6工程,目錄結構

2、 stm32f10x_it.h下添加
extern __IO uint32_t TimingDelay;
3、修改對應.c文件
void SysTick_Handler(void)
{
if(TimingDelay!=0x00)
{
TimingDelay--;
}
}
4、main.c文件
#include "stm32f10x.h"
__IO uint32_t TimingDelay;
void LED_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_SetBits(GPIOC,GPIO_Pin_8);
}
void delay_nms(__IO uint32_t nTime)
{
TimingDelay=nTime;
while(TimingDelay!=0);
}
void Init_SysTick(void){
if(SysTick_Config(SystemCoreClock/1000))
while(1);
}
int main(void)
{
SystemInit();
LED_GPIO_Config();
Init_SysTick();
while(1)
{
GPIO_SetBits(GPIOC,GPIO_Pin_8);
delay_nms(1000);
GPIO_ResetBits(GPIOC,GPIO_Pin_8);
delay_nms(1000);
}
}
5、Proteus運行

6、運行
運行時會發現不是一秒閃爍一次,經過研究,解決方法如下
默認72M計算機帶不動,修改時鍾頻率為較低頻率比如4M即可,如果你電腦比較差可以設置2M,1M.
#ifdef SYSCLK_FREQ_HSE
uint32_t SystemCoreClock = SYSCLK_FREQ_HSE; /*!< System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_4MHz
uint32_t SystemCoreClock = SYSCLK_FREQ_4MHz; /*!< System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_24MHz
uint32_t SystemCoreClock = SYSCLK_FREQ_24MHz; /*!< System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_36MHz
uint32_t SystemCoreClock = SYSCLK_FREQ_36MHz; /*!< System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_48MHz
uint32_t SystemCoreClock = SYSCLK_FREQ_48MHz; /*!< System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_56MHz
uint32_t SystemCoreClock = SYSCLK_FREQ_56MHz; /*!< System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_72MHz
uint32_t SystemCoreClock = SYSCLK_FREQ_72MHz; /*!< System Clock Frequency (Core Clock) */
#else /*!< HSI Selected as System Clock source */
uint32_t SystemCoreClock = HSI_VALUE; /*!< System Clock Frequency (Core Clock) */
#endif
7、觀察示波器

