STM32 例程-1 Proteus下使LED闪烁(SysTick)

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

  

  

  

1、建了一个小群:616945527(软件), 欢迎大家加入,加群口令abc123,硬件嵌入式开发者推荐75764412(单片机)。
闲置域名www.nsxz.com出售(等宽等高字符四字域名,可组合多种有意义词语)。
原文地址:https://www.cnblogs.com/zhaogaojian/p/14399064.html