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

本文共 3073 字,大约阅读时间需要 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链接:

转载于:https://www.cnblogs.com/xiaomagee/p/7613884.html

你可能感兴趣的文章
jQuery系列之目录汇总
查看>>
Delphi多媒体设计之TMediaPlayer组件(六)
查看>>
使用iframe调用指定网页的特定位置(显示目标网页某区域的我想要的内容)
查看>>
ipcloud上传裁切图片,保存为base64再压缩传给后台
查看>>
HTTP幂等性概念和应用
查看>>
[SDOI2016 Round1] 数字配对
查看>>
hdu 1848 Fibonacci again and again
查看>>
2017北京国庆刷题Day3 afternoon
查看>>
cdqz2017-test10-rehearsal(CDQ分治&可持久化线段树&单调栈)
查看>>
opengl离屏渲染(不需要和窗口绑定,仅当作一个可以渲染一张图片的API使用)+ opencv显示...
查看>>
request的响应时间elapsed和超时timeout
查看>>
javascript的字符串大小比较
查看>>
大型网站的 HTTPS 实践(一)—— HTTPS 协议和原理(转)
查看>>
【洛谷P1558】色板游戏
查看>>
程序猿修仙之路--算法之快速排序到底有多快
查看>>
HTTP代理实现请求报文的拦截与篡改9--实现篡改功能后的演示+源码下载
查看>>
Linux常用命令与操作
查看>>
thinkphp5 composer安装验证码
查看>>
Eclipse中最常用的热键
查看>>
PL/SQL恢复默认窗口样式
查看>>