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)
{
}
重新编译,运行之后,果然正常了!!!!!