操作环境(蓝色粗体字为特别注意内容)
1,开发板:STM32F103C8T6最小系统核心板。
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) { }重新编译,运行之后,果然正常了!!!!!