完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
STM32CubeMx开发之路—移植easyflash
运行环境
本例程主要讲解如何移植easyflash. STM32CubeMx基本配置 基础配置过程请参考 STM32CubeMx开发之路—配置第一个项目 使用printf功能 重定向printf的过程请参考 STM32CubeMx开发之路—3发送USART数据和printf重定向 本例程不需要其他什么外设资源, 配置printf()主要是方便我们调试. 下载easyflash源码 下载EasyFlash源码 会得到一个源码的仓库, 如下图所示 注意: 源码的说明文档里面已经说明了如何使用这个库, 大家也可以参考这个说明进行移植, 我这儿根据自己的移植思路针对STM32使用HAL库做移植说明. 在自己的代码中添加easyflash所需要的文件
代码修改
EfErrCode ef_port_read(uint32_t addr, uint32_t *buf, size_t size) { EfErrCode result = EF_NO_ERR; /* You can add your code under here. */ uint8_t *buf_8 = (uint8_t *)buf; size_t i; for (i = 0; i < size; i++, addr ++, buf_8++) { *buf_8 = *(uint8_t *) addr; } return result; }
EfErrCode ef_port_erase(uint32_t addr, size_t size) { EfErrCode result = EF_NO_ERR; /* make sure the start address is a multiple of EF_ERASE_MIN_SIZE */ EF_ASSERT(addr % EF_ERASE_MIN_SIZE == 0); /* You can add your code under here. */ HAL_FLASH_Unlock(); /* 擦除FLASH*/ FLASH_EraseInitTypeDef FlashSet; FlashSet.TypeErase = FLASH_TYPEERASE_PAGES; FlashSet.PageAddress = addr; FlashSet.NbPages = (size + EF_ERASE_MIN_SIZE -1)/ EF_ERASE_MIN_SIZE; /*设置PageError,调用擦除函数*/ uint32_t PageError = 0; HAL_FLASHEx_Erase(&FlashSet, &PageError); HAL_FLASH_Lock(); return result; }
EfErrCode ef_port_write(uint32_t addr, const uint32_t *buf, size_t size) { EfErrCode result = EF_NO_ERR; /* You can add your code under here. */ size_t i; uint32_t read_data; HAL_FLASH_Unlock(); for (i = 0; i < size; i += 4, buf++, addr += 4) { /* write data */ HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, addr, *buf); read_data = *(uint32_t *)addr; /* check data */ if (read_data != *buf) { result = EF_WRITE_ERR; break; } } HAL_FLASH_Lock(); return result; }
写测试程序
/* USER CODE BEGIN 2 */ unsigned int Reboot_Time = 0; if(easyflash_init() == EF_NO_ERR) // 初始化成功 { ef_get_env_blob("reboot_time", &Reboot_Time, 8, NULL); // 读出reboot_time的值 } Reboot_Time++; // reboot_time的值加1 ef_set_env_blob("reboot_time",&Reboot_Time,8); // 保存reboot_time的值 printf("Reboot_Time is %dn",Reboot_Time); // 打印reboot_time的值 /* USER CODE END 2 */ 测试输出
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1632 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1559 浏览 1 评论
985 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
688 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1605 浏览 2 评论
1869浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
653浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
523浏览 3评论
540浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
509浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 15:20 , Processed in 0.765145 second(s), Total 49, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号