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)
{
}
重新編譯,執行之後,果然正常了!!!!!