打印
[应用相关]

HAL库开发教程(七)—SPI使用

[复制链接]
1344|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本文主要介绍STM32_HAL库开发中SPI通信的使用。

一、开发步骤
1.STM32CubeMX配置
在左侧引脚配置处勾选SPI进行配置
在SPI模式处勾选“Full-Duplex”选择全双工模式
在SPI参数配置处进行参数配置:SPI时钟、SPI数据参数以及勾选”NVIC Settings”使能中断

使用特权

评论回复
沙发
梅花香自123|  楼主 | 2021-9-28 21:49 | 只看该作者

使用特权

评论回复
板凳
梅花香自123|  楼主 | 2021-9-28 21:50 | 只看该作者
2.SPI读写函数
uint8_t SPI1_ReadWriteByte(uint8_t TxData)//发送一个字节,并从寄存器返回一个字节
{
        uint8_t Rxdata;
        HAL_SPI_TransmitReceive(&hspi1, &TxData, &Rxdata, 1, 1000);      
        return Rxdata;                              
}

使用特权

评论回复
地板
梅花香自123|  楼主 | 2021-9-28 21:51 | 只看该作者
3.通信读功能函数
void SPI_Read(uint8_t* pBuffer, uint32_t ReadAddr, uint16_t NumByteToRead)   
{
        uint16_t i;
       
        CS(0);
        SPI1_ReadWriteByte((uint8_t)((ReadAddr) >> 16));   //·写入目标地址   
        SPI1_ReadWriteByte((uint8_t)((ReadAddr) >> 8));   
        SPI1_ReadWriteByte((uint8_t)ReadAddr);   
        for (i = 0; i < NumByteToRead; i++)
        {
                pBuffer[i]=SPI1_ReadWriteByte(0XFF);    //循环读入字节数据  
        }       
        CS(1);
}

使用特权

评论回复
5
梅花香自123|  楼主 | 2021-9-28 21:51 | 只看该作者
4.通信写功能函数
void SPI _Write (uint8_t* pBuffer, uint32_t WriteAddr, uint16_t NumByteToWrite)
{
        uint16_t i;

    CS(0);
    SPI1_ReadWriteByte((uint8_t)((WriteAddr) >> 16)); //写入的目标地址   
    SPI1_ReadWriteByte((uint8_t)((WriteAddr) >> 8));   
    SPI1_ReadWriteByte((uint8_t)WriteAddr);   
    for (i = 0; i < NumByteToWrite; i++)
        SPI1_ReadWriteByte(pBuffer[i]);//循环写入字节数据  
        CS(1);
}

使用特权

评论回复
6
梅花香自123|  楼主 | 2021-9-28 21:52 | 只看该作者
二、主要函数接口
1.HAL库SPI传送接收函数
HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout)
HAL库封装的SPI读取接口函数。
参数:SPI号、目标数据地址、接收数据地址、数据长度、超时时间。

使用特权

评论回复
7
梅花香自123|  楼主 | 2021-9-28 21:52 | 只看该作者
2.SPI读功能函数
void SPI_Read(uint8_t* pBuffer, uint32_t ReadAddr, uint16_t NumByteToRead)
从目标地址读取指定长度的数据
参数:数据地址、目标读取地址、读取数据长度。

使用特权

评论回复
8
梅花香自123|  楼主 | 2021-9-28 21:53 | 只看该作者
3.SPI写功能函数
void SPI _Write (uint8_t* pBuffer, uint32_t WriteAddr, uint16_t NumByteToWrite)
往目标地址写入指定长度的数据
参数:数据地址、目标写入地址、写入数据长度

使用特权

评论回复
9
梅花香自123|  楼主 | 2021-9-28 21:53 | 只看该作者
总结
本项目中SPI的使用主要可以归纳为:
1.SPI读写函数封装
2.调用 SPI_Read()功能函数读取目标地址数据。
3.调用SPI _Write()功能函数写入数据至目标地址

使用特权

评论回复
10
keaibukelian| | 2021-10-12 15:24 | 只看该作者
spi是不是就没有全双工啊

使用特权

评论回复
11
labasi| | 2021-10-12 15:27 | 只看该作者
这个还是很容易的

使用特权

评论回复
12
paotangsan| | 2021-10-12 15:29 | 只看该作者
跟它相关的函数都比较简单

使用特权

评论回复
13
renzheshengui| | 2021-10-12 15:30 | 只看该作者
一般都会遇到什么难点呢

使用特权

评论回复
14
wakayi| | 2021-10-12 15:32 | 只看该作者
主要还是注意硬件连接别出问题  软件还是很好调的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

80

主题

1035

帖子

0

粉丝