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

 

 

  

 

 

 

 

 

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM