STM32-SPI基础

在之前的笔记中我们已经介绍了SPI通信方式了,详见以下链接:http://t.csdn.cn/zc3P9

首先我们先介绍一些SPI相关的HAL库函数:

1、__HAL_RCC_SSPIx_CLK_ENABLE():使能SPI时钟;

2、HAL_SPI_Init():用SPI句柄初始化SPI;

3、HAL_SPI_MspInit():初始化SPI回调;

4、HAL_SPI_Transmit():SPI发送消息;

5、HAL_SPI_Receive():SPI接受消息;

6、HAL_SPI_TransmitReceive():SPI收发消息;

7、__HAL_SPI_ENABLE():使能SPI外设;

8、__HAL_SPI_DISABLE():失能SPI外设;

接下来介绍SPI初始化句柄 SPI_HandleTypeDef 的一些比较重要的成员参数:g_spi_handle

1、g_spi_handle.Instance:选用SPI的基地址;

2、g_spi_handle.Init.Mode:SPI模式(主机/从机);

3、g_spi_handle.Init.Direction:工作方式(全双工);

4、g_spi_handle.Init.DataSize:帧格式(8/16位);

5、g_spi_handle.Init.CLKPolarity:时钟极性(0代表高电平有效,1代表低电平有效);

6、g_spi_handle.Init.CLKPhase:时钟相位(0代表上升沿触发,1代表下降沿触发);

7、g_spi_handle.Init.NSS:SS片选控制方式(软件控制);

8、g_spi_handle.Init.BaudRatePrescaler:SPI波特率预分频器;

9、g_spi_handle.Init.FirstBit:数据传输顺序(MSB);

10、g_spi_handle.Init.TIMode:帧格式motorola;

11、g_spi_handle.Init.CRCCalculation:设置硬件CRC校验;

12、g_spi_handle.Init.CRCPolynomial:设置CRC校验多项式;、

接下来我们编写SPI实验的库:

首先我们编写函数文件spi.c:

#include "./BSP/SPI/spi.h"

SPI_HandleTypeDef g_spi2_handle;

void spi2_init(void){

    g_spi2_handle.Instance = SPI2_SPI;
    g_spi2_handle.Init.Mode = SPI_MODE_MASTER;
    g_spi2_handle.Init.Direction = SPI_DIRECTION_2LINE;
    g_spi2_handle.Init.DataSize = SPI_DATASIZE_8BIT;
    g_spi2_handle.Init.CLKPolarity = SPI_POLARITY_HIGH;
    g_spi2_handle.Init.CLKPhase = SPI_PHASE_2EDGE;
    g_spi2_handle.Init.NSS = SPI_NSS_SOFT;
    g_spi2_handle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;
    g_spi2_handle.Init.FirstBit = SPI_FIRSTBIT_MSB;
    g_spi2_handle.Init.TIMode = SPI_TIMODE_DISABLE;
    g_spi2_handle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
    g_spi2_handle.Init.CRCPolynomial = 7;

    HAL_SPI_Init(&g_spi2_handle);
    
}

void _HAL_SPI_MspInit(SPI_HandleTypeDef *hspi){
    GPIO_InitTypeDef gpio_init_struct;

    if(g_spi2_handle.Instance == SPI2_SPI){
        SPI2_SPI_CLK_ENABLE();
        SPI2_MISO_GPIO_CLK_ENABLE();
        SPI2_MOSI_GPIO_CLK_ENABLE();

        gpio_init_struct.Pin = SPI2_SCK_GPIO_PIN;
        gpio_init_struct.Mode = GPIO_MODE_AF_PP;
        gpio_init_struct.Pull = GPIO_PULLUP;
        gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;
        HAL_GPIO_Init(SPI2_SCK_GPIO_PORT, &gpio_init_struct);

        gpio_init_struct.Pin = SPI2_MISO_GPIO_PIN;
        HAL_GPIO_Init(SPI2_MISO_GPIO_PORT, &gpio_init_struct);

        gpio_init_struct.Pin = SPI2_MOSI_GPIO_PIN;
        HAL_GPIO_Init(SPI2_MOSI_GPIO_PORT, &gpio_init_struct);
    }
}

uint8_t spi2_read_write_byte(uint8_t data){
    uint8_t rec_data = 0;
    HAL_SPI_TransmitReceive(&g_spi2_handle, data, rec_data, 1, 1000);
    return rec_data;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32是一款由意法半导体(STMicroelectronics)开发的32位微控制器系列。它广泛应用于各种嵌入式系统中,具有强大的处理能力和丰富的外设接口。 SPI(Serial Peripheral Interface)是一种同步串行通信接口,用于在微控制器和外部设备之间进行数据交换。STM32系列微控制器通常都配备了多个SPI接口,并且支持全双工通信。下面是STM32 SPI通信的硬件基础: 1. SPI主从模式:STM32可以配置为SPI主设备或从设备。主设备负责发起通信并控制通信的时序,而从设备被动响应主设备的请求。 2. SPI引脚:STM32上的SPI接口通常由四个引脚组成,分别是SCK(时钟线)、MISO(主设备输入从设备输出线)、MOSI(主设备输出从设备输入线)和NSS(片选线)。其中NSS可以配置为软件控制或硬件控制。 3. 数据传输格式:SPI通信可以选择不同的数据传输格式,包括数据位数、数据顺序和时钟极性。STM32支持8位或16位数据位数,可以选择先传输最高位还是最低位,以及时钟在空闲时为高电平还是低电平。 4. 时钟分频:STM32SPI接口可以通过时钟分频来调整通信速度。可以根据外设的需求和主设备的时钟频率来选择适当的分频系数。 5. DMA传输:STM32SPI接口还支持使用DMA(Direct Memory Access)进行数据传输,可以减少CPU的负载,提高数据传输效率。 通过配置以上硬件参数,并结合相应的SPI库函数,就可以在STM32上实现SPI通信。当然,具体的配置和编程方式会根据不同的STM32型号和开发环境有所不同,你可以参考相应的官方文档和例程来进行具体操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值