STM32调用SysTick_Config之后无法延时的奇怪问题

操作环境(蓝色粗体字为特别注意内容)
1,开发板:STM32F103C8T6最小系统核心板。

2,开发环境:Keil uv5

在我的工程里面用到SysTick_Config函数,如下:

	RCC_Configuration();				 //系统时钟设置
	NVIC_Configuration();
	GPIO_Configuration();                //IO口初始化
	Usart1_Init();                       //串口1初始化
	/* 配置systic作为1ms中断 */
	if (SysTick_Config(72000))		     //时钟节拍中断时1ms一次  用于定时
	{
		/* Capture error */
	
		while (1);
	}

	FIFO_GPIO_Configuration();
	Delay(2);       					     //延时10ms
	disableJTAG();
	led();

其中led()函数如下:

#include "led.h"
void GpioConfigurationLed(void)
{
 GPIO_InitTypeDef  GPIO_InitStructure;
	/* Enable the GPIO_LED Clock */
	 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB 
	                       |RCC_APB2Periph_GPIOC
						   |RCC_APB2Periph_GPIOD, ENABLE);
	/* Configure the GPIO_LED pin */
	 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 	//推挽输出
	 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	
	 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All ;
	 GPIO_Init(GPIOC, &GPIO_InitStructure);

}

void DelayLED(unsigned int uiDly)
{
     while(uiDly--);
}

void led(){
		GpioConfigurationLed();
		for(;;) {
   GPIOC ->ODR =   GPIO_Pin_13;	//熄灭(LED共阳极)
	   DelayLED(0x54321);
	   GPIOC ->ODR &= ~GPIO_Pin_13 ;	//点亮(LED共阳极)
	   DelayLED(0x54321);
	}
}

发现在调用SysTick_Config函数之前led可以交替闪烁,完全没有问题,但是在调用SysTick_Config之后,led就常亮了,甚是奇怪,一开始怀疑是SysTick_Config函数的问题,各种找资料,还是无法解决,直到看到这篇文章:

点击打开链接

之后,才有了启发,是不是因为工程里面没有void SysTick_Handler(void)这个函数????,于是工程新建一个文件stm32f10x_it.c:

内容如下:

//#include "stm32f10x_it.h"
#include "stm32f10x_exti.h"
void SysTick_Handler(void)
{

}
重新编译,运行之后,果然正常了!!!!!



猜你喜欢

转载自blog.csdn.net/pang9998/article/details/79807098