stm32f103的 RT-Thread3.1.3移植SFUD+FAL+EasyFlash

编程入门 行业动态 更新时间:2024-10-25 02:25:25

stm32f103的 <a href=https://www.elefans.com/category/jswz/34/1767001.html style=RT-Thread3.1.3移植SFUD+FAL+EasyFlash"/>

stm32f103的 RT-Thread3.1.3移植SFUD+FAL+EasyFlash

学习了有两个星期的RTThread了,有些组件的移植操作还有有必要进行一下记录,1是为自己的学习过程进行记录,2是分享给大家便于大家解决问题,本文记录的就是移植SFUD+FAL+EasyFlash的操作过程,绝对的详细。


本人声明,操作都是本人移植操作,非转载文章,根据本文移植过程出现的问题可以尝试联系博主,感谢支持


环境:Keil5,ENV工具,STM32F103VET6,STM32CubeMX,stm32f103_hal_1.7.0




只要会制作BSP模板,都可以根据本文进行移植,同时博主也发过制作基于RT-Thread3.1.3系统的BSP制作过程,连接如下 STM32F103系列移植rtthread3.1.3完整版详细过程


1.移植SFUD

1.1打开SPI

想要移植SFUD首先得打开SPI的驱动,我们进入BSP模板的**\board\CubeMX_Config**路径下通过打开CubeMX_Config.ioc(需要下载STM32CubeMX)进行芯片配置:

在此我打开了SPI1,因为我的开发板没有搭载外部Flash所以根据引脚外部连接,能够外接的SPI就是在我所用的开发板上一直有SPI1,如果大家板子上搭载了外部flash,请根据原理图进行打开。

打开以后软件中不报错就OK了,如果报错,适当调整就可以了。

随后更新代码就可以了,操作如下:
记住一定要选择HAL库1.7.0版本,不然RTT系统会报错。

生成代码以后保留以下4个文件即可



1.2修改Kongfig

打开BSP模板目录下的 board 文件夹,打开 Kongfig 文件进行修改
保证以下数据都是 SPI1 即可,修改以后保存退出。



1.3ENV配置

打开ENV工具进入到BSP文件路径下输入menuconfig进入配置

进入以下选项打开SPI1

接下来打开SUFD组件
进入以下路径,打开如下选项进行配置。完成以后退出保存

pkgs --update升级软件包后,scons --target=mdk5更新MDK5工程

1.4修改代码

打开更新的MDK5工程
首先请先注释掉这一条语句

1、sfud_cfg.h

这里写的是设备的数量以信息,可以挂载多个设备,根据情况而定

2、sfud_flash_def.h

这里记录了支持SFDP的芯片信息,如果自己测试的芯片不属于其中的,自己按照信息添加,这里我不过多赘述:

3、main.c

在主函数中添加初始化过程,在spi1上挂载设备(注:如果是使用的SPI2,就见spi1改成spi2)

#include "drv_spi.h"
#include "spi_flash_sfud.h"static int rt_hw_spi_flash_init(void)
{__HAL_RCC_GPIOB_CLK_ENABLE();rt_hw_spi_device_attach("spi1", "spi10", GPIOB, GPIO_PIN_5);if (RT_NULL == rt_sfud_flash_probe("W25Q64DW", "spi10"))
{return -RT_ERROR;
};return RT_EOK;
}INIT_COMPONENT_EXPORT(rt_hw_spi_flash_init);


现在SFUD的移植就基本完成了,接下来烧录程序进行测试

1.5测试


可以看到测试过程如下,说明SFUD移植成功


2.移植FAL

2.1修改Kconfig文件

依旧是那个文件,这里我就不再提在哪了
添加如下信息打开片上flash的支持,修改完成以后退出保存

    config BSP_USING_ON_CHIP_FLASHbool "Enable ON_CHIP_FLASH"default y

2.2ENV配置

依旧是进入路径输入menuconfig
进入以下选项打开片上flash支持

接下来打开fal组件

进行如下配置:

随后退出报错,pkgs --update更新软件包,先别更新MDK工程
在这得移动文件,进入到下载好的软件包路径下,进入到如下路径,fal_cfg.h复制到软件包的inc文件夹,将fal_flash_sfud_port.c移动到src文件夹内

此时就可以更新MDK工程了

2.3修改代码

打开更新好的MDK文件,主要修改的文件有如下:

1、fal_flash_sfud_port.c

设备名称以及参数进行修改
设备名称注意使用移植SFUD时使用的名称

2、fal_cfg.h

设备名称对应,分区按照规格修改即可

3、rtconfig.h

添加宏定义:FAL_USING_SFUD_PORT

此时编译会发现没有报错了,但是,我们需要在主函数里对fal进行初始化

4、mian.c

添加头文件,调用初始化函数就OK了

最后编译烧录,测试程序

2.4测试

经过如下指令测试,结果如图所示即移植成功


3.移植Easyflash

3.1ENV配置

依旧是打开ENV进行配置,输入menuconfig,进入如下选项打开easyflash

对easyflash进行如下配置,主要修改擦以及写的粒度就好了,256k容量以上的stm32f103是2048,以下的是1024,写的粒度就选择F1系列就行了

退出保存以后,pkgs --update升级软件包
再将软件包的ports文件夹内ef_fal_port.c复制粘贴到src文件夹
随后更新MDK工程

3.2修改代码

打开更新好的MDK工程

1、ef_fal_port.c

修改easyflash的名称,保存的变量修改成一个,用于测试

2、fal_cfg.h

由于easyflash是用的fal的接口,所以在片上flash开辟了easyflash的保存区

3、mian.c

因为添加了测试代码,比较多,所以直接写在这里了

#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>
#include "drv_spi.h"
#include "spi_flash_sfud.h"
#include "fal.h"
#include <easyflash.h>void thread_test_entry(void);
int Reboot_time;static int rt_hw_spi_flash_init(void)
{__HAL_RCC_GPIOB_CLK_ENABLE();rt_hw_spi_device_attach("spi1", "spi10", GPIOB, GPIO_PIN_5);if (RT_NULL == rt_sfud_flash_probe("W25Q64DW", "spi10")){return -RT_ERROR;};return RT_EOK;
}INIT_COMPONENT_EXPORT(rt_hw_spi_flash_init);int main(void)
{int count = 1;thread_test_entry();while (count++){rt_thread_mdelay(500);}return RT_EOK;
}void thread_test_entry(void)
{fal_init();if(easyflash_init()==EF_NO_ERR){ef_get_env_blob("reboot_time",&Reboot_time,4,NULL);}Reboot_time++;ef_set_env_blob("reboot_time",&Reboot_time,4);}void print_reboot(void)
{rt_kprintf("Reboot_Time is %d\n", Reboot_time);
}MSH_CMD_EXPORT(print_reboot, Print reboot);

3.3测试

上电之后会打印初始化信息

第一次输出reboot_time变量

重启之后重新上电,再次输出easyflash保存的变量,发现没有清除,证明easflash移植成功了

更多推荐

stm32f103的 RT-Thread3.1.3移植SFUD+FAL+EasyFlash

本文发布于:2023-07-27 22:20:53,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1231631.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:RT   EasyFlash   FAL   SFUD

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!