RT-Thread Studio学习记录(三)SFUD挂载W25QXX使用FAL和EasyFlash_rtthread w25q

stm32f1xx_hal_conf_bak.h中使能SPI模块(不知此步是否为必须)
在这里插入图片描述
打开STM32 CubeMX,配置SPI,配置mode,定义使用的引脚
配置其他参数
在这里插入图片描述
生成后关闭CubeMX。重新编译。
3.w25qxx.c文件编写

/\*
 \* Copyright (c) 2006-2021, RT-Thread Development Team
 \*
 \* SPDX-License-Identifier: Apache-2.0
 \*
 \* Change Logs:
 \* Date Author Notes
 \* 2024-02-23 admin the first version
 \*/

/\*
 \* 程序清单:这是一个 SPI 设备使用例程
 \* 例程导出了 spi\_w25q\_sample 命令到控制终端
 \* 命令调用格式:spi\_w25q\_sample spi10
 \* 命令解释:命令第二个参数是要使用的SPI设备名称,为空则使用默认的SPI设备
 \* 程序功能:通过SPI设备读取 w25q 的 ID 数据
\*/

#include <rtthread.h>
#include <rtdevice.h>
#include <w25qxx.h>
#include "drv\_spi.h"
#include "spi\_flash.h"
#include "spi\_flash\_sfud.h"
#include <define\_common.h>
#include <drv\_common.h>


struct rt\_spi\_device \*spi_device;

static int rt\_hw\_spi\_flash\_init(void)
{
    \_\_HAL\_RCC\_GPIOB\_CLK\_ENABLE();
    rt\_hw\_spi\_device\_attach("spi2", W25Q_SPI_DEVICE_NAME, GPIOB, GPIO_PIN_12);
    if (RT_NULL == rt\_sfud\_flash\_probe("W25Q128", W25Q_SPI_DEVICE_NAME))
    {
        return -RT_ERROR;
    };
    return RT_EOK;
}
void spi\_w25q\_sample(int argc, char \*argv[])
{
    struct rt\_spi\_device \*spi_dev_w25q;
    char name[RT_NAME_MAX];
    rt\_uint8\_t w25x_read_id = 0x90;
    rt\_uint8\_t id[5] = {0};
    rt\_hw\_spi\_flash\_init();
    if (argc == 2)
    {
        rt\_strncpy(name, argv[1], RT_NAME_MAX);
    }
    else
    {
        rt\_strncpy(name, W25Q_SPI_DEVICE_NAME, RT_NAME_MAX);
    }

    /\* 查找 spi 设备获取设备句柄 \*/
    spi_dev_w25q = (struct rt\_spi\_device \*)rt\_device\_find(name);
    if (!spi_dev_w25q)
    {
        rt\_kprintf("spi sample run failed! can't find %s device!\n", name);
    }
    else
    {
        /\* 方式1:使用 rt\_spi\_send\_then\_recv()发送命令读取ID \*/
        rt\_spi\_send\_then\_recv(spi_dev_w25q, &w25x_read_id, 1, id, 5);
        rt\_kprintf("use rt\_spi\_send\_then\_recv() read w25q ID is:%x%x\n", id[3], id[4]);

        /\* 方式2:使用 rt\_spi\_transfer\_message()发送命令读取ID \*/
        struct rt\_spi\_message msg1, msg2;

        msg1.send_buf   = &w25x_read_id;
        msg1.recv_buf   = RT_NULL;
        msg1.length     = 1;
        msg1.cs_take    = 1;
        msg1.cs_release = 0;
        msg1.next       = &msg2;

        msg2.send_buf   = RT_NULL;
        msg2.recv_buf   = id;
        msg2.length     = 5;
        msg2.cs_take    = 0;
        msg2.cs_release = 1;
        msg2.next       = RT_NULL;

        rt\_spi\_transfer\_message(spi_dev_w25q, &msg1);
        rt\_kprintf("use rt\_spi\_transfer\_message() read w25q ID is:%x%x\n", id[3], id[4]);

    }
}
/\* 导出到 msh 命令列表中 \*/
MSH\_CMD\_EXPORT(spi_w25q_sample, spi w25q sample);


w25qxx.h文件代码

/\*
 \* Copyright (c) 2006-2021, RT-Thread Development Team
 \*
 \* SPDX-License-Identifier: Apache-2.0
 \*
 \* Change Logs:
 \* Date Author Notes
 \* 2024-02-23 admin the first version
 \*/
#ifndef APPLICATIONS\_W25QXX\_W25QXX\_H\_
#define APPLICATIONS\_W25QXX\_W25QXX\_H\_
#include <define\_common.h>

void spi\_w25q\_sample(int argc, char \*argv[]);
#endif /\* APPLICATIONS\_W25QXX\_W25QXX\_H\_ \*/


在main函数中调用

int main(void)
{
    led\_init();
    uart\_init();
    spi\_w25q\_sample(1, RT_NULL);
}

下载运行后课打印w25qxx已挂载,并读出ID号

三、使用EasyFlash软件包

1.打开RT-Thread Settings,添加软件包,搜索“EasyFlash”并添加。
在这里插入图片描述
点击编译出现50多个错误。(系统版本为4.1.1)。
2.在组件中启用FAL
在这里插入图片描述
3.在项目中添加ef_fal_port.c和fal_cfg.h
4.main函数编写

/\*
 \* Copyright (c) 2006-2024, RT-Thread Development Team
 \*
 \* SPDX-License-Identifier: Apache-2.0
 \*
 \* Change Logs:
 \* Date Author Notes
 \* 2024-02-21 RT-Thread first version
 \*/

#include <rtthread.h>
#include <rtdevice.h>
**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数嵌入式工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

![img](https://img-blog.csdnimg.cn/img_convert/0cbeab6999ceabf971b4fab07d2a28e9.png)

![img](https://img-blog.csdnimg.cn/img_convert/3fd1dff6bafe1c01e75101efa482b0cd.jpeg)

![img](https://img-blog.csdnimg.cn/img_convert/2b8bff559a9f0ff605636545a769f3c8.png)

 **既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**

![img](https://img-blog.csdnimg.cn/img_convert/814788f414f64bbf79be3c50faa53f9c.png)

![img](https://img-blog.csdnimg.cn/img_convert/723d774d60492fab58be257e3b1e6f52.png)

 

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以+V:Vip1104z获取!!! (备注:嵌入式)**

<img src="https://img-community.csdnimg.cn/images/73bb5de17851459088c6af944156ee24.jpg" alt="img" style="zoom: 67%;" />



# 最后

**资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~**

**你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!**

src="https://img-community.csdnimg.cn/images/73bb5de17851459088c6af944156ee24.jpg" alt="img" style="zoom: 67%;" />



# 最后

**资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~**

**你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!**

**[更多资料点击此处获qu!!](https://bbs.csdn.net/topics/618376385)**
  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RT-Thread是一个实时操作系统,可以在不同的硬件平台上运行。在使用RT-Thread操作系统时,可以使用SD卡接口实现对SD卡数据的读和写。 具体实现的步骤如下: 1. 创建基本工程,包括创建Bootloader和相关组件的配置。 2. 在STM32F4芯片系列中,只支持SD 2.0协议,即SD和SDHC卡。不支持SDXC协议,同时也只支持读取512大小的数据块。因此,在选择SD卡时需要注意其兼容性和数据块大小的设置。 3. SD卡具有物理结构,需要了解其具体规格和连接方式,以确保正确的使用和操作。 4. 在使用RT-Thread操作系统时,可以根据具体的开发板和硬件平台选择合适的驱动和框架,如使用FSMC总线驱动TFT显示屏、SPI驱动W25Qxx Nor flash等。 总之,RT-Thread操作系统提供了对SD卡的支持,可以通过配置和选择合适的驱动和框架来实现对SD卡数据的读和写操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [RT-Thread Studio驱动SD卡](https://blog.csdn.net/weixin_37875741/article/details/109733737)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [rt-thread驱动篇(07)---STM32F429单片机SD卡驱动添加](https://blog.csdn.net/m0_37845735/article/details/124548387)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [RT-Thread1.2.0.rar_STM32 RT-Thread_STM32 SPI TF卡_STM32的SDIO例程_s](https://download.csdn.net/download/weixin_42659252/86145822)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值