资源简介

使用STM32L4xx芯片,LL库配置硬件SPI,包括初始化以及收发函数;

资源截图

代码片段和文件信息

#include “SPI.h“





/***************************************************************************************
** 函数名称: SPI1_Init
** 功能描述: SPI1初始化
** 参    数: None
** 返 回 值: None       
****************************************************************************************/
void SPI1_Init(void)//时钟为16MHz时输出波形有震荡
{
  LL_SPI_InitTypeDef SPI_InitStruct;
  LL_GPIO_InitTypeDef GPIO_InitStruct;

  LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_SPI1);//使能SPI1时钟

  /*SPI引脚配置
  PA5   ------> SPI1_SCK
  PA6   ------> SPI1_MISO
  PA7   ------> SPI1_MOSI
  PA15 (JTDI)   ------> SPI1_NSS 
  */
  GPIO_InitStruct.Pin = LL_GPIO_PIN_5|LL_GPIO_PIN_6|LL_GPIO_PIN_7|LL_GPIO_PIN_15;
  GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;//复用模式
  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;//速率高
  GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;//推挽输出
  GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;//无上下拉
  GPIO_InitStruct.Alternate = LL_GPIO_AF_5;//复用5
  LL_GPIO_Init(GPIOA &GPIO_InitStruct);//SPI引脚初始化

  //SPI1参数配置
  SPI_InitStruct.TransferDirection = LL_SPI_FULL_DUPLEX;//全双工模式
  SPI_InitStruct.Mode = LL_SPI_MODE_MASTER;//主机模式
  SPI_InitStruct.DataWidth = LL_SPI_DATAWIDTH_8BIT;//传输8位数据
  SPI_InitStruct.ClockPolarity = LL_SPI_POLARITY_HIGH;//空闲时时钟为高
  SPI_InitStruct.ClockPhase = LL_SPI_PHASE_1EDGE;//第一个时钟转换是数据捕获的第一个边缘
  SPI_InitStruct.NSS = LL_SPI_NSS_HARD_OUTPUT;//NSS输出模式
  SPI_InitStruct.BaudRate = LL_SPI_BAUDRATEPRESCALER_DIV2;//波特率控制等于fpclk/2
  SPI_InitStruct.BitOrder = LL_SPI_MSB_FIRST;//数据首先发送\接收MSB位
  SPI_InitStruct.CRCCalculation = LL_SPI_CRCCALCULATION_DISABLE;//CRC计算禁用
  SPI_InitStruct.CRCPoly = 7;//用于CRC计算的多项式
  LL_SPI_Init(SPI1 &SPI_InitStruct);//SPI1初始化

  LL_SPI_SetStandard(SPI1 LL_SPI_PROTOCOL_MOTOROLA);//设置MOTOROLA模式
  LL_SPI_EnableNSSPulseMgt(SPI1);//启用NSS脉冲管理

LL_SPI_Enable(SPI1);//使能SPI1
}

/***************************************************************************************
** 函数名称: SPI1_SendReadByte
** 功能描述: SPI1传输一个字节并读一个字节
** 参    数: Data 要发送的字节
** 返 回 值: ResData   读取的字节     
****************************************************************************************/
uint8_t SPI1_SendReadByte(uint8_t Data)
{
uint8_t ResData=0;

while((SPI1->SR & LL_SPI_SR_TXE) == 0);//等待传输缓存区为空
SPI1->DR = Data;//待发数据写入
while((SPI1->SR & LL_SPI_SR_RXNE) == 0);//等待接收缓存区为空
ResData = SPI1->DR;//读取接收数据

return ResData;
}



/***************************************************************************************
** 函数名称: SPI1_SendByte
** 功能描述: SPI1传输一个字节
** 参    数: Data 要发送的字节
** 返 回 值: None
****************************************************************************************/
void SPI1_SendByte(uint8_t Data)
{
while((SPI1->SR & LL_SPI_SR_TXE) == 0);//等待传输缓存区为空
SPI1->DR = Data;//待发数据写入
}

/***************************************************************************************
** 函数名称: SPI1_ReadByte
** 功能描述: S

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       3620  2019-10-18 10:33  STM32L4_硬件SPI配置_LL库版\SPI.c

     文件        280  2019-10-18 11:04  STM32L4_硬件SPI配置_LL库版\SPI.h

     目录          0  2019-10-19 08:22  STM32L4_硬件SPI配置_LL库版

----------- ---------  ---------- -----  ----

                 3900                    3


评论

共有 条评论