RT_thread挂载W25Q文件系统


官网文档
https://www.rtthread.org/document/site/rtthreadstudio/drivers/spi/rtthreadstudio-spi/

SPI开发流程

从官网中可以找到
在这里插入图片描述

一、新建一个RT_Thread工程

用RT_thread Studio工具创建一个工程,我这个使用的是ART_PI
在这里插入图片描述
然后在main函数中
修改为下面的代码,也就是注释掉 //LOG_D(“Hello RT-Thread!”);
在这里插入图片描述

二、配置组件和驱动

把下面这几个组件都开启
在这里插入图片描述
详细配置
在这里插入图片描述

三、原理图

在这里插入图片描述
分别对应的是

SPI1_NSS PA4
SPI1_MOSI PB5
SPI1_MISO PG9
SPI1_SCK PA5

四、配置宏

1.定义SPI总线相关的宏

在这里插入图片描述

2.打开HAL库函数对SPI总线的支持

在这里插入图片描述

五、用CubeMX生成SPI初始化函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后生成代码
找到SPI初始化部分

/**
* @brief SPI MSP Initialization
* This function configures the hardware resources used in this example
* @param hspi: SPI handle pointer
* @retval None
*/
void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};
  if(hspi->Instance==SPI1)
  {
  /* USER CODE BEGIN SPI1_MspInit 0 */

  /* USER CODE END SPI1_MspInit 0 */
    /* Peripheral clock enable */
    __HAL_RCC_SPI1_CLK_ENABLE();

    __HAL_RCC_GPIOB_CLK_ENABLE();
    __HAL_RCC_GPIOG_CLK_ENABLE();
    __HAL_RCC_GPIOA_CLK_ENABLE();
    /**SPI1 GPIO Configuration
    PB5     ------> SPI1_MOSI
    PG9     ------> SPI1_MISO
    PA5     ------> SPI1_SCK
    */
    GPIO_InitStruct.Pin = GPIO_PIN_5;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = GPIO_PIN_9;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
    HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = GPIO_PIN_5;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  /* USER CODE BEGIN SPI1_MspInit 1 */

  /* USER CODE END SPI1_MspInit 1 */
  }

}

六.添加SPI总线

1.添加SPI初始化

将上一步配置的SPI初始化代码添加到board.c下面
在这里插入图片描述

2.执行程序

编译,下载
此时SPI1添加成功
在这里插入图片描述

七、添加SPI从设备(W25Q)

1.新建W25Q文件

在工程下新建两个文件,别忘了添加头文件路径
在这里插入图片描述

2.编写代码

int rt_spi_opt_w25Q128_init(void)
{
  /* 向系统注册SPI1总线上spi10从设备 */
    rt_hw_spi_device_attach("spi1", "spi10", GPIOA, GPIO_PIN_4);   // W25Q64的片选连接在PA4上
    return 0;
  }

3.编译,下载

在这里插入图片描述
设备挂载成功

4.测试

可以执行下面的代码去测试设备是否挂载成功。
在这里插入图片描述

八、挂载文件系统

1.将W25Q抽象为块设备

int rt_spi_opt_w25Q128_init(void)
{
  /* 向系统注册SPI1总线上spi10从设备 */
    rt_hw_spi_device_attach("spi1", "spi10", GPIOA, GPIO_PIN_4);   // W25Q64的片选连接在PA4上
   // return 0;
    /* 将w25Q128抽象为块设备,以便后续挂载文件系统 */
    if(rt_sfud_flash_probe("w25Q128", "spi10"))
    {
        rt_kprintf("rt sfud flash probe success\r\n");
        return RT_EOK;
    }else {
        rt_kprintf("rt sfud flash probe fail\r\n");
        return -RT_ERROR;
    }

}

2.挂载文件系统

/* 挂载文件系统 */
int dfs_mount_init(void)
{
  /* 指定格式化的文件系统,即将w25Q128格式化为ELM文件系统 */
    dfs_mkfs("elm","w25Q128");
    /* 挂载文件系统 */
    if(dfs_mount("w25Q128","/","elm",0,0) == 0)
    {
        rt_kprintf("dfs_mount success\r\n");
                return RT_EOK;
    }
    else {
        rt_kprintf("dfs_mount fail\r\n");
        return -RT_ERROR;
    }
}
/* 系统启动时自动执行 */
INIT_ENV_EXPORT(dfs_mount_init);   // 初始化执行顺序在注册flash之后

注意
程序设置自启动的规则
在这里插入图片描述

详细文档:程序自启

3.编译,下载

在这里插入图片描述
挂载文件系统成功。

九、操作

1.查看所有命令

help

原来系统的命令
在这里插入图片描述
新增的文件系统的命令
在这里插入图片描述

2.列出文件目录

在这里插入图片描述

3.创建文件夹

在这里插入图片描述

4.新建文件

在这里插入图片描述

5.查看文件

在这里插入图片描述

6.删除文件

在这里插入图片描述

参考文档

挂载文件系统:https://www.cnblogs.com/Raowz/p/13069061.html
操作文件系统:https://blog.csdn.net/ylzmm/article/details/103088146
官方挂载文档:https://www.rt-thread.org/document/site/rtthreadstudio/drivers/spi/rtthread-studio-spi/
官方操作文档:https://www.rt-thread.org/document/site/programmingmanual/filesystem/filesystem/
文件系统应用:https://www.rt-thread.org/document/site/applicationnote/components/dfs/an0012-dfs/

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值