RT_Thread基于STM32F407 FAL组件使用(片内FLASH+W25Q128)

备注:RT_Thread 版本为V4.0.2, 使用芯片型号为STM32F407VGT6,基于官方例程中stm32f407_st_discovery例程实现。

第一部分(片内FLASH)

一、Kconfig配置

因为FAL需要Flash支持,所以要添加如下代码,到board下的kconfig中

	menuconfig BSP_USING_ON_CHIP_FLASH
		bool "Enable on-chip FLASH"
		default n

图1 kconfig配置

二、menuconfig配置

在ENV中进入menuconfig配置界面

在这里插入图片描述
1、进入 → Hardware Drivers Config → On-chip Peripheral Drivers选中Enable on-chip FLASH

在这里插入图片描述

2、进入RT-Thread online packages → system packages选中 fal: Flash Abstraction Layer implement. Manage flash device and partition. —>

在这里插入图片描述

3、进入 fal: Flash Abstraction Layer implement. Manage flash device and partition.中配置版本为最新版本

在这里插入图片描述

4、保存配置后退出并生成新工程(我设置ENV工具退出后自动生成模式,如未设置ENV工具则手动生成工程即可。ENV工具使用配置链接.)

在这里插入图片描述

三、CubMX引脚配置

在打开工程之前还有一步需要配置,即配置相关引脚,官方工程默认的串口USART1使用的是PB6,PB7根据自己电路板更改为适合自己使用的引脚。更改方法为进入stm32f407-st-discovery\board\CubeMX_Config,打开CubeMX配置,更改PA9,PA10(我的板子)为串口引脚,然后点击GENERATE CODE等待完成即可。注意:Cube生成的工程并不是我们要用的工程,我们只调用其生成的底层库。
官方默认配置:

在这里插入图片描述
更改后:

在这里插入图片描述

四、工程内部配置

1、打开project工程,并对target进行配置根据自己所用晶振进行修改:

在这里插入图片描述
选中图中选项可以F12跳到定义:

在这里插入图片描述
添加porting文件夹到工程,其包含fal_cfg.h,为fal配置文件其在stm32f407-st-discovery\packages\fal-v0.5.0\samples文件夹下:

在这里插入图片描述
2、对fal_cfg.h文件进行适配修改

在fal_cfg.h中定义内部FLASH结束地址:

在这里插入图片描述
修改 FAL_FLASH_DEV_TABLE 只保留片内flash参数:

在这里插入图片描述
3、对drv_flash_f4.c进行适配修改

注释掉drv_flash_f4.c中关于具体页读写相关函数(若想要细分之后根据自己FLASH具体情况进行添加):

在这里插入图片描述

4、添加官方例程,并进行适配性修改

官方例程所在位置:

在这里插入图片描述

添加例程到程序中:

在这里插入图片描述

删除多于程序(只保留图中程序),对其进行修改:

在这里插入图片描述

5、最后添加fal_init()进行初始化,并编译工程,下载到芯片

初始化fal_init():

在这里插入图片描述

下载后提示分区信息:

在这里插入图片描述

第二部分(片外FLASH W2Q128)

在上面基础上进行的增加修改。

一、menuconfig配置

1、进入→ RT-Thread Components → Device Drivers配置SPI总线使能

在这里插入图片描述

2、进入 online packages → system packages → fal: Flash Abstraction Layer implement. Manage flash device and partition.使能SFUD设备并更改设备名

在这里插入图片描述

3、进入→ Hardware Drivers Config → On-chip Peripheral Drivers使能SPI总线

在这里插入图片描述

4、进入Hardware Drivers Config → On-chip Peripheral Drivers → Enable SPI BUS使能SPI1总线

在这里插入图片描述

5、保存配置后退出并生成新工程

二、CubeMx配置

1、更改PB3/PB4/PB5为SPI1的SCK/MISO/MOSI引脚(根据自己板子更改合适引脚)

在这里插入图片描述

2、设置PB3/PB4/PB5引脚输出速度为非常高(这是一个坑,官方默认是低则会导致初始化外部flash失败)并重新生成工程

在这里插入图片描述

三、工程内部配置

1、按第一部分四中第1步对工程target进行初步配置

2、修改fal_cfg.h(在第一部分基础上进行的修改)

在这里插入图片描述

3、添加官方例程并进行适配性修改

官方例程所在位置:

在这里插入图片描述

添加到工程中:

在这里插入图片描述
添加程序将设备挂载到SPI总线上,并将其添加到自动初始化列表:

在这里插入图片描述

// 注册 spi 设备
static int rt_hw_spi_flash_init(void)
{
	int err;
    __HAL_RCC_GPIOB_CLK_ENABLE();
    rt_hw_spi_device_attach("spi1", "spi10", GPIOB, GPIO_PIN_0);
    if (RT_NULL == rt_sfud_flash_probe(FAL_USING_NOR_FLASH_DEV_NAME, "spi10"))
    {
        return -RT_ERROR;
    };
    return RT_EOK;
	
}
INIT_COMPONENT_EXPORT(rt_hw_spi_flash_init);

上述函数中rt_hw_spi_device_attach实现了spi10设备的注册,即将spi10挂载到spi1总线上,同时我们可以通过对spi10这个名字访问W25Q128设备。
rt_sfud_flash_probe是必须的,通过读取sfud信息,知道了它是一个spi flash设备,它的容量,擦写大小等。并将W25Q128设备的解析为块设备(Block Device)。

4、最后编译工程并下载到芯片

在这里插入图片描述

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值