STM32 HAL库函数学习SPI篇

1、HAL_StatusTypeDef HAL_SPI_Init (SPI_HandleTypeDef * hspi)

 配置SPI通信的所有参数,主要是区分SPI的四种工作模式。

最终使用此函数初始化SPI外设,注意还要使用__HAL_SPI_ENABLE();函数开启SPI外设。

SPI_HandleTypeDef SPI2_Handler;  //SPI2句柄
void SPI2_Init(void)
{
    SPI2_Handler.Instance=SPI2;                      //SP2
    SPI2_Handler.Init.Mode=SPI_MODE_MASTER;          //设置为主机
    SPI2_Handler.Init.Direction=SPI_DIRECTION_2LINES;//设置SPI单向或者双向的数据模式:SPI设置为双线模式
    SPI2_Handler.Init.DataSize=SPI_DATASIZE_8BIT;    //设置SPI的数据大小:SPI发送接收8位帧结构
    SPI2_Handler.Init.CLKPolarity=SPI_POLARITY_HIGH; //串行同步时钟的空闲状态为高电平
    SPI2_Handler.Init.CLKPhase=SPI_PHASE_2EDGE;      //串行同步时钟的第二个跳变沿(上升或下降)数据被采样
    SPI2_Handler.Init.NSS=SPI_NSS_SOFT;              //NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制
    SPI2_Handler.Init.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_256;//定义波特率预分频的值:波特率预分频值为256
    SPI2_Handler.Init.FirstBit=SPI_FIRSTBIT_MSB;     //指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始
    SPI2_Handler.Init.TIMode=SPI_TIMODE_DISABLE;     //关闭TI模式
    SPI2_Handler.Init.CRCCalculation=SPI_CRCCALCULATION_DISABLE;//关闭硬件CRC校验
    SPI2_Handler.Init.CRCPolynomial=7;               //CRC值计算的多项式
    HAL_SPI_Init(&SPI2_Handler);
    
    __HAL_SPI_ENABLE(&SPI2_Handler);                 //使能SPI2
}

2、HAL_StatusTypeDef HAL_SPI_DeInit (SPI_HandleTypeDef * hspi)

复位SPI外设的参数配置。适用方法同上。

3、void HAL_SPI_MspInit (SPI_HandleTypeDef * hspi)

SPI硬件初始化回调函数,自动被函数1调用,注意SPI中的CS 管脚是需要单独配置的,不能和MSIO、SCK、MOSI配合到一起。

void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi)
{
    GPIO_InitTypeDef GPIO_Initure;
    
    __HAL_RCC_GPIOF_CLK_ENABLE();       //使能GPIOF时钟
    __HAL_RCC_SPI5_CLK_ENABLE();        //使能SPI5时钟
    __HAL_RCC_SPI2_CLK_ENABLE();        //使能SPI2时钟
    __HAL_RCC_GPIOH_CLK_ENABLE();       //使能GPIOH时钟
    //SPI5引脚初始化PF7,8,9
    GPIO_Initure.Pin=GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9;
    GPIO_Initure.Mode=GPIO_MODE_AF_PP;              //复用推挽输出
    GPIO_Initure.Pull=GPIO_PULLUP;                  //上拉
    GPIO_Initure.Speed=GPIO_SPEED_FAST;             //快速            
    GPIO_Initure.Alternate=GPIO_AF5_SPI5;           //复用为SPI5
    HAL_GPIO_Init(GPIOF,&GPIO_Initure);
    
    //SPI2引脚初始化PB13,14,15
    GPIO_Initure.Pin=GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;   
    GPIO_Initure.Alternate=GPIO_AF5_SPI2;           //复用为SPI2
    HAL_GPIO_Init(GPIOB,&GPIO_Initure);             //初始化
	
		GPIO_Initure.Pin=GPIO_PIN_7;   
    GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;           //RST
    HAL_GPIO_Init(GPIOH,&GPIO_Initure);             //初始化
	
	  		GPIO_Initure.Pin=GPIO_PIN_12;   
    GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;           //SPI2 CS
    HAL_GPIO_Init(GPIOB,&GPIO_Initure);             //初始化
}

4、void HAL_SPI_MspDeInit (SPI_HandleTypeDef * hspi)

使用方法同上。

5、HAL_StatusTypeDef HAL_SPI_Transmit (SPI_HandleTypeDef * hspi, uint8_t * pData, uint16_t Size, uint32_t Timeout)

SPI_HandleTypeDef SPI2_Handler;  //SPI2句柄
uint8_t data[] = "SPI Send Data"
HAL_SPI_Transmit (&SPI2_Handler, data, sizeof(data),100);

SPI发送数据的函数(只发送数据)。通过阻塞的形式向外发送数据。

6、HAL_StatusTypeDef HAL_SPI_Receive (SPI_HandleTypeDef * hspi, uint8_t * pData, uint16_t Size, uint32_t Timeout)

SPI_HandleTypeDef SPI2_Handler;  //SPI2句柄
uint8_t data = 0;
HAL_SPI_Receive (&SPI2_Handler, &data, 1,100);
//接收一个字节的数据到data变量中存储

SPI接收数据函数(只接收数据)。通过阻塞的形式接收数据。

7、HAL_StatusTypeDef HAL_SPI_TransmitReceive (SPI_HandleTypeDef * hspi, uint8_t * pTxData, uint8_t * pRxData, uint16_t Size, uint32_t Timeout)

SPI收发一体函数,重点函数,发送数据和接收数据都可以使用此函数。

u8 SPI2_ReadWriteByte(u8 TxData)
{
    u8 Rxdata;
    HAL_SPI_TransmitReceive(&SPI2_Handler,&TxData,&Rxdata,1, 1000);       
 	return Rxdata;          		    //返回收到的数据		
}

8、HAL_StatusTypeDef HAL_SPI_Transmit_IT (SPI_HandleTypeDef * hspi, uint8_t * pData, uint16_t Size)

SPI_HandleTypeDef SPI2_Handler;  //SPI2句柄
uint8_t data[] = "SPI Send Data"
HAL_SPI_Transmit_IT (&SPI2_Handler, data, sizeof(data));

SPI发送数据的函数(只发送数据)。通过发送中断的形式向外发送数据。

9、HAL_StatusTypeDef HAL_SPI_Receive_IT (SPI_HandleTypeDef * hspi, uint8_t * pData, uint16_t Size)

SPI_HandleTypeDef SPI2_Handler;  //SPI2句柄
uint8_t data = 0;
HAL_SPI_Receive_IT (&SPI2_Handler, &data, 1);

SPI接收数据函数(只接收数据)。通过接收中断的形式接收数据。

10、HAL_StatusTypeDef HAL_SPI_TransmitReceive_IT (SPI_HandleTypeDef * hspi, uint8_t * pTxData, uint8_t * pRxData, uint16_t Size)

### 回答1: 介绍 很高兴为您解答!STM32 HAL库函数主要分为以下几个类别:1. 内存管理:提供内存分配、释放和拷贝等功能;2. 时钟管理:提供复位、时钟配置和时钟源切换等功能;3. 设备控制:提供设备控制、中断控制和中断服务函数等功能;4. 设备驱动:提供与设备特定的控制功能,如I2C、SPI、ADC、DAC等;5. 调试和测试:提供调试和测试功能,如调试模式、调试终端等。 ### 回答2: STM32 HAL库函数是针对STMicroelectronics公司的STM32系列微控制器所提供的一套高级抽象层函数库。该库函数封装了底层的硬件操作,提供了一系列易于使用的函数接口,帮助开发者进行快速的STM32开发。 STM32 HAL库函数为不同系列的STM32微控制器提供了统一的接口,使得开发者可以方便地在不同系列之间进行移植。无论是在引脚配置、中断处理、时钟管理还是外设控制等方面,HAL库函数都提供了丰富的接口,大大简化了开发者的工作。 HAL库函数的使用也非常灵活,可以通过调用不同的函数来实现特定的功能。比如,可以通过HAL_GPIO_Init函数初始化GPIO引脚,通过HAL_TIM_PWM_Start函数启动PWM输出,通过HAL_UART_Transmit函数发送数据等。这些函数底层封装了寄存器的操作,简化了开发者的代码编写。 此外,HAL库函数还提供了一系列的库文件,例如:CMSIS(Cortex Microcontroller Software Interface Standard)驱动,各种外设的驱动以及中间件等,可以进一步加快项目的开发速度。 总之,STM32 HAL库函数提供了丰富的函数接口和库文件,方便开发者进行STM32微控制器的开发。无论是初学者还是有经验的开发者,都可以通过使用HAL库函数,快速、高效地实现各种功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值