实验现象及操作说明:

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_mountres = f_mount(&fatfs,"0:",1);                                  //¸ø´ÅÅÌ·ÖÅäÅÌ·ûif(res != RES_OK){LED_RED_OFF;led_trade();}    //f_openres = f_open(&fil,"0:/app.bin",FA_READ);                       //´ò¿ªapp.binÎļþif(res != RES_OK){LED_RED_OFF;led_trade();}//f_lseekres = f_lseek(&fil,0);                                         //½«Ö¸ÕëÒƶ¯µ½µÚÒ»¸öλÖÃif(res != RES_OK){LED_RED_OFF;led_trade();}//дFlashwhile(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 */}

源代码下载链接:

链接:http://pan.baidu.com/s/1hr5G4AS 密码:1k74

iCore4链接:

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

【iCore4 双核心板_ARM】例程三十三:SD_IAP_ARM实验——更新升级STM32相关推荐

  1. 【iCore4 双核心板_ARM】例程三十八:DSP MATH库测试

    实验现象: 核心代码: int main(void) {/* USER CODE BEGIN 1 */int i,j;int res;float time[2];static int error_fl ...

  2. 【iCore4 双核心板_ARM】例程二十三:LWIP_HTTP实验——网页服务器

    实验现象: 核心代码: int main(void) { system_clock.initialize(); led.initialize(); adc.initialize(); delay.in ...

  3. 【iCore4 双核心板_ARM】例程五:SYSTICK定时器 实验——定时点亮LED

    实验原理: 通过STM32的三个GPIO口驱动三色LED的三个通道,设定GPIO为推挽输出模式,采 用灌电流方式与LED连接,输出高电平LED灭,输出低电平LED亮,通过系统定时器实现 1s定时,每秒 ...

  4. 【iCore4 双核心板_ARM】例程十七:USB_MSC实验——读/写U盘(大容量存储器)

    实验方法: 1.将跳线冒跳至USB_UART,通过Micro USB 线将iCore4 USB-UART接口与电脑相连. 2.打开PUTTY软件. 3.通过读U盘转接线将U盘(或者读卡器)与iCore ...

  5. 【iCore4 双核心板_ARM】例程二十:LWIP_TCP_CLIENT实验——以太网数据传输

    实验现象: 核心代码: int main(void) { system_clock.initialize(); //ϵͳʱÖÓ³õʼ»¯led.initialize(); //LED³õʼ» ...

  6. 【iCore4 双核心板_ARM】例程十一:DMA实验——存储器到存储器的传输

    实验原理: DAM(直接存储器访问)传输不需要占用CPU,可以在存储器至存储器实现高速的数据 传输.本实验采用DAM2控制器的数据流0,选用通道0进行数据传输.通过LED的颜色来 判断传输是否成功. ...

  7. 【iCore4 双核心板_ARM】例程一:ARM驱动三色LED

    实验原理: 通过STM32的三个GPIO驱动一个三色LED,引脚PB2接红色LED(ARM_LEDR), 引脚PA9接蓝色LED(ARM_LEDB),引脚PA10接绿色LED(ARM_LEDG),   ...

  8. 【iCore3 双核心板】例程三十五:HTTP_IAP_ARM实验——更新升级STM32

    实验指导书及代码包下载: http://pan.baidu.com/s/1eRgzSPW iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...

  9. 【iCore3 双核心板】例程十七:USB_MSC实验——读/写U盘(大容量存储器)

    实验指导书及代码包下载: http://pan.baidu.com/s/1qXt1L0o iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...

  10. 【iCore1S 双核心板_ARM】例程五:IWDG看门狗实验——复位ARM

    实验原理: STM32内部包含独立看门狗,通过看门狗可以监控程序运行,程序错误 时,未在规定时间喂狗,自动复位ARM.本实验通过按键按下,停止喂狗, 制造程序运行 错误,从而产生复位 . 实验现象: ...

最新文章

  1. QIIME 2教程. 26为QIIME 2开发新插件DevelopingPlugin(2020.11)
  2. php7 java8_php7 vs java8 vs nodejs5 vs lua5.2 计算性能比较
  3. oracle rcu 安装,Oracle Fusion MiddlewareⅠ: 数据库和RCU
  4. 从动力学角度看优化算法:GAN的第三个阶段
  5. VS code配置docker的shell环境
  6. [黑客技术]提权总结21种办法篇
  7. SQL | 目录(持续更新)
  8. 广州运营开放式数据交易平台发力大数据业务
  9. poj2586 Y2K Accounting Bug(贪心)
  10. 例3.5 二叉排序树 - 九度教程第35题(二叉排序树)
  11. 推好单-好券app是怎么代理分享赚钱的?
  12. 3ds Max老崩溃是什么感觉?崩溃还没有保存文件?这个小细节你要注意了
  13. 渐变按钮 css,CSS3 Gradient Buttons
  14. 性能测试监控TP50、TP99、TP999含义(99分位延时的含义)
  15. 独家秘技||如何快速入门一个陌生知识领域?
  16. 福利来了 | 开发者社区布道师计划,奖品丰厚
  17. 医生一句话,6岁女娃的视力从0.15回到1.0!
  18. OpenCV基础矩阵求解解析笔记
  19. 平台如何实现实人认证?
  20. Kyan网络监控设备账号密码泄露漏洞

热门文章

  1. 【渝粤教育】国家开放大学2018年春季 0195-22T机械设计基础 参考试题
  2. 深度学习系列(一)【人类语言处理--引言】
  3. 推荐系统之协同过滤(CF)算法详解和实现
  4. ArrayList概述
  5. MyEclipse控制台报错:java.lang.OutOfMemoryError: PermGen space
  6. [转]asp 无法连接 access,出现 -2147467259 未指定的错误
  7. bug-箭头函数中this指向的问题
  8. Codeforces 988D Points and Powers of Two 【性质】【卡常】
  9. 微信 oauth授权2
  10. Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作