实验现象及操作说明:

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. 一次ARP病毒排查

    XX公司网络卡断问题 1.  问题现象 2017年XX公司机关网络出现几次异常情况,并寻求内外部专家对异常情况进行诊断分析,均未找到原因,具体情况如下: 1.XX分公司机关网络IP地址为10.0.0. ...

  2. BZOJ1500: [NOI2005]维修数列 [splay序列操作]【学习笔记】

    以前写过这道题了,但我把以前的内容删掉了,因为现在感觉没法看 重写! 题意: 维护一个数列,支持插入一段数,删除一段数,修改一段数,翻转一段数,查询区间和,区间最大子序列 splay序列操作裸题 需要 ...

  3. STM32——TIM2定时器定时

    STM32 中一共有11 个定时器,其中2 个高级控制定时器,4 个普通定时器和2 个基本定时器,以及2 个看门狗定时器和1 个系统嘀嗒定时器.其中系统嘀嗒定时器是前文中所描述的SysTick,看门狗 ...

  4. 基于Systick系统时钟延时的LED闪烁灯

    1.回顾我们的51 单片机编程,当我们需要做系统延迟的时候,最常采用的一种方式就是使用for 循环的空语句等待来实现. 当然,在STM32 里面也可以这么实现.但是在STM32 的Cortex 内核里 ...

  5. Spring 的 AOP 进行事务管理的一些问题

    AspectJ AOP事务属性的配置(隔离级别.传播行为等): <tx:advice id="myAdvice" transaction-manager="mtTx ...

  6. Ural2110 : Remove or Maximize

    设最大的数为$w$,若$n>k+\log w$,那么显然所有$1$都可以保留,否则现在$n\leq k+\log w$. 如果$w\leq 100000$,那么可以DP,设$f[i][j]$表示 ...

  7. Android笔记--LinearLayout

    LinearLayout 即线性布局,让子元素水平或垂直的排列在 layout中,子元素不会换行,当排到末尾时,剩下的组件将不会被显示出来. LinearLayout 常用的属性及方法: XML属性 ...

  8. python系统编程(十一)

    同步应用 多个线程有序执行 from threading import Thread,Lock from time import sleep class Task1(Thread): def run( ...

  9. PAT Basic 1026

    1026 程序运行时间 (15 分) 要获得一个 C 语言程序的运行时间,常用的方法是调用头文件 time.h,其中提供了 clock() 函数,可以捕捉从程序开始运行到 clock() 被调用时所耗 ...

  10. parcel 中小型项目打包工具

    "0配置"打包器(bundler)Parcel Parcel官网(有中文文档) webpack 要有大量的配置,这样带来的成本就是复杂性--与此相对的,Parcel 带来了简洁性. ...