实验现象及操作说明:

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 = ;
unsigned char buffer[];
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:",); //¸ø´ÅÅÌ·ÖÅäÅÌ·û
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,); //½«Ö¸ÕëÒÆ¶¯µ½µÚÒ»¸öλÖÃ
if(res != RES_OK){
LED_RED_OFF;
led_trade();
} //дFlash
while(ncounter < fil.fsize)
{
res = f_read(&fil,buffer,,&counter); //¶ÁÎļþ
if(res != RES_OK){
LED_RED_OFF;
led_trade();
}
p = (unsigned long int *)buffer;
for(k = ; k < counter / ; k++)
{
HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD,APPLICATION_ADDRESS + ncounter,*(p + k));
ncounter += ;
}
}
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 ()
{
/* 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 + );
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链接:

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

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

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

  2. 【iCore4 双核心板_ARM】例程三十四:U_DISK_IAP_ARM实验——更新升级STM32

    实验现象及操作说明: 1.本例程共有两个代码包,APP和IAP,IAP程序功能实现将APP程序升级至STM32中. 2.直接上电或烧写程序将执行升级的APP应用程序. 3.按下按键上电或写程序将进行升 ...

  3. 【iCore4 双核心板_ARM】例程三十二:UART_IAP_ARM实验——更新升级STM32

    实验现象及操作说明: 1.本例程共有两个代码包,APP和IAP,IAP程序功能实现将APP程序升级至STM32中. 2.直接上电或烧写程序将执行升级的APP应用程序. BIN升级文件产生方法: 1.编 ...

  4. 【iCore4 双核心板_ARM】例程三十:U_DISK_IAP_FPGA实验——更新升级FPGA

    实验现象及操作说明: 1.将升级文件拷入U盘system文件夹中,通过U盘转接线将U盘连接到iCore4 USB OTG接口. 2.烧写程序成功,绿色ARM·LED灯点亮,三色FPGA·LED灯循环点 ...

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

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

  6. 【iCore4 双核心板_ARM】例程三十七:SDRAM实验——读写SDRAM

    实验现象: 上电即开始读写SDRAM测试,测试过程中,蓝色LED点亮,如果出现错误,红色LED闪烁,测试成功,绿色LED点亮. 核心代码: int main(void) { /* USER CODE ...

  7. 【iCore4 双核心板_ARM】例程三十六:DAC实验——输出直流电压

    实验现象: 用电压表测量PA4引脚有2.0V直流电压输出. 核心代码: int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ / ...

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

    实验现象: 核心代码: int main(void) { led.initialize(); //LED³õʼ»¯ key.initialize(); if(ARM_KEY_STATE == KEY ...

  9. 【iCore4 双核心板_ARM】例程三十一:HTTP_IAP_FPGA实验——更新升级FPGA

    实验现象: 核心代码: int main(void) { GPIO_InitTypeDef GPIO_InitStruct; __HAL_RCC_GPIOI_CLK_ENABLE(); __HAL_R ...

随机推荐

  1. 深度学习目标检测:RCNN,Fast,Faster,YOLO,SSD比较

    转载出处:http://blog.csdn.net/ikerpeng/article/details/54316814 知乎的图可以放大,更清晰,链接:https://www.zhihu.com/qu ...

  2. No compiler is provided in this environment.Perhaps you are running on a JRE rather than a JDK?报错解决

    Maven install 时出现如上错误. Eclipse-->Window-->preferences-->Java-->Installed JREs 查看jdk: 发现此 ...

  3. (数据存储)Android系统存储数据

    移动设备需要存储数据,处理数据并输出处理后的信息. 主题一:存储键值对 If you have a relatively small collection of key-values that you ...

  4. 【开源GPS追踪】 之 为何费力不讨好

    GPS追踪,在X宝上一搜一大堆,价格几十到几百层次不齐,为何还要自己开发? 1 对我来说,就是手头有这些硬件资源(GPRS GPS MCU)以及软件资源(VPS),算闲的蛋疼,其实不然,本人工作也很忙 ...

  5. DAG 上的动态规划(训练指南—大白书)

    有向无环图(DAG,Directed Acyclic Graph)上的动态规划是学习动态规划的基础.很多问题都可以转化为DAG上的最长路.最短路或路径计数问题. 一.矩形嵌套 题目描述:       ...

  6. BZOJ2240 : ural1676 Mortal Combat

    首先如果最大匹配不足$n$个那么显然每条边都不可能在匹配为$n$的方案中. 对于一条边$(u,v)$,如果它可能在最大匹配中,有两种情况: $1.(u,v)$是当前方案的匹配边. $2.$可以沿着$( ...

  7. JS 单体内置对象

    内置对象: 由ECMAScript提供的.不依赖于宿主环境的对象,这些对象在ECMAScript程序执行之前就已经存在了. 不必由开发人员显式地实例化内置对象 比如: Object Array Str ...

  8. db2 reorgchk

    db2 reorgchk 命令是最重要的.也是经常被忽略的 DB2 调整命令之一. db2 reorgchk 命令被忽略是因为它不是一个一次性调整项.由于更新是在 DB2 数据库上执行的,因此关于表的 ...

  9. CSS_级联和继承

    2016-11-06 <CSS入门经典>第七章 1.在HTML中使用CSS样式表的三种方式: (1)内联的样式表. eg:<em style="background-whi ...

  10. ajax01

    ajax01 1.ajax简介 涉及AJAX的操作页面不能用文件协议访问 使用ajax发送请求: send参数缺省默认为null onreadyatatechange事件在状态改变时就会触发. .re ...