1.参考文件

https://github.com/RT-Thread-packages/fal
https://github.com/RT-Thread-packages/fal/blob/master/samples/porting/README.md
https://blog.csdn.net/m0_37621078/article/details/102689903

2.ENV配置

(1)配置使用片内Flash,修改./board/Kconfig文件增加使用内部Flash选项。
①增加的内容如下:

menu "On-chip Peripheral Drivers"
...     config BSP_USING_ON_CHIP_FLASHbool "Enable on-chip FLASH"default y

② ENV配置如下图
选择该选项后,MDK工程中会增加 stm32f1xx_hal_flash_ex.c和stm32f1xx_hal_flash.c另个与片内Flash相关的文件。

(2)ENV配置使用fal包,配置内容如下:
选择使用fal_cfg.h配置Flash的分区表,配置路径为:

RT-Thread online packagessystem packages --->--- fal: Flash Abstraction Layer implement. Manage flash device and partition.

3.重写底层Flash驱动函数

(1)创建设备底层驱动需要的c文件,根据实际芯片改写内存配置,包括设备名,起始地址,内存总大小,山区大小,注册函数名,如下图所示。

4.配置Flash分区表

(1)目前只使用片内Flash,故FAL_FLASH_DEV_TABLE结构只配置一个Flash
(2)配置分区表结构FAL_PART_TABLE,包括:分区名, flash设备名, 起始地址, 空间大小等内容,如下图所示:

注意: 分区表的flash设备名要和fal_flash_dev中定义的名称一致!!!起始地址为相对于fal_flash_dev中扇区
首地址的偏移地址(STM32F4xx系列需要格外注意)!!!

5.配置完成,测试读写

使用之前,必须首先调用fal_init()函数进行初始化。

附录1:测试读写

// 测试代码来源于参考文件中的网址
#include "rtthread.h"
#include "rtdevice.h"
#include "board.h"
#include "fal.h"#define BUF_SIZE 1024static int fal_test(const char *partiton_name)
{int ret;int i, j, len;uint8_t buf[BUF_SIZE];const struct fal_flash_dev *flash_dev = RT_NULL;const struct fal_partition *partition = RT_NULL;if (!partiton_name){rt_kprintf("Input param partition name is null!\n");return -1;}partition = fal_partition_find(partiton_name);if (partition == RT_NULL){rt_kprintf("Find partition (%s) failed!\n", partiton_name);ret = -1;return ret;}flash_dev = fal_flash_device_find(partition->flash_name);if (flash_dev == RT_NULL){rt_kprintf("Find flash device (%s) failed!\n", partition->flash_name);ret = -1;return ret;}rt_kprintf("Flash device : %s   ""Flash size : %dK   \n""Partition : %s   ""Partition size: %dK\n", partition->flash_name, flash_dev->len/1024,partition->name,partition->len/1024);/* erase all partition */ret = fal_partition_erase_all(partition);if (ret < 0){rt_kprintf("Partition (%s) erase failed!\n", partition->name);ret = -1;return ret;}rt_kprintf("Erase (%s) partition finish!\n", partiton_name);/* read the specified partition and check data */for (i = 0; i < partition->len;){rt_memset(buf, 0x00, BUF_SIZE);len = (partition->len - i) > BUF_SIZE ? BUF_SIZE : (partition->len - i);ret = fal_partition_read(partition, i, buf, len);if (ret < 0){rt_kprintf("Partition (%s) read failed!\n", partition->name);ret = -1;return ret;}for(j = 0; j < len; j++){if (buf[j] != 0xFF){rt_kprintf("The erase operation did not really succeed!\n");ret = -1;return ret;}}i += len;}/* write 0x00 to the specified partition */for (i = 0; i < partition->len;){rt_memset(buf, 0x00, BUF_SIZE);len = (partition->len - i) > BUF_SIZE ? BUF_SIZE : (partition->len - i);ret = fal_partition_write(partition, i, buf, len);if (ret < 0){rt_kprintf("Partition (%s) write failed!\n", partition->name);ret = -1;return ret;}i += len;}rt_kprintf("Write (%s) partition finish! Write size %d(%dK).\n", partiton_name, i, i/1024);/* read the specified partition and check data */for (i = 0; i < partition->len;){rt_memset(buf, 0xFF, BUF_SIZE);len = (partition->len - i) > BUF_SIZE ? BUF_SIZE : (partition->len - i);ret = fal_partition_read(partition, i, buf, len);if (ret < 0){rt_kprintf("Partition (%s) read failed!\n", partition->name);ret = -1;return ret;}for(j = 0; j < len; j++){if (buf[j] != 0x00){rt_kprintf("The write operation did not really succeed!\n");ret = -1;return ret;}}i += len;}ret = 0;return ret;
}void fal_sample(void)
{fal_init(); //抽象层初始化if (fal_test("para") == 0){rt_kprintf("Fal partition (%s) test success!\n", "param");}else{rt_kprintf("Fal partition (%s) test failed!\n", "param");}if (fal_test("buff") == 0){rt_kprintf("Fal partition (%s) test success!\n", "download");}else{rt_kprintf("Fal partition (%s) test failed!\n", "download");}
}MSH_CMD_EXPORT(fal_sample, fal sample);

stm32f103rc片内Flash使用FAL库配置说明相关推荐

  1. STM32片内FLASH烧写错误导致ST-LINK烧录不进程序的问题解决过程

    STM32片内FLASH烧写错误导致ST-LINK烧不进程序的问题解决过程 项目及配置描述 这个问题是在做bootloader OTA测试时出现的,其中bootloader由http://iot.rt ...

  2. RT-Thread——STM32——FAL库

    !!! 本文已同步到码云 - 点击此链接获取最新 - 可进入码云提交修改 !!! 概述 本教程主要根据官方推荐的教程进行改编,详细信息请参考FAL软件包 本例程的模板使用通用模板环境搭建里面的模板 R ...

  3. flash读取程序 msp430_MSP430单片机对片内FLASH的读写操作程序范例

    原标题:MSP430单片机对片内FLASH的读写操作程序范例 // 参数: wAddr 为地址 , 范围 0x1000~0xFFFF void ReadFlash(U16 wAddr,U8 *bBuf ...

  4. python turtle库setpos_Python内置海龟(turtle)库绘图命令详解(二)

    继续谈利用海龟库(turtle库)做图.在这篇文章(Python内置海龟(turtle)库绘图命令详解(一))中已经介绍了turtle的一些基本画图命令,包括画布的设计.画笔属性与状态的设置以及画笔的 ...

  5. python语音识别的第三方库_python标准库+内置函数+第三方库: 7.音频处理

    python标准库+内置函数+第三方库 欲善其事,必先利其器 这其器必是python的标准库+内置函数,话说许多第三方库, 也是对标准库的使用,进行封装,使得使用起来更方便. 这些库以使用场景来分类: ...

  6. flash基本操作二-库面板和元件创建

    flash基本操作二-库面板和元件创建 在上一篇文章: flash基本操作中,我们详细讲解了制作逐帧动画的过程.本人最近用flash制作广告,对此非常的感兴趣,在本次的文章当中我们将继续介绍库面板和元 ...

  7. stm32怎么加载字库_如何用STM32的片内Flash存储中文字库

    原标题:如何用STM32的片内Flash存储中文字库 在 中,成本往往是敏感的,如果你的Flash足够大,就可以省去片外Flash,我用结构体实现了该功能,并分享给广大网友,最后附有下载链接. 在fo ...

  8. STM32F1_片内FLASH编程

    前言 今天总结"STM32F103  片内FLASH编程",对于学习编程的人来说"FLASH"这个词肯定很熟悉,因为FLASH主要用于存储数据.对于STM32来 ...

  9. GD32片内flash读写数据

    GD32现在越来越火,应用也越来越广泛.我们在开发项目的时候,总会有需要掉电存储一些配置信息的时候,但是使用外挂flash.或者EEPROM,或多或少都会占用一些外围接口或增加一定的成本.于是,直接将 ...

  10. STM32F103VET6利用片内FLASH虚拟U盘,使用文件复制方式实现IAP

    在原子论坛偶尔搜到一篇 利用STM32片内FLASH虚拟U盘,使用文件复制方式实现IAP的帖子http://www.openedv.com/forum.php?mod=viewthread&t ...

最新文章

  1. 什么?神经网络还能求解高级数学方程?
  2. Amazon 63岁员工因算法评分太低被自动开除!
  3. python能做什么项目好-python能做什么项目
  4. vue 中实现异步加载模块
  5. 人工智能时代的产品思维(2C)
  6. 写代码水平的几个发展阶段
  7. 边缘计算如何实现海量IoT数据就地处理
  8. kettle 调用存储过程_Mysql存储过程
  9. ajax走到error_jQuery中ajax 跳入error的原因总结
  10. 【Flink】FLink 写入kafka 中关于 Exactly-Once 的一些思考
  11. Flutter实战一Flutter聊天应用(十五)
  12. VirusTotal 共享8000万勒索软件样本分析数据库
  13. K8s(3):资源清单
  14. android 应用开启以后,动态检测并或者相机权限。
  15. PLog——一个简洁快速,小而美的C++异步日志库
  16. 华为服务器电源性能指标,华为服务器可服务性设计介绍-电源篇.PDF
  17. python排名上升_TIOBE 9月排名: C ++下降,Python夺得第三名
  18. 磁盘与文件系统管理详解
  19. Unet(pytorch)——制作自己的数据集(二分类)
  20. Libvirt网络管理

热门文章

  1. Android dex2oat 导致编译失败:ERROR: Dex2oat failed to compile a boot image
  2. STM32入门系列-STM32外设地址映射
  3. matlab 对角线相加,求和、转置和对角线 - MATLAB 系统中文帮助手册
  4. B站手机缓存的视频在电脑上转换观看
  5. 计算机拒绝访问移动硬盘,移动硬盘无法访问拒绝访问,教你移动硬盘无法访问拒绝访问怎么办...
  6. 小森林顺序_电影:《小森林》两部
  7. 去哪儿能找到那种直接翻译好的外文文献去阅读呢?
  8. 形容谣言的四字词语_四字词语加解释大全
  9. html文字段落i排版,i排版怎么修改字体 字体排版详细介绍
  10. frida-trace入门