191 lines
5.4 KiB
C
191 lines
5.4 KiB
C
|
|
#include "spi.h"
|
|||
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
|
|||
|
|
/************************************************************************************************/
|
|||
|
|
//SPI<50><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
//STM32H7<48><37><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>-HAL<41>⺯<EFBFBD><E2BAAF><EFBFBD>汾
|
|||
|
|
//DevEBox <20><>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD>
|
|||
|
|
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>mcudev.taobao.com
|
|||
|
|
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>shop389957290.taobao.com
|
|||
|
|
|
|||
|
|
/************************************************************************************************/
|
|||
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
SPI_HandleTypeDef SPI2_Handler; //SPI2<49><32><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
/************************************************************************************************/
|
|||
|
|
|
|||
|
|
//STM32H7<48><37><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>-HAL<41>⺯<EFBFBD><E2BAAF><EFBFBD>汾
|
|||
|
|
//DevEBox <20><>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD>
|
|||
|
|
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>mcudev.taobao.com
|
|||
|
|
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>shop389957290.taobao.com
|
|||
|
|
|
|||
|
|
/************************************************************************************************/
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SPIģ<49><C4A3><EFBFBD>ij<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>룬<EFBFBD><EBA3AC><EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
|||
|
|
//SPI<50>ڳ<EFBFBD>ʼ<EFBFBD><CABC>
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD>SPI2<49>ij<EFBFBD>ʼ<EFBFBD><CABC>
|
|||
|
|
void SPI2_Init(void)
|
|||
|
|
{
|
|||
|
|
SPI2_Handler.Instance=SPI2; //SP2
|
|||
|
|
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.NSSPMode=SPI_NSS_PULSE_DISABLE;//NSS<53>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
|||
|
|
SPI2_Handler.Init.MasterKeepIOState=SPI_MASTER_KEEP_IO_STATE_ENABLE; //SPI<50><49>ģʽIO״̬<D7B4><CCAC><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
|||
|
|
SPI2_Handler.Init.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_256;//<2F><><EFBFBD>岨<EFBFBD><E5B2A8><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4>Ƶ<EFBFBD><C6B5>ֵ:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4>ƵֵΪ256
|
|||
|
|
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);
|
|||
|
|
|
|||
|
|
__HAL_SPI_ENABLE(&SPI2_Handler); //ʹ<><CAB9>SPI2
|
|||
|
|
SPI2_ReadWriteByte(0Xff); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
/************************************************************************************************/
|
|||
|
|
//SPI2<49>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ʹ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//<2F>˺<EFBFBD><CBBA><EFBFBD><EFBFBD>ᱻHAL_SPI_Init()<29><><EFBFBD><EFBFBD>
|
|||
|
|
//hspi:SPI<50><49><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
|
|||
|
|
//STM32H7<48><37><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>-HAL<41>⺯<EFBFBD><E2BAAF><EFBFBD>汾
|
|||
|
|
//DevEBox <20><>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD>
|
|||
|
|
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>mcudev.taobao.com
|
|||
|
|
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>shop389957290.taobao.com
|
|||
|
|
|
|||
|
|
/************************************************************************************************/
|
|||
|
|
|
|||
|
|
|
|||
|
|
void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi)
|
|||
|
|
{
|
|||
|
|
GPIO_InitTypeDef GPIO_Initure;
|
|||
|
|
RCC_PeriphCLKInitTypeDef SPI2ClkInit;
|
|||
|
|
|
|||
|
|
__HAL_RCC_GPIOB_CLK_ENABLE(); //ʹ<><CAB9>GPIOFʱ<46><CAB1>
|
|||
|
|
__HAL_RCC_SPI2_CLK_ENABLE(); //ʹ<><CAB9>SPI2ʱ<32><CAB1>
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>SPI2<49><32>ʱ<EFBFBD><CAB1>Դ
|
|||
|
|
SPI2ClkInit.PeriphClockSelection=RCC_PERIPHCLK_SPI2; //<2F><><EFBFBD><EFBFBD>SPI2ʱ<32><CAB1>Դ
|
|||
|
|
SPI2ClkInit.Spi123ClockSelection=RCC_SPI123CLKSOURCE_PLL; //SPI2ʱ<32><CAB1>Դʹ<D4B4><CAB9>PLL1Q
|
|||
|
|
HAL_RCCEx_PeriphCLKConfig(&SPI2ClkInit);
|
|||
|
|
|
|||
|
|
//PB13,14,15
|
|||
|
|
GPIO_Initure.Pin=GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
|
|||
|
|
GPIO_Initure.Mode=GPIO_MODE_AF_PP; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
GPIO_Initure.Pull=GPIO_PULLUP; //<2F><><EFBFBD><EFBFBD>
|
|||
|
|
GPIO_Initure.Speed=GPIO_SPEED_FREQ_VERY_HIGH; //<2F><><EFBFBD><EFBFBD>
|
|||
|
|
GPIO_Initure.Alternate=GPIO_AF5_SPI2; //<2F><><EFBFBD><EFBFBD>ΪSPI2
|
|||
|
|
HAL_GPIO_Init(GPIOB,&GPIO_Initure); //<2F><>ʼ<EFBFBD><CABC>
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
/************************************************************************************************/
|
|||
|
|
|
|||
|
|
//SPI<50>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD>
|
|||
|
|
//SPI<50>ٶ<EFBFBD>=PLL1Q/<2F><>Ƶϵ<C6B5><CFB5>
|
|||
|
|
//@ref SPI_BaudRate_Prescaler:SPI_BAUDRATEPRESCALER_2~SPI_BAUDRATEPRESCALER_256
|
|||
|
|
//PLL1Qʱ<51><CAB1>һ<EFBFBD><D2BB>Ϊ200Mhz<68><7A>
|
|||
|
|
|
|||
|
|
//STM32H7<48><37><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>-HAL<41>⺯<EFBFBD><E2BAAF><EFBFBD>汾
|
|||
|
|
//DevEBox <20><>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD>
|
|||
|
|
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>mcudev.taobao.com
|
|||
|
|
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>shop389957290.taobao.com
|
|||
|
|
|
|||
|
|
/************************************************************************************************/
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
void SPI2_SetSpeed(u32 SPI_BaudRatePrescaler)
|
|||
|
|
{
|
|||
|
|
assert_param(IS_SPI_BAUDRATE_PRESCALER(SPI_BaudRatePrescaler));//<2F>ж<EFBFBD><D0B6><EFBFBD>Ч<EFBFBD><D0A7>
|
|||
|
|
__HAL_SPI_DISABLE(&SPI2_Handler); //<2F>ر<EFBFBD>SPI
|
|||
|
|
SPI2_Handler.Instance->CFG1&=~(0X7<<28); //λ30-28<32><38><EFBFBD>㣬<EFBFBD><E3A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
SPI2_Handler.Instance->CFG1|=SPI_BaudRatePrescaler;//<2F><><EFBFBD><EFBFBD>SPI<50>ٶ<EFBFBD>
|
|||
|
|
__HAL_SPI_ENABLE(&SPI2_Handler); //ʹ<><CAB9>SPI
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/************************************************************************************************/
|
|||
|
|
//SPI2 <20><>дһ<D0B4><D2BB><EFBFBD>ֽ<EFBFBD>
|
|||
|
|
//TxData:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ֵ:<3A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>
|
|||
|
|
|
|||
|
|
|
|||
|
|
//STM32H7<48><37><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>-HAL<41>⺯<EFBFBD><E2BAAF><EFBFBD>汾
|
|||
|
|
//DevEBox <20><>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD>
|
|||
|
|
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>mcudev.taobao.com
|
|||
|
|
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>shop389957290.taobao.com
|
|||
|
|
|
|||
|
|
/************************************************************************************************/
|
|||
|
|
|
|||
|
|
|
|||
|
|
u8 SPI2_ReadWriteByte(u8 TxData)
|
|||
|
|
{
|
|||
|
|
u8 Rxdata;
|
|||
|
|
HAL_SPI_TransmitReceive(&SPI2_Handler,&TxData,&Rxdata,1, 1000);
|
|||
|
|
return Rxdata; //<2F><><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
/************************************************************************************************/
|
|||
|
|
|
|||
|
|
//STM32H7<48><37><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>-HAL<41>⺯<EFBFBD><E2BAAF><EFBFBD>汾
|
|||
|
|
//DevEBox <20><>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD>
|
|||
|
|
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>mcudev.taobao.com
|
|||
|
|
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>shop389957290.taobao.com
|
|||
|
|
|
|||
|
|
/************************************************************************************************/
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|