【iCore4 双核心板_ARM】例程三十三:SD_IAP_ARM实验——更新升级STM32
实验现象及操作说明:
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相关推荐
- 【iCore4 双核心板_ARM】例程三十八:DSP MATH库测试
实验现象: 核心代码: int main(void) {/* USER CODE BEGIN 1 */int i,j;int res;float time[2];static int error_fl ...
- 【iCore4 双核心板_ARM】例程二十三:LWIP_HTTP实验——网页服务器
实验现象: 核心代码: int main(void) { system_clock.initialize(); led.initialize(); adc.initialize(); delay.in ...
- 【iCore4 双核心板_ARM】例程五:SYSTICK定时器 实验——定时点亮LED
实验原理: 通过STM32的三个GPIO口驱动三色LED的三个通道,设定GPIO为推挽输出模式,采 用灌电流方式与LED连接,输出高电平LED灭,输出低电平LED亮,通过系统定时器实现 1s定时,每秒 ...
- 【iCore4 双核心板_ARM】例程十七:USB_MSC实验——读/写U盘(大容量存储器)
实验方法: 1.将跳线冒跳至USB_UART,通过Micro USB 线将iCore4 USB-UART接口与电脑相连. 2.打开PUTTY软件. 3.通过读U盘转接线将U盘(或者读卡器)与iCore ...
- 【iCore4 双核心板_ARM】例程二十:LWIP_TCP_CLIENT实验——以太网数据传输
实验现象: 核心代码: int main(void) { system_clock.initialize(); //ϵͳʱÖÓ³õʼ»¯led.initialize(); //LED³õʼ» ...
- 【iCore4 双核心板_ARM】例程十一:DMA实验——存储器到存储器的传输
实验原理: DAM(直接存储器访问)传输不需要占用CPU,可以在存储器至存储器实现高速的数据 传输.本实验采用DAM2控制器的数据流0,选用通道0进行数据传输.通过LED的颜色来 判断传输是否成功. ...
- 【iCore4 双核心板_ARM】例程一:ARM驱动三色LED
实验原理: 通过STM32的三个GPIO驱动一个三色LED,引脚PB2接红色LED(ARM_LEDR), 引脚PA9接蓝色LED(ARM_LEDB),引脚PA10接绿色LED(ARM_LEDG), ...
- 【iCore3 双核心板】例程三十五:HTTP_IAP_ARM实验——更新升级STM32
实验指导书及代码包下载: http://pan.baidu.com/s/1eRgzSPW iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...
- 【iCore3 双核心板】例程十七:USB_MSC实验——读/写U盘(大容量存储器)
实验指导书及代码包下载: http://pan.baidu.com/s/1qXt1L0o iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...
- 【iCore1S 双核心板_ARM】例程五:IWDG看门狗实验——复位ARM
实验原理: STM32内部包含独立看门狗,通过看门狗可以监控程序运行,程序错误 时,未在规定时间喂狗,自动复位ARM.本实验通过按键按下,停止喂狗, 制造程序运行 错误,从而产生复位 . 实验现象: ...
最新文章
- QIIME 2教程. 26为QIIME 2开发新插件DevelopingPlugin(2020.11)
- php7 java8_php7 vs java8 vs nodejs5 vs lua5.2 计算性能比较
- oracle rcu 安装,Oracle Fusion MiddlewareⅠ: 数据库和RCU
- 从动力学角度看优化算法:GAN的第三个阶段
- VS code配置docker的shell环境
- [黑客技术]提权总结21种办法篇
- SQL | 目录(持续更新)
- 广州运营开放式数据交易平台发力大数据业务
- poj2586 Y2K Accounting Bug(贪心)
- 例3.5 二叉排序树 - 九度教程第35题(二叉排序树)
- 推好单-好券app是怎么代理分享赚钱的?
- 3ds Max老崩溃是什么感觉?崩溃还没有保存文件?这个小细节你要注意了
- 渐变按钮 css,CSS3 Gradient Buttons
- 性能测试监控TP50、TP99、TP999含义(99分位延时的含义)
- 独家秘技||如何快速入门一个陌生知识领域?
- 福利来了 | 开发者社区布道师计划,奖品丰厚
- 医生一句话,6岁女娃的视力从0.15回到1.0!
- OpenCV基础矩阵求解解析笔记
- 平台如何实现实人认证?
- Kyan网络监控设备账号密码泄露漏洞
热门文章
- 【渝粤教育】国家开放大学2018年春季 0195-22T机械设计基础 参考试题
- 深度学习系列(一)【人类语言处理--引言】
- 推荐系统之协同过滤(CF)算法详解和实现
- ArrayList概述
- MyEclipse控制台报错:java.lang.OutOfMemoryError: PermGen space
- [转]asp 无法连接 access,出现 -2147467259 未指定的错误
- bug-箭头函数中this指向的问题
- Codeforces 988D Points and Powers of Two 【性质】【卡常】
- 微信 oauth授权2
- Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作