电子产业一站式赋能平台

PCB联盟网

搜索
查看: 2661|回复: 3
收起左侧

基于 RT-Thread Studio 的 SPI 驱动开发文档

[复制链接]

131

主题

512

帖子

1666

积分

三级会员

Rank: 3Rank: 3

积分
1666
发表于 2021-4-10 11:18:49 | 显示全部楼层 |阅读模式
基于 RT-Thread Studio 的 SPI 驱动开发文档

简介

SPI 是一种高速、全双工、同步串行通信总线,常用于 MCU 与数字芯片之间的短距离通讯。RT-Thread 的 SFUD 组件,RW007 WIFI 模块均使用到了 SPI 驱动。下面将基于 STM32l475-atk-pandora 开发板,讲解基于 RT-Thread Studio 开发 SPI 驱动。
SPI 设备驱动的开发可总结为如下:
  • 新建 RT-Thread 完整版项目
  • 打开 SPI 设备驱动框架
  • 定义 SPI 总线相关的宏
  • 打开 HAL 库函数对 SPI 总线的支持
  • 复制 SPI 引脚初始化函数到工程
更多 SPI 总线的配置及添加步骤也可以参考相应工程文件 board.h 中对 SPI 总线部分的描述。
新建 RT-Thread 项目

使用 RT-Thread Studio 新建基于 v4.0.2 的工程,界面如下图所示

配置过程可总结为以下步骤:
  • 定义自己的工程名及工程生成文件的存放路径
  • 选择 基于芯片 创建工程,选择的 RT-Thread 版本为 v4.0.2
  • 选择厂商及芯片型号
  • 配置串口信息
  • 配置调试器信息
工程配置完成后点击下方的 完成 按钮即可创建 RT-Thread 的工程。
打开 SPI 设备驱动框架

在 RT-Thread Setting 文件中借助图形化配置工具打开软件 SPI 的驱动框架,如下图所示

左键单击即可开启 SPI 驱动框架(组件开启,相应的图标会高亮),在该选项上右键,可查看 SPI 的 详细配置,具体配置路径如下所示
RT-Thread Setting----组件--------设备驱动程序------------使用 SPI 总线/设备驱动程序配置结果如下图所示

定义 SPI 总线相关的宏

在 board.h 文件中定义 SPI 总线相关的宏,本例中使用 SPI3 总线,只需定义如下宏即可
#define BSP_USING_SPI3打开 HAL 库对 SPI 的支持

在 stm32xxxx_hal_config.h 文件中打开对 SPI 的支持,也就是取消掉 HAL_SPI_MODULE_ENABLED 这个宏定义的注释,如下所示:
#define HAL_SPI_MODULE_ENABLED初始化引脚和时钟

定义了 BSP_USING_SPI3 宏之后,drv_spi.c 文件就会参与编译,该文件只是配置了 SPI 的工作方式和传输函数,具体 SPI 外设的时钟和引脚的初始化需要借助 STM32CubeMx 生成的代码。
例如 stm32l475-atk-pandora 开发板的 SPI3 外设连接了一个 LCD 屏幕,所以需要将 CubeMx 生成的 SPI3 的初始化代码(一般在 stm32_xxxx_hal_msp.c 文件中)复制到自己工程的 board.c 文件的末尾,使之参与编译,如下所示
void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi){    GPIO_InitTypeDef GPIO_InitStruct = {0};    if(hspi->Instance == SPI3)    {        /* USER CODE BEGIN SPI3_MspInit 0 */        /* USER CODE END SPI3_MspInit 0 */        /* Peripheral clock enable */        __HAL_RCC_SPI3_CLK_ENABLE();        __HAL_RCC_GPIOC_CLK_ENABLE();        __HAL_RCC_GPIOB_CLK_ENABLE();        /**SPI3 GPIO Configuration        PC11     ------> SPI3_MISO        PB3 (JTDO-TRACESWO)     ------> SPI3_SCK        PB5     ------> SPI3_MOSI        */        GPIO_InitStruct.Pin = GPIO_PIN_11;        GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;        GPIO_InitStruct.Pull = GPIO_NOPULL;        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;        GPIO_InitStruct.Alternate = GPIO_AF6_SPI3;        HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);        GPIO_InitStruct.Pin = GPIO_PIN_3 | 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_AF6_SPI3;        HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);        /* USER CODE BEGIN SPI3_MspInit 1 */        /* USER CODE END SPI3_MspInit 1 */    }}如果需要注册更多的 SPI 总线设备,只需参考 board.h 文件中 SPI 相关的宏定义并拷贝引脚初始化函数即可。
SPI 总线的使用

编译并下载程序输入 list_device 测试命令可以看到 SPI 总线设备已经成功注册到系统中了,如下图所示

回复

使用道具 举报

131

主题

512

帖子

1666

积分

三级会员

Rank: 3Rank: 3

积分
1666
发表于 2021-4-10 11:19:12 | 显示全部楼层
需要做PCB线路板的可以联系我

13651479995
回复 支持 反对

使用道具 举报

3

主题

2721

帖子

3052

积分

四级会员

Rank: 4

积分
3052
发表于 2021-6-4 13:44:15 | 显示全部楼层
11111111111111111111111111
回复 支持 反对

使用道具 举报

lyl

1

主题

1119

帖子

3525

积分

四级会员

Rank: 4

积分
3525
发表于 2021-6-15 08:41:46 | 显示全部楼层
资料很好,学习学习
回复 支持 反对

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条


联系客服 关注微信 下载APP 返回顶部 返回列表