赞
踩
在之前的笔记中我们已经介绍了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;
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。