int main(void)
{
    int k;
    int cnt;
    unsigned int counter;
    unsigned long int ncounter = 0;
    unsigned char buffer[1024];
    FIL fil;
    static FRESULT res;
    unsigned long int *p;
  /* MCU 配置 */
 
  /* 重置所有外设,初始化Flash接口和Systick. */
  HAL_Init();
  /* 系统时钟配置 */
  SystemClock_Config();
  /* 初始化所有已配置的外设 */
  MX_GPIO_Init();
  if(ARM_KEY_STATE == KEY_UP){
      goto start;    
    }
    LED_BLUE_ON;
    //SD卡初始化
    if(BSP_SD_Init() != MSD_OK){
        led_trade();
    }
    //解锁内存,擦除扇区
    HAL_FLASH_Unlock();
    for(cnt = FLASH_SECTOR_2;cnt < FLASH_SECTOR_11;cnt ++){
        FLASH_Erase_Sector(cnt,OB_BOR_LEVEL3);  
    }
    LED_BLUE_OFF;
    LED_RED_ON;
    //f_mount
    res = f_mount(&fatfs,"0:",1);      //给磁盘分配盘符
    if(res != RES_OK){
        LED_RED_OFF;
        led_trade();
    }   
    //f_open
    res = f_open(&fil,"0:/app.bin",FA_READ);        //打开app.bin文件
    if(res != RES_OK){
        LED_RED_OFF;
        led_trade();
    }
    //f_lseek
    res = f_lseek(&fil,0);         //将指针移动到第一个位置
    if(res != RES_OK){
        LED_RED_OFF;
        led_trade();
    }
    //写Flash
    while(ncounter < fil.fsize)
    {
    res = f_read(&fil,buffer,1024,&counter);           //读文件
        if(res != RES_OK){
            LED_RED_OFF;
            led_trade();
        }
        p = (unsigned long int *)buffer;
        for(k = 0; k < counter / 4; k++)
        {
            HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD,APPLICATION_ADDRESS + ncounter,*(p + k));
          ncounter += 4;
      }
  }
  HAL_FLASH_Lock();
  //ARM更新升级成功,绿色LED灯点亮
  LED_BLUE_OFF;
  LED_RED_OFF;
  LED_GREEN_ON;   
  while (1)
  {
  }
    start:
         //测试用户代码是否从APPLICATION_ADDRESS被编程
        if (((*(__IO uint32_t*)APPLICATION_ADDRESS) & 0x2FFE0000 ) == 0x20000000){ 
            //跳转至用户程序
            JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);
            Jump_To_Application = (pFunction) JumpAddress;
 
            //初始化用户程序的堆栈指针
            __set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);
            //跳转至应用程序
            Jump_To_Application();
        }else{        
            led_trade();
        }
  }
void led_trade(void)
{
    //蓝绿LED灯循环点亮
    while(1){
 
        LED_GREEN_ON;
        LED_BLUE_OFF;
 
        HAL_Delay(500);
 
        LED_GREEN_OFF;
        LED_BLUE_ON;
 
        HAL_Delay(500);
    }