当前位置: 首页 > news >正文

STM32H743-ARM例程39-SD_IAP

目录

  • 实验平台
  • IAP(SD卡存储介质)
  • STM32CubeMX生成工程
  • 实验代码
  • 实验现象

实验平台

硬件:银杏科技GT7000双核心开发板-ARM-STM32H743XIH6,银杏科技iToolXE仿真器
软件:最新版本STM32CubeH7固件库,STM32CubeMX v6.10.0,开发板环境MDK v5.35,TCP&UDP测试工具,串口工具putty
网盘资料包:链接: https://pan.baidu.com/s/1Y3nwaY4SMxfoUsdqPm2R3w?pwd=inba 提取码: inba

IAP(SD卡存储介质)

  在上一章节我们介绍了IAP相关知识,并且利用UART串口传输APP文件,本章我们采用SD卡来传输APP文件。
  SD卡相关知识可以参考文章STM32H743-ARM例程13-SDIO

STM32CubeMX生成工程

我们参考前面章节STM32H743-结合CubeMX新建HAL库MDK工程,打开CubeMX软件,重复步骤不再展示,我们来看配置SDMMC部分如下图所示:
配置SDMMC1
在这里插入图片描述
配置FATFS
在这里插入图片描述

实验代码

  本章实验包含两个程序,APP和bootloader,APP程序可以参考STM32H743-ARM例程34-BootROM,把启动地址修改为0x8040000

#define FLASH_ADDRESS     (uint32_t)0x8040000

bootloader程序:

1. 主函数

int main(void)
{/* USER CODE BEGIN 1 */int cnt;int k;unsigned char buffer[6144];unsigned char * p;unsigned long int ncounter = 0;unsigned int counter;/* Enable the CPU Cache */CPU_CACHE_Enable();/* 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();MX_SPI5_Init();MX_USART6_UART_Init();MX_SDMMC1_SD_Init();MX_FATFS_Init();/* USER CODE BEGIN 2 */uart6.initialize(115200);   uart6.printf("\x0c"); uart6.printf("\033[1;32;40m");uart6.printf("Hello,I am GT7000\r\n");LED_ON;/* USER CODE END 2 */if(ARM_KEY4_STATE == KEY_UP){     //按键松开状态直接跳向应用程序goto start;}//SD卡初始化if(BSP_SD_Init() != MSD_OK){led_trade();}res = f_mount(&fatfs,"0:",1);//判断是否成功if(res != RES_OK){led_trade();}else{uart6.printf("f_mount is ok!\r\n");}res = f_open(&fil,"0:/app.bin",FA_READ); //打开app.bin文件//判断文件打开是否成功if(res != RES_OK){led_trade();}else{uart6.printf("f_open is ok!\r\n");}res = f_lseek(&fil,0);                   //将指针移动到第一个位置//指针是否移动成功if(res != RES_OK){led_trade();uart6.printf("f_lseek is error!\r\n");}else{uart6.printf("f_lseek is ok!\r\n");}//获取文件信息f_stat("0:/app.bin",&finfo);while(ncounter < finfo.fsize){//读取6144Byte数据res = f_read(&fil,buffer,6144,&counter);  //读文件if(res != RES_OK){uart6.printf("Read APP error!\r\n");led_trade();}uart6.printf("%d\r\n",counter);p =(unsigned char*)buffer;  uart6.printf("Read APP ...!\r\n");      iap_write_appbin(APPLICATION_ADDRESS,p ,6144);ncounter +=6144;    }uart6.printf("Load APP finish!\r\n");/* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}start:if (((*(__IO uint32_t*)APPLICATION_ADDRESS) & 0x2FFE0000 ) == 0x24000000){ //跳转至用户程序JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);JumpToApplication = (pFunction) JumpAddress;//初始化用户程序的堆栈指针__set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);//跳转至应用程序JumpToApplication();}else{               led_trade();}/* USER CODE END 3 */
}

2. iap_write_appbin函数

void iap_write_appbin(uint32_t appxaddr,uint8_t *appbuf,uint32_t appsize)
{uint32_t t;uint16_t i=0;uint32_t temp;uint32_t fwaddr=appxaddr;//当前写入的地址uint8_t *dfu=appbuf;for(t=0;t<appsize;t+=4){                          temp=(uint32_t)dfu[3]<<24;   temp|=(uint32_t)dfu[2]<<16;    temp|=(uint32_t)dfu[1]<<8;temp|=(uint32_t)dfu[0];   dfu+=4;//偏移4个字节iapbuf[i++]=temp;       if(i==FLASH_SECTOR){i=0; STMFLASH_Write(fwaddr,iapbuf,FLASH_SECTOR);fwaddr+=FLASH_SECTOR*4;//偏移2048  512*4=2048}} if(i)STMFLASH_Write(fwaddr,iapbuf,i);//将最后的一些内容字节写进去.  
}

实验现象

我们将app.bin 文件拷贝到SD卡中,运行程序,按下 ARM-KEY 将烧写 Bootloader(IAP)程序烧写程序到GT7000上,通过读取SD卡中的app.bin文件,重新上电 ARM-LED 灯闪烁,即 ARM 更新升级成功。

http://www.dtcms.com/a/578972.html

相关文章:

  • 域名备案 个人 网站基本信息查询如何做淘宝返利网站
  • 51单片机定时器函数分享(8051汇编)
  • 自建督学习——BERT(第二十二周周报)
  • 临湘网站建设2022年百度seo
  • 公司做年审在哪个网站网络安全培训最强的机构
  • (139页PPT)某著名企业智改数字化转型升级汇报方案(附下载方式)
  • 可信网站认证有什么用合肥房产网新楼盘价格
  • 多多返利网站建设杭州效果图制作
  • 德阳做网站公司网上营销方法
  • 【产品研究】MyoSuite:面向肌肉骨骼运动控制的富接触仿真套件 总结
  • Java 集合框架:HashMap 与 Map 体系深度解析
  • 网站建设运营费用预算wordpress禁止留言
  • 制作的大型网站多少钱免费搭建微商城
  • 怎样克隆别人的网站wordpress搭建cms网站
  • 校园二手网站的建设方案无货源电商怎么找货源
  • leetcode 3607. 电网维护 中等
  • 【分层强化学习】#1 引论:选项框架与半马尔可夫决策过程
  • 鄂州网站建设哪家专业高端网站设计欣赏
  • 上海专业做网站公司有哪些网站域名邮箱
  • 如何做销售直播网站国外免费服务器申请
  • 从“零”构建零售EDI能力:实施路径与常见陷阱
  • 从零开始刷算法-单调栈-每日温度
  • 建设银行网银网站h5制作网页
  • 免费金融发布网站模板wordpress移动端顶部导航栏
  • 成都公司做网站西安做网站公司玖佰网络
  • 网站制作交易流程网站建设方案平台选择
  • 如何给网站划分栏目高端建站的公司
  • 做酱菜网站一元云淘网站开发
  • 柳州建网站互联网销售公司起名
  • 中信云 做网站公司注册地址是什么