HAL_Project/Project -APP-V1.0/Hardware/SPI/spi.c

229 lines
9.3 KiB
C
Raw Permalink Normal View History

2025-05-09 15:43:42 +08:00
#include "main.h"
SPI_HandleTypeDef SPI1_Handler; //SPI2<49><32><EFBFBD><EFBFBD>
#if 0
SPI_HandleTypeDef SPI2_Handler; //SPI2<49><32><EFBFBD><EFBFBD>
#endif
uint8_t temprxdata;
/*-------------------------------------------------*/
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>SPI2<49>ӿ<EFBFBD> */
/*<2A><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
/*<2A><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> */
/*-------------------------------------------------*/
void SPI1_Init(void)
{
SPI1_Handler.Instance=SPI1; //SPI2
SPI1_Handler.Init.Mode=SPI_MODE_MASTER; //<2F><><EFBFBD><EFBFBD>SPI<50><49><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ģʽ
SPI1_Handler.Init.Direction=SPI_DIRECTION_2LINES; //<2F><><EFBFBD><EFBFBD>SPI<50><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˫<EFBFBD><CBAB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ:SPI<50><49><EFBFBD><EFBFBD>Ϊ˫<CEAA><CBAB>ģʽ
SPI1_Handler.Init.DataSize=SPI_DATASIZE_8BIT; //<2F><><EFBFBD><EFBFBD>SPI<50><49><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>С:SPI<50><49><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD>8λ֡<CEBB>
SPI1_Handler.Init.CLKPolarity=SPI_POLARITY_HIGH; //<2F><><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC>ʱ<EFBFBD>ӵĿ<D3B5><C4BF><EFBFBD>״̬Ϊ<CCAC>ߵ<EFBFBD>ƽ
SPI1_Handler.Init.CLKPhase=SPI_PHASE_2EDGE; //<2F><><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC>ʱ<EFBFBD>ӵĵڶ<C4B5><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><D8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD><C2BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD>
SPI1_Handler.Init.NSS=SPI_NSS_SOFT; //NSS<53>ź<EFBFBD><C5BA><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD>NSS<53>ܽţ<DCBD><C5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>SSIλ<49><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A>ڲ<EFBFBD>NSS<53>ź<EFBFBD><C5BA><EFBFBD>SSIλ<49><CEBB><EFBFBD><EFBFBD>
SPI1_Handler.Init.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_2; //<2F><><EFBFBD><EFBFBD><E5B2A8><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4>Ƶ<EFBFBD><C6B5>ֵ:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4>ƵֵΪ2
SPI1_Handler.Init.FirstBit=SPI_FIRSTBIT_MSB; //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD>MSBλ<42><CEBB><EFBFBD><EFBFBD>LSBλ<42><CEBB>ʼ:<3A><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD>MSBλ<42><CEBB>ʼ
SPI1_Handler.Init.TIMode=SPI_TIMODE_DISABLE; //<2F>ر<EFBFBD>TIģʽ
SPI1_Handler.Init.CRCCalculation=SPI_CRCCALCULATION_DISABLE; //<2F>ر<EFBFBD>Ӳ<EFBFBD><D3B2>CRCУ<43><D0A3>
SPI1_Handler.Init.CRCPolynomial=7; //CRCֵ<43><D6B5><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>ʽ
HAL_SPI_Init(&SPI1_Handler); //<2F><>ʼ<EFBFBD><CABC>
__HAL_SPI_ENABLE(&SPI1_Handler); //ʹ<><CAB9>SPI1
}
/*-------------------------------------------------*/
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>SPI2<49>ӿ<EFBFBD> */
/*<2A><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
/*<2A><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> */
/*-------------------------------------------------*/
#if 0
void SPI2_Init(void)
{
SPI2_Handler.Instance=SPI2; //SPI2
SPI2_Handler.Init.Mode=SPI_MODE_MASTER; //<2F><><EFBFBD><EFBFBD>SPI<50><49><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ģʽ
SPI2_Handler.Init.Direction=SPI_DIRECTION_2LINES; //<2F><><EFBFBD><EFBFBD>SPI<50><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˫<EFBFBD><CBAB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ:SPI<50><49><EFBFBD><EFBFBD>Ϊ˫<CEAA><CBAB>ģʽ
SPI2_Handler.Init.DataSize=SPI_DATASIZE_8BIT; //<2F><><EFBFBD><EFBFBD>SPI<50><49><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>С:SPI<50><49><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD>8λ֡<CEBB>
SPI2_Handler.Init.CLKPolarity=SPI_POLARITY_HIGH; //<2F><><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC>ʱ<EFBFBD>ӵĿ<D3B5><C4BF><EFBFBD>״̬Ϊ<CCAC>ߵ<EFBFBD>ƽ
SPI2_Handler.Init.CLKPhase=SPI_PHASE_2EDGE; //<2F><><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC>ʱ<EFBFBD>ӵĵڶ<C4B5><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><D8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD><C2BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD>
SPI2_Handler.Init.NSS=SPI_NSS_SOFT; //NSS<53>ź<EFBFBD><C5BA><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD>NSS<53>ܽţ<DCBD><C5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>SSIλ<49><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A>ڲ<EFBFBD>NSS<53>ź<EFBFBD><C5BA><EFBFBD>SSIλ<49><CEBB><EFBFBD><EFBFBD>
SPI2_Handler.Init.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_2; //<2F><><EFBFBD><EFBFBD><E5B2A8><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4>Ƶ<EFBFBD><C6B5>ֵ:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4>ƵֵΪ2
SPI2_Handler.Init.FirstBit=SPI_FIRSTBIT_MSB; //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD>MSBλ<42><CEBB><EFBFBD><EFBFBD>LSBλ<42><CEBB>ʼ:<3A><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD>MSBλ<42><CEBB>ʼ
SPI2_Handler.Init.TIMode=SPI_TIMODE_DISABLE; //<2F>ر<EFBFBD>TIģʽ
SPI2_Handler.Init.CRCCalculation=SPI_CRCCALCULATION_DISABLE; //<2F>ر<EFBFBD>Ӳ<EFBFBD><D3B2>CRCУ<43><D0A3>
SPI2_Handler.Init.CRCPolynomial=7; //CRCֵ<43><D6B5><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>ʽ
HAL_SPI_Init(&SPI2_Handler); //<2F><>ʼ<EFBFBD><CABC>
__HAL_SPI_ENABLE(&SPI2_Handler); //ʹ<><CAB9>SPI2
}
#endif
/*-------------------------------------------------*/
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SPI<50>ӿڵĵײ<C4B5><D7B2><EFBFBD>ʼ<EFBFBD><CABC> */
/*<2A><> <20><><EFBFBD><EFBFBD>hspi<70><69>SPI<50>ӿ<EFBFBD><D3BF><EFBFBD><EFBFBD>þ<EFBFBD><C3BE><EFBFBD> */
/*<2A><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> */
/*˵ <20><><EFBFBD><EFBFBD><EFBFBD>˺<EFBFBD><CBBA><EFBFBD><EFBFBD>ᱻHAL_SPI_Init()<29>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD> */
/*-------------------------------------------------*/
void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi)
{
GPIO_InitTypeDef GPIO_Initure;
if(hspi->Instance==SPI1){
__HAL_RCC_GPIOA_CLK_ENABLE(); //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD><44><CAB1>
__HAL_RCC_SPI1_CLK_ENABLE(); //<2F><><EFBFBD><EFBFBD>SPI2<49>ӿ<EFBFBD>ʱ<EFBFBD><CAB1>
GPIO_Initure.Pin=GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7; //<2F><><EFBFBD><EFBFBD>PD1 3 4
GPIO_Initure.Mode=GPIO_MODE_AF_PP; //<2F><><EFBFBD><EFBFBD>ģʽ
GPIO_Initure.Pull=GPIO_PULLUP; //<2F><><EFBFBD><EFBFBD>
GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH; //VERY_HIGHģʽ
HAL_GPIO_Init(GPIOA,&GPIO_Initure); //<2F><><EFBFBD><EFBFBD>
}
if(hspi->Instance==SPI2){
__HAL_RCC_GPIOB_CLK_ENABLE(); //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD><44><CAB1>
__HAL_RCC_SPI2_CLK_ENABLE(); //<2F><><EFBFBD><EFBFBD>SPI2<49>ӿ<EFBFBD>ʱ<EFBFBD><CAB1>
GPIO_Initure.Pin=GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15; //<2F><><EFBFBD><EFBFBD>PD1 3 4
GPIO_Initure.Mode=GPIO_MODE_AF_PP; //<2F><><EFBFBD><EFBFBD>ģʽ
GPIO_Initure.Pull=GPIO_PULLUP; //<2F><><EFBFBD><EFBFBD>
GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH; //VERY_HIGHģʽ
HAL_GPIO_Init(GPIOB,&GPIO_Initure); //<2F><><EFBFBD><EFBFBD>
}
}
/*-------------------------------------------------*/
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SPI<50>ӿڶ<D3BF>д<EFBFBD><D0B4><EFBFBD><EFBFBD> */
/*<2A><> <20><><EFBFBD><EFBFBD>TxData<74><61><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD> */
/*<2A><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
/*-------------------------------------------------*/
#if 0
uint8_t SPI2_ReadWriteByte(uint8_t TxData)
{
while((__HAL_SPI_GET_FLAG(&SPI2_Handler, SPI_FLAG_TXE))==0);
*(__IO uint8_t *)&(&SPI2_Handler)->Instance->DR = TxData ;
while((__HAL_SPI_GET_FLAG(&SPI2_Handler, SPI_FLAG_RXNE))==0);
return *(__IO uint8_t *)&(&SPI2_Handler)->Instance->DR;
}
#endif
uint8_t SPI1_ReadWriteByte(uint8_t TxData)
{
while((__HAL_SPI_GET_FLAG(&SPI1_Handler, SPI_FLAG_TXE))==0);
*(__IO uint8_t *)&(&SPI1_Handler)->Instance->DR = TxData ;
while((__HAL_SPI_GET_FLAG(&SPI1_Handler, SPI_FLAG_RXNE))==0);
return *(__IO uint8_t *)&(&SPI1_Handler)->Instance->DR;
}
/*-------------------------------------------------*/
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SPI2<49>ӿ<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD> */
/*<2A><> <20><><EFBFBD><EFBFBD>TxData<74><61><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD> */
/*<2A><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> */
/*-------------------------------------------------*/
#if 0
void SPI2_WriteByte(uint8_t TxData)
{
while((__HAL_SPI_GET_FLAG(&SPI2_Handler, SPI_FLAG_TXE))==0);
*(__IO uint8_t *)&(&SPI2_Handler)->Instance->DR = TxData ;
while((__HAL_SPI_GET_FLAG(&SPI2_Handler, SPI_FLAG_RXNE))==0);
temprxdata = *(__IO uint8_t *)&(&SPI2_Handler)->Instance->DR;
}
#endif
void SPI1_WriteByte(uint8_t TxData)
{
while((__HAL_SPI_GET_FLAG(&SPI1_Handler, SPI_FLAG_TXE))==0);
*(__IO uint8_t *)&(&SPI1_Handler)->Instance->DR = TxData ;
while((__HAL_SPI_GET_FLAG(&SPI1_Handler, SPI_FLAG_RXNE))==0);
temprxdata = *(__IO uint8_t *)&(&SPI1_Handler)->Instance->DR;
}
/*-------------------------------------------------*/
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SPI2<49>ӿڶ<D3BF><DAB6><EFBFBD><EFBFBD><EFBFBD> */
/*<2A><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
/*<2A><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
/*-------------------------------------------------*/
#if 0
uint8_t SPI2_ReadByte(void)
{
while((__HAL_SPI_GET_FLAG(&SPI2_Handler, SPI_FLAG_TXE))==0);
*(__IO uint8_t *)&(&SPI2_Handler)->Instance->DR = 0xFF ;
while((__HAL_SPI_GET_FLAG(&SPI2_Handler, SPI_FLAG_RXNE))==0);
return *(__IO uint8_t *)&(&SPI2_Handler)->Instance->DR;
}
#endif
uint8_t SPI1_ReadByte(void)
{
while((__HAL_SPI_GET_FLAG(&SPI1_Handler, SPI_FLAG_TXE))==0);
*(__IO uint8_t *)&(&SPI1_Handler)->Instance->DR = 0xFF ;
while((__HAL_SPI_GET_FLAG(&SPI1_Handler, SPI_FLAG_RXNE))==0);
return *(__IO uint8_t *)&(&SPI1_Handler)->Instance->DR;
}
/*-------------------------------------------------*/
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SPI2<49>ӿڶ<D3BF>дָ<D0B4><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
/*<2A><> <20><><EFBFBD><EFBFBD>TxData<74><61><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD> */
/*<2A><> <20><><EFBFBD><EFBFBD>Rxdata<74><61><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD> */
/*<2A><> <20><><EFBFBD><EFBFBD>len<65><6E><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
/*<2A><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> */
/*-------------------------------------------------*/
#if 0
void SPI2_WriteRead(uint8_t *TxData, uint8_t *Rxdata, uint16_t len)
{
uint16_t i;
for(i=0;i<len;i++){
Rxdata[i] = SPI2_ReadWriteByte(TxData[i]);
}
}
#endif
void SPI1_WriteRead(uint8_t *TxData, uint8_t *Rxdata, uint16_t len)
{
uint16_t i;
for(i=0;i<len;i++){
Rxdata[i] = SPI1_ReadWriteByte(TxData[i]);
}
}
/*-------------------------------------------------*/
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SPI2<49>ӿ<EFBFBD>дָ<D0B4><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
/*<2A><> <20><><EFBFBD><EFBFBD>TxData<74><61><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD> */
/*<2A><> <20><><EFBFBD><EFBFBD>len<65><6E><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
/*<2A><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> */
/*-------------------------------------------------*/
#if 0
void SPI2_Write(uint8_t *TxData, uint16_t len)
{
uint16_t i;
for(i=0;i<len;i++){
SPI2_WriteByte(TxData[i]);
}
}
#endif
void SPI1_Write(uint8_t *TxData, uint16_t len)
{
uint16_t i;
for(i=0;i<len;i++){
SPI1_WriteByte(TxData[i]);
}
}
/*-------------------------------------------------*/
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SPI2<49>ӿڶ<D3BF>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
/*<2A><> <20><><EFBFBD><EFBFBD>TxData<74><61><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD> */
/*<2A><> <20><><EFBFBD><EFBFBD>len<65><6E><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
/*<2A><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> */
/*-------------------------------------------------*/
#if 0
void SPI2_Read(uint8_t *Rxdata, uint16_t len)
{
uint16_t i;
for(i=0;i<len;i++){
Rxdata[i] = SPI2_ReadWriteByte(0xFF);
}
}
#endif
void SPI1_Read(uint8_t *Rxdata, uint16_t len)
{
uint16_t i;
for(i=0;i<len;i++){
Rxdata[i] = SPI1_ReadWriteByte(0xFF);
}
}