全网最详细STM32在RT_thread中配置spi并成功使用

这篇具有很好参考价值的文章主要介绍了全网最详细STM32在RT_thread中配置spi并成功使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

@[TOC]SPI通信


前言

在自身学习时查找资料,没有一个系统的在RT中实现spi并测试的,都是进行ID的读写简单操作,因此在学习完后准备记录系统的一个学习spi的过程,配有详细源码,看完包会!!!
结合自身学习一步步成功实现spi在w25qxx读写测试

  • 首先讲解spi通信协议
  • rt_thread中配置spi
  • w25q128内存结构与命令
  • spi在w25q128中的使用
  • **测试成功结果**`
    rtthread 使用spi文件系统,笔记,stm32,嵌入式硬件,单片机

一、SPI通信协议

SPI(Serial Peripheral Interface,串行外设接口)是一种高速、全双工、同步通信总线,常用于短距离通讯,主要应用于 EEPROM、FLASH、实时时钟、AD 转换器、还有数字信号处理器和数字信号解码器之间。SPI 一般使用 4 根线通信,如下图所示:
rtthread 使用spi文件系统,笔记,stm32,嵌入式硬件,单片机

  • MOSI –主机输出 / 从机输入数据线(SPI Bus Master Output/Slave Input)。

  • MISO –主机输入 / 从机输出数据线(SPI Bus Master Input/Slave Output)。

  • SCLK –串行时钟线(Serial Clock),主设备输出时钟信号至从设备。

  • CS –从设备选择线 (Chip select)。也叫 SS、CSB、CSN、EN 等,主设备输出片选信号至从设备。
    主设备通过控制 CS 引脚对从设备进行片选,一般为低电平有效。任何时刻,一个 SPI 主设备上只有一个 CS 引脚处于有效状态,与该有效 CS 引脚连接的从设备此时可以与主设备通信。

  • SPI 的传输方式: SPI 总线具有三种传输方式:全双工、单工以及半双工传输方式。
    – 全双工通信: 在任何时刻,主机与从机之间都可以同时进行数据的发送和接收。
    – 单工通信: 在同一时刻,只有一个传输的方向,发送或者是接收。
    – 半双工通信: 在同一时刻,只能为一个方向传输数据。

  • spi工作模式
    rtthread 使用spi文件系统,笔记,stm32,嵌入式硬件,单片机

二、 rt_thread中配置spi

1. spi1总线开放出来

  • STEP 1, open qspi driver framework support in the RT-Thread Settings file
    – 在rt_thread的setting中打开spi

  • STEP 2, define macro related to the qspisuch as #define BSP_USING_QSPI
    – 在board.h文件中spi打开宏定义

  • STEP 3, copy your qspi init function from stm32xxxx_hal_msp.c generated by stm32cubemx to the end of board.c file such as void HAL_QSPI_MspInit(QSPI_HandleTypeDef* hqspi)
    – 在Cubmax中配置void HAL_SPI_MspInit(SPI_HandleTypeDef hspi)*文章来源地址https://www.toymoban.com/news/detail-795503.html

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();
    /**SPI1 GPIO Configuration
    PB3     ------> SPI1_SCK
    PB4     ------> SPI1_MISO
    PB5     ------> SPI1_MOSI
    */
    GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_4|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(GPIOB, &GPIO_InitStruct);

  /* USER CODE BEGIN SPI1_MspInit 1 */

  /* USER CODE END SPI1_MspInit 1 */
  }

}
  • STEP 4, modify your stm32xxxx_hal_config.h file to support qspi peripherals. define macro related to the peripherals such as #define HAL_QSPI_MODULE_ENABLED
    – 在 stm32xxxx_hal_config.h文件中打开#define HAL_QSPI_MODULE_ENABLED宏定义
    rtthread 使用spi文件系统,笔记,stm32,嵌入式硬件,单片机

2. 设备"spi10"挂载到spi1总线上

#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>
#include "W25Q128.h"


struct rt_spi_device *spi_dev;
int w25q_spi_device_init(void)
{
   

    struct rt_spi_configuration cfg;
    __HAL_RCC_GPIOB_CLK_ENABLE();
    //先把设备挂载到总线上
    rt_hw_spi_device_attach("spi1", W25Q_SPI_DEVICE_NAME, GPIOB, GPIO_PIN_14);
    //查找设备
    spi_dev = rt_device_find(W25Q_SPI_DEVICE_NAME);

    cfg.data_width=8;
    cfg.mode=RT_SPI_MASTER|RT_SPI_MODE_0|RT_SPI_MSB;
    cfg.max_hz= 20 * 1000 *1000; /* 20M */

到了这里,关于全网最详细STM32在RT_thread中配置spi并成功使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用RT-Thread Studio搭配STM32CubeMX新建RT-Thread项目

    STM32CubeMX下载 RT-Thread Studio下载 安装好RT-Thread Studio后,先打开RT-Thread SDK管理器确认有没有自己MCU需要的SDK包,直接安装好之后里面是有STM32F1系列的SDK包,其他的需要自己安装。 之后点击文件→新建→RT-Thread项目,根据自己需要配置好后点击完成就会生成RT-Thread项目。 新建项

    2024年02月11日
    浏览(40)
  • 【STM32&RT-Thread零基础入门】8. 基于 CubeMX 移植 RT-Thread Nano

    硬件:STM32F103ZET6、ST-LINK、usb转串口工具、4个LED灯、1个蜂鸣器、4个1k电阻、2个按键、面包板、杜邦线 利用RT_Thread操作系统实现三种不同的LED等闪烁 提示:以下是本篇文章正文内容,下面案例可供参考 cubemx配置参考教程: 基于 CubeMX 移植 RT-Thread Nano 后面程序所需的引脚 RT

    2024年02月09日
    浏览(36)
  • STM32 + RT-Thread + LwIp + DM9000

    开发板:STM32F103ZET6(战舰) RT-Thread:5.0.0 LwIp:2.1.2 网卡芯片:DM9000 编译环境:keil 我简单了解了一下,在嵌入式中,网络芯片的使用方式大致有三种,如下: (MCU + MAC + PHY) (MUC + MAC) —— PHY MCU —— (MAC + PHY) 注意: 我用括号里面的表示在同一块芯片中 移植 RT-Thread 不是此文

    2024年02月07日
    浏览(40)
  • 【STM32&RT-Thread零基础入门】 4. 线程介绍(理论)

    前文中的最后一个任务发现,一个main()函数很难同时实现按键功能和闪灯功能,就好像人很难同时完成左手画圆右手画方一样,这种情况可以安排一人去画圆、一人去画方,并行进行就很容易了,两人各司其职,互不干扰。 操作系统中,一个线程就像做事的一个人。一个操作

    2024年02月12日
    浏览(30)
  • RT-Thread:STM32实时时钟 RTC开启及应用

    说明: STM32F103/407系列基于 RT-Thread 系统的 RTC 开启及应用 应用流程介绍。 完成以上系统配置,编译无误情况下RTC 就已经开启了。 官方 API 查询地址:https://www.rt-thread.org/document/api/rtc_sample_8c-example.html#a3 1.设置日期:设置系统日期但不修改时间 2.设置时间:设置系统时间但不

    2024年01月17日
    浏览(53)
  • STM32CubeMX+VSCODE+EIDE+RT-THREAD 工程创建

            Eide环境搭建暂且不表,后续补充。主要记录下Vscode环境下 创建Rt-thread工程的过程。分别介绍STM32CubeMX添加rtt支持包的方式和手动添加rtt kernel方式。STM32CubeMX生成工程的时候有\\\"坑\\\",防止下次忘记,方便渡一下有缘人,特此记录。         此工程以创建stm32f405为例

    2024年02月14日
    浏览(39)
  • RT-Thread STM32 GoKit V2.1 开发板BSP说明

    本文档为刘恒为 GoKit V2.1 开发板提供的 BSP (板级支持包) 说明。 主要内容如下: 开发板资源介绍 BSP 快速上手 进阶使用方法 通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。在进阶使用指南章节,将会介绍更多高级功能,帮助开发者利用 RT-

    2024年02月04日
    浏览(32)
  • RT-Thread STM32L433 Ali Starterkit BSP说明

    本文档为STM32L433 Ali Starterkit Kit 提供的 BSP (板级支持包) 说明。 主要内容如下: 开发板资源介绍 BSP 快速上手 进阶使用方法 通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。在进阶使用指南章节,将会介绍更多高级功能,帮助开发者利用 RT-T

    2024年02月05日
    浏览(30)
  • RT-Thread使用PWM实现灯亮度调节——STM32F407

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 RT-Thread使用PWM实现灯亮度调节——STM32F407ZG 作为新入门的嵌入式选手,最近在学习RT-Thread操作系统,鉴于自己健忘的记性,打算记录下来后面好回顾学习。 今天要总结的是RT-Thread使用PWM实现灯亮度调节

    2024年02月15日
    浏览(35)
  • RT-Thread在STM32硬件I2C的踩坑记录

    参考文章: 1.将硬件I2C巧妙地将“嫁接”到RTT原生的模拟I2C驱动框架 2.基于STM32F4平台的硬件I2C驱动实现笔记 3.《rt-thread驱动框架分析》- i2c驱动   最近打算用RT-Thread做一个小demo玩玩,其中需要用I2C通信驱动一个oled屏幕,但是找了一圈也没找到RTT中对硬件I2C的支持方式以及

    2024年02月11日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包