rt-thread驱动篇(04)---STM32F429单片机模拟SPI FLASH驱动添加

目录

一、添加驱动

1、新增模拟SPI驱动文件(drv_soft_spi.c/h)

2、新增模拟SPI配置文件(soft_spi_config.h)

二、向工程添加文件

1、修改..\board\Kconfig

2、修改\rt-thread\components\drivers\Kconfig

3、修改..\libraries\HAL_Drivers\SConscript

4、修改..\libraries\HAL_Drivers\drv_config.h

三、使用驱动

1、ENV配置

2、设备初初始化


一、添加驱动

1、新增模拟SPI驱动文件(drv_soft_spi.c/h)

参考drv_spi.c/h,编写模拟SPI驱动

2、新增模拟SPI配置文件(soft_spi_config.h)

拷贝 \libraries\HAL_Drivers\config\f4\spi_config.h,重命令为soft_spi_config.h

#ifndef __SOFT_SPI_CONFIG_H__
#define __SOFT_SPI_CONFIG_H__

#include <rtthread.h>

#ifdef __cplusplus
extern "C" {
#endif

// CS(PG10) SCK(PG12)  MISO(PF8) MOSI(PF9)
#ifdef BSP_USING_SOFT_SPI1
#ifndef SOFT_SPI1_BUS_CONFIG
#define SOFT_SPI1_BUS_CONFIG                             \
    {                                                    \
        .mosi_pin.GPIOx = GPIOF,                         \
		.mosi_pin.GPIO_Pin = GPIO_PIN_9,                 \
		.miso_pin.GPIOx = GPIOF,                         \
		.miso_pin.GPIO_Pin = GPIO_PIN_8,                 \
		.sclk_pin.GPIOx = GPIOG,                         \
		.sclk_pin.GPIO_Pin = GPIO_PIN_12,                \
        .bus_name = "soft_spi1",                         \
    }
#endif /* SOFT_SPI1_BUS_CONFIG */
#endif /* BSP_USING_SOFT_SPI1 */

#ifdef __cplusplus
}
#endif

#endif /*__SPI_CONFIG_H__ */

二、向工程添加文件

1、修改..\board\Kconfig

新增下内容

menu "Onboard Peripheral Drivers"
    ...
    config BSP_USING_SPI_FLASH
        bool "Enable SOFT-SPI FLASH (W25Q64)"
        select BSP_USING_SOFT_SPI
        select RT_USING_SFUD
        select RT_SFUD_USING_SFDP
        default n
   ...

menu "On-chip Peripheral Drivers"
   ...
	menuconfig BSP_USING_SOFT_SPI
        bool "Enable SOFT SPI BUS"
        default n
        select RT_USING_SOFT_SPI
        if BSP_USING_SOFT_SPI
            config BSP_USING_SOFT_SPI1
            bool "Enable SOFT SPI1:CS(PG10) SCK(PG12)  MISO(PF8) MOSI(PF9)"
            default n
        endif
  ...

2、修改\rt-thread\components\drivers\Kconfig

新增如下内容

config RT_USING_SPI
    bool "Using SPI Bus/Device device drivers"
    default n

    if RT_USING_SPI  
        ...
        config RT_USING_SOFT_SPI //新增
                bool "Enable SOFT SPI mode"
                default n
                
                ...

3、修改..\libraries\HAL_Drivers\SConscript

新增如下内容

if GetDepend(['RT_USING_SOFT_SPI']):
    src += ['drv_soft_spi.c']

4、修改..\libraries\HAL_Drivers\drv_config.h

新增如下内容

...
#include "f4/soft_spi_config.h" 
...

三、使用驱动

1、ENV配置

开启模拟SPI

 

开启SFUD组件

2、设备初初始化

spi_flash_init.c中添加如下内容,注册softspi1总线,注册softspi10设备并挂载到softspi1总线上;使能SFUD驱动W25Q64块

#include <rtthread.h>
#include "spi_flash.h"
#include "spi_flash_sfud.h"
#include "drv_soft_spi.h"

#if defined(BSP_USING_SPI_FLASH)
static int rt_hw_spi_flash_init(void)
{
    __HAL_RCC_GPIOG_CLK_ENABLE();
    rt_soft_spi_device_attach("softspi1", "softspi10", GPIOG, GPIO_PIN_10);

    if (RT_NULL == rt_sfud_flash_probe("W25Q64", "softspi10"))
    {
        return -RT_ERROR;
    }

    return RT_EOK;
}
INIT_COMPONENT_EXPORT(rt_hw_spi_flash_init);
#endif
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
您好!对于STM32F429,您可以使用RT-Thread实现SPI模拟。首先,确保您已经在STM32F429上成功搭建了RT-Thread开发环境。 接下来,您需要在RT-Thread的配置文件中启用SPI设备和模拟SPI驱动。您可以通过修改`rtconfig.h`文件来实现。找到以下几行代码并取消注释,以启用SPI模拟SPI驱动: ```c #define RT_USING_SPI #define RT_USING_SPI1 #define RT_USING_SPI2 ... ``` 然后在您的应用程序中使用RT-Thread提供的SPI API来实现模拟SPI。以下是一个简单的示例代码: ```c #include <rtthread.h> #include <rtdevice.h> int main(void) { rt_device_t spi_dev; uint8_t tx_data[2] = {0xAA, 0xBB}; uint8_t rx_data[2] = {0}; spi_dev = rt_device_find("spi1"); // 根据实际情况修改SPI设备名称 if (spi_dev != RT_NULL) { rt_device_open(spi_dev, RT_DEVICE_OFLAG_RDWR); rt_device_control(spi_dev, RT_DEVICE_CTRL_SPI_SET_MODE, (void*)RT_SPI_MODE_0); rt_device_control(spi_dev, RT_DEVICE_CTRL_SPI_SET_BITS_PER_WORD, (void*)RT_SPI_8BITS); rt_device_write(spi_dev, 0, tx_data, 2); rt_device_read(spi_dev, 0, rx_data, 2); rt_device_close(spi_dev); } return 0; } ``` 在这个示例中,我们使用了SPI1设备,并发送了两个字节的数据,然后读取两个字节的响应。您可以根据实际情况修改设备名称、数据以及其他配置参数。 请注意,这只是一个简单的示例,您可能需要根据您的实际需求进行更多的设置和处理。另外,还要确保在RT-Thread的设备管理中正确配置了SPI设备。 希望这能帮到您!如有任何问题,请随时提问。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值