博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【iCore4 双核心板_ARM】例程三十三:SD_IAP_ARM实验——更新升级STM32
阅读量:6153 次
发布时间:2019-06-21

本文共 3020 字,大约阅读时间需要 10 分钟。

实验现象及操作说明:

1、本例程共有两个代码包,APP和IAP,IAP程序功能实现将APP程序升级至STM32中。

2、直接上电或烧写程序将执行升级的APP应用程序。

3、按下按键上电或写程序将进行升级,升级文件.bin文件存入在SD卡中

BIN升级文件产生方法:

1、编译APP工程,产生.hex文件。

2、将.hex文件拖至HEX2BIN.EXE即可产生.bin文件。

核心代码:

int main(void){  /* USER CODE BEGIN 1 */    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;  /* USER CODE END 1 */  /* MCU Configuration----------------------------------------------------------*/  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */  HAL_Init();  /* USER CODE BEGIN Init */  /* USER CODE END Init */  /* Configure the system clock */  SystemClock_Config();  /* USER CODE BEGIN SysInit */  /* USER CODE END SysInit */  /* Initialize all configured peripherals */  MX_GPIO_Init();  /* USER CODE BEGIN 2 */    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;      /* USER CODE END 2 */      /* Infinite loop */  /* USER CODE BEGIN WHILE */  while (1)  {  /* USER CODE END WHILE */  /* USER CODE BEGIN 3 */  }    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();        }      /* USER CODE END 3 */}

源代码下载链接:

链接: 密码:1k74

iCore4链接:

转载地址:http://wpbfa.baihongyu.com/

你可能感兴趣的文章
HDU 5524:Subtrees
查看>>
手机端userAgent
查看>>
pip安装Mysql-python报错EnvironmentError: mysql_config not found
查看>>
http协议组成(请求状态码)
查看>>
怎样成为一个高手观后感
查看>>
[转]VC预处理指令与宏定义的妙用
查看>>
JQuery radio单选框应用
查看>>
MySql操作
查看>>
python 解析 XML文件
查看>>
MySQL 文件导入出错
查看>>
java相关
查看>>
由一个异常开始思考springmvc参数解析
查看>>
向上扩展型SSD 将可满足向外扩展需求
查看>>
虚机不能启动的特例思考
查看>>
SQL Server编程系列(1):SMO介绍
查看>>
在VMware网络测试“专用VLAN”功能
查看>>
使用Formik轻松开发更高质量的React表单(三)<Formik />解析
查看>>
也问腾讯:你把用户放在什么位置?
查看>>
CSS Sprites 样式生成工具(bg2css)
查看>>
[转]如何重构代码--重构计划
查看>>