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、觀察示波器