資源簡(jiǎn)介
使用STM32L4xx芯片,LL庫(kù)配置硬件SPI,包括初始化以及收發(fā)函數(shù);

代碼片段和文件信息
#include?“SPI.h“
/***************************************************************************************
**?函數(shù)名稱(chēng):?SPI1_Init
**?功能描述:?SPI1初始化
**?參????數(shù):?None
**?返?回?值:?None???????
****************************************************************************************/
void?SPI1_Init(void)//時(shí)鐘為16MHz時(shí)輸出波形有震蕩
{
??LL_SPI_InitTypeDef?SPI_InitStruct;
??LL_GPIO_InitTypeDef?GPIO_InitStruct;
??LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_SPI1);//使能SPI1時(shí)鐘
??/*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;//復(fù)用模式
??GPIO_InitStruct.Speed =?LL_GPIO_SPEED_FREQ_VERY_HIGH;//速率高
??GPIO_InitStruct.OutputType =?LL_GPIO_OUTPUT_PUSHPULL;//推挽輸出
??GPIO_InitStruct.Pull =?LL_GPIO_PULL_NO;//無(wú)上下拉
??GPIO_InitStruct.Alternate =?LL_GPIO_AF_5;//復(fù)用5
??LL_GPIO_Init(GPIOA?&GPIO_InitStruct);//SPI引腳初始化
??//SPI1參數(shù)配置
??SPI_InitStruct.TransferDirection =?LL_SPI_FULL_DUPLEX;//全雙工模式
??SPI_InitStruct.Mode =?LL_SPI_MODE_MASTER;//主機(jī)模式
??SPI_InitStruct.DataWidth =?LL_SPI_DATAWIDTH_8BIT;//傳輸8位數(shù)據(jù)
??SPI_InitStruct.ClockPolarity =?LL_SPI_POLARITY_HIGH;//空閑時(shí)時(shí)鐘為高
??SPI_InitStruct.ClockPhase =?LL_SPI_PHASE_1EDGE;//第一個(gè)時(shí)鐘轉(zhuǎn)換是數(shù)據(jù)捕獲的第一個(gè)邊緣
??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;//數(shù)據(jù)首先發(fā)送\接收MSB位
??SPI_InitStruct.CRCCalculation =?LL_SPI_CRCCALCULATION_DISABLE;//CRC計(jì)算禁用
??SPI_InitStruct.CRCPoly =?7;//用于CRC計(jì)算的多項(xiàng)式
??LL_SPI_Init(SPI1?&SPI_InitStruct);//SPI1初始化
??LL_SPI_SetStandard(SPI1?LL_SPI_PROTOCOL_MOTOROLA);//設(shè)置MOTOROLA模式
??LL_SPI_EnableNSSPulseMgt(SPI1);//啟用NSS脈沖管理
LL_SPI_Enable(SPI1);//使能SPI1
}
/***************************************************************************************
**?函數(shù)名稱(chēng):?SPI1_SendReadByte
**?功能描述:?SPI1傳輸一個(gè)字節(jié)并讀一個(gè)字節(jié)
**?參????數(shù):?Data 要發(fā)送的字節(jié)
**?返?回?值:?ResData?? 讀取的字節(jié)?????
****************************************************************************************/
uint8_t?SPI1_SendReadByte(uint8_t?Data)
{
uint8_t?ResData=0;
while((SPI1->SR?&?LL_SPI_SR_TXE)?==?0);//等待傳輸緩存區(qū)為空
SPI1->DR?=?Data;//待發(fā)數(shù)據(jù)寫(xiě)入
while((SPI1->SR?&?LL_SPI_SR_RXNE)?==?0);//等待接收緩存區(qū)為空
ResData?=?SPI1->DR;//讀取接收數(shù)據(jù)
return?ResData;
}
/***************************************************************************************
**?函數(shù)名稱(chēng):?SPI1_SendByte
**?功能描述:?SPI1傳輸一個(gè)字節(jié)
**?參????數(shù):?Data 要發(fā)送的字節(jié)
**?返?回?值:?None
****************************************************************************************/
void?SPI1_SendByte(uint8_t?Data)
{
while((SPI1->SR?&?LL_SPI_SR_TXE)?==?0);//等待傳輸緩存區(qū)為空
SPI1->DR?=?Data;//待發(fā)數(shù)據(jù)寫(xiě)入
}
/***************************************************************************************
**?函數(shù)名稱(chēng):?SPI1_ReadByte
**?功能描述:?S
?屬性????????????大小?????日期????時(shí)間???名稱(chēng)
-----------?---------??----------?-----??----
?????文件???????3620??2019-10-18?10:33??STM32L4_硬件SPI配置_LL庫(kù)版\SPI.c
?????文件????????280??2019-10-18?11:04??STM32L4_硬件SPI配置_LL庫(kù)版\SPI.h
?????目錄??????????0??2019-10-19?08:22??STM32L4_硬件SPI配置_LL庫(kù)版
-----------?---------??----------?-----??----
?????????????????3900????????????????????3
評(píng)論
共有 條評(píng)論