IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> stm32f103的 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_FLASH
    	bool "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移植成功了
在这里插入图片描述

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-26 12:16:06  更:2021-08-26 12:16:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/21 3:29:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码