STM32用key2控制流水灯的停止和闪烁

#include "key.h"
#include "led.h"
void delay(uint32_t); //声明有参数延时函数;
int main(void)
{
int a=0;
uint32_t keynum;

/* 初始化板载LED指示灯 */
LED_Init();

/* 初始化板载按键为GPIO模式(非中断) */
SZ_STM32_KEYInit();
 
/* Infinite loop 主循环 */
/* 按键按下时为低电平,如果按键按下则改变指示灯状态 */
        
  
while (1)
{

    /* 按键按下时为低电平,如果按键按下则改变指示灯状态 */
        keynum = SZ_STM32_KEYScan();
       while(keynum == 2)
    {
        a++;
    }    
         
    //keynum = SZ_STM32_KEYScan();
           
                while (a%2==1)

                {    
                    GPIO_ResetBits(GPIOD,GPIO_Pin_2);//第一灯亮
                    delay(800000);
                    GPIO_SetBits(GPIOD,GPIO_Pin_2);    //第一灯灭
                    delay(800000);

                    GPIO_ResetBits(GPIOD,GPIO_Pin_3); //第二灯亮
                    delay(800000);
                    GPIO_SetBits(GPIOD,GPIO_Pin_3);     //第二灯灭
                    delay(800000);

                    GPIO_ResetBits(GPIOD,GPIO_Pin_4); //第三灯亮
                    delay(800000);
                    GPIO_SetBits(GPIOD,GPIO_Pin_4);     //第三灯灭
                    delay(800000);

                    GPIO_ResetBits(GPIOD,GPIO_Pin_7); //第四灯亮
                    delay(800000);
                    GPIO_SetBits(GPIOD,GPIO_Pin_7);     //第四灯灭
                    delay(800000);
                    while (a%2==0)
                    {
                    break;
                    }
                        
              }    
   
                 
                    /* 等待按键释放 */
                    while(keynum == SZ_STM32_KEYScan());
                    /* 按键释放延迟去抖 */
                    delay(150000);
       }
  

}

你的延时函数没有初始化