RT-Thread基于STM32 HAL库的SPI设备驱动

1.构造数据结构
1.1.struct stm32_hw_spi_cs
在这里插入图片描述
1.2.struct stm32_spi_config
在这里插入图片描述
1.3.struct stm32_spi_device
在这里插入图片描述
1.4.struct stm32_spi
在这里插入图片描述
2.驱动函数
2.1.STM32 SPI初始化
判断STM32 SPI驱动指针是否为空,判断STM32 SPI配置指针是否为空。
根据STM32 SPI配置信息(主机或者从机、三线或者四线、数据宽度是8位还是16位、SPI总线空闲极性是高电平还是低电平、数据是在上升沿还是在下降沿发送/接收、片选信号是由软件控制还是由硬件控制、SPI总线数据传输速率配置、传输数据流首位是最高位还是最低位、是否选择crc校验等)配置stm32 spi硬件相关寄存器(由STM32 SPI驱动对象继承的硬件SPI寄存器实例),即通过操作寄存器最终实际执行配置信息。
根据STM32 SPI DMA配置信息(SPI发送是否使用DMA、SPI接收是否使用DMA)配置stm32 DMA硬件相关寄存器,DMA发送/接收完成指针连接到SPI发送/接收处理函数。
使能STM32 SPI外设(总线)
2.2.STM32 SPI数据传输
判断spi设备对象是否为空,判断spi设备总线对象是否为空,判断SPI设备总线对象的用户数据是否为空,判断spi消息对象是否有空。
根据spi总线指针计算出stm32 SPI对象的首地址。
根据spi消息对象信息设置STM32 SPI片选信号。
调用STM32 SPI数据传输函数(或STM32 DMA传输函数)把消息对象要求发送、接收、发送同时接收的数据通过SPI总线传输完成。
等待spi总线重新进入准备就绪状态。
根据spi消息对象信息释放STM32 SPI片选信号。
2.3.STM32 SPI总线配置
判断spi设备对象是否为空,判断SPI配置对象是否为空。
根据spi总线指针计算出stm32 SPI对象的首地址。
调用STM32 SPI初始化函数,根据SPI配置对象信息对STM32 SPI初始化
2.4.STM32 SPI总线操作初始化

static const struct rt_spi_ops stm_spi_ops =
{
    .configure = spi_configure, // STM32 SPI总线配置
    .xfer = spixfer,           // STM32 SPI数据传输
};

2.5.STM32 SPI硬件总线初始化
根据stm32 SPI配置信息与驱动头文件宏定义,配置stm32 SPI总线容器的配置信息以及dma的配置信息。
stm32 SPI总线容器的SPI总线对象注册到SPI总线设备驱动框架当中
2.6.STM32 SPI硬件设备依附(连接SPI总线)
判断STM32 SPI总线名称是否为空,判断STM32 SPI设备名称是否为空
初始化STM32 spi片选引脚端口,并设置为非选中状态。
使SPI设备依附到SPI总线上。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值