20260324
This commit is contained in:
105
IAPV1.1/Driver/spi/spi.c
Normal file
105
IAPV1.1/Driver/spi/spi.c
Normal file
@ -0,0 +1,105 @@
|
||||
#include "spi.h"
|
||||
|
||||
void SPI2_Init(void)
|
||||
{
|
||||
GPIO_InitTypeDef GPIO_InitStructure;
|
||||
SPI_InitTypeDef SPI_InitStructure;
|
||||
|
||||
|
||||
// /* Enable SCK, MOSI and MISO GPIO clocks */
|
||||
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC|RCC_AHBPeriph_GPIOB, ENABLE);
|
||||
|
||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//<2F><><EFBFBD><EFBFBD>
|
||||
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//<2F><><EFBFBD><EFBFBD>
|
||||
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;//ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
|
||||
GPIO_Init(GPIOC, &GPIO_InitStructure);
|
||||
GPIO_SetBits(GPIOC, GPIO_Pin_6);
|
||||
|
||||
|
||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//<2F><><EFBFBD><EFBFBD>
|
||||
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//<2F><><EFBFBD><EFBFBD>
|
||||
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;//ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
|
||||
GPIO_Init(GPIOB, &GPIO_InitStructure);
|
||||
GPIO_SetBits(GPIOB, GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15);
|
||||
|
||||
GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);
|
||||
GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2);
|
||||
GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);
|
||||
// GPIO_PinAFConfig(GPIOC, GPIO_PinSource7, GPIO_AF_SPI2);//GPIO_PinSource7
|
||||
/* SPI configuration -------------------------------------------------------*/
|
||||
// SPI_I2S_DeInit(SPI2);
|
||||
/* Enable the SPI periph */
|
||||
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
|
||||
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;//SPI<50><49><EFBFBD><EFBFBD>Ϊ˫<CEAA><CBAB>˫<EFBFBD><CBAB>ȫ˫<C8AB><CBAB>
|
||||
SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //<2F><><EFBFBD><EFBFBD>SPI<50><49><EFBFBD><EFBFBD>ģʽ:<3A><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>spi
|
||||
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
|
||||
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
|
||||
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
|
||||
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
|
||||
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;
|
||||
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
|
||||
SPI_InitStructure.SPI_CRCPolynomial = 7;
|
||||
SPI_Init(SPI2, &SPI_InitStructure);
|
||||
SPI_Cmd(SPI2, ENABLE); //ʹ<><CAB9>SPI<50><49><EFBFBD><EFBFBD>
|
||||
// SPI2_SetSpeed(1);
|
||||
// SPI2_ReadWrite(0xff);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
//SPI2<49>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD>
|
||||
//SpeedSet:0~7
|
||||
//SPI<50>ٶ<EFBFBD>=fAPB1/2^(SpeedSet+1)
|
||||
//APB1ʱ<31><CAB1>һ<EFBFBD><D2BB>Ϊ36Mhz
|
||||
void SPI2_SetSpeed(u8 SpeedSet)
|
||||
{
|
||||
SpeedSet&=0X07; //<2F><><EFBFBD>Ʒ<EFBFBD>Χ
|
||||
SPI2->CR1&=0XFFC7;
|
||||
SPI2->CR1|=SpeedSet<<3; //<2F><><EFBFBD><EFBFBD>SPI2<49>ٶ<EFBFBD>
|
||||
SPI2->CR1|=1<<6; //SPI<50>豸ʹ<E8B1B8><CAB9>
|
||||
}
|
||||
//SPI <20>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD>
|
||||
//SpeedSet:
|
||||
//SPI_BaudRatePrescaler_2 2<><32>Ƶ (SPI 36M@sys 72M)
|
||||
//SPI_BaudRatePrescaler_8 8<><38>Ƶ (SPI 9M@sys 72M)
|
||||
//SPI_BaudRatePrescaler_16 16<31><36>Ƶ (SPI 4.5M@sys 72M)
|
||||
//SPI_BaudRatePrescaler_256 256<35><36>Ƶ (SPI 281.25K@sys 72M)
|
||||
|
||||
//void SPI2_SetSpeed(u8 SpeedSet)
|
||||
//{
|
||||
// SPI_InitTypeDef SPI_InitStructure;
|
||||
//
|
||||
// SPI_InitStructure.SPI_BaudRatePrescaler = SpeedSet ;
|
||||
// SPI_Init(SPI2, &SPI_InitStructure);
|
||||
// SPI_Cmd(SPI2,ENABLE);
|
||||
//}
|
||||
//SPI2 <20><>дһ<D0B4><D2BB><EFBFBD>ֽ<EFBFBD>
|
||||
//TxData:Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:<3A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>
|
||||
u8 SPI2_ReadWriteByte(u8 TxData)
|
||||
{
|
||||
u16 retry=0;
|
||||
while((SPI2->SR&1<<1)==0) //<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
retry++;
|
||||
if(retry>=0XFFFE)return 0; //<2F><>ʱ<EFBFBD>˳<EFBFBD>
|
||||
}
|
||||
SPI2->DR=TxData; //<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>byte
|
||||
retry=0;
|
||||
while((SPI2->SR&1<<0)==0) //<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>byte
|
||||
{
|
||||
retry++;
|
||||
if(retry>=0XFFFE)return 0; //<2F><>ʱ<EFBFBD>˳<EFBFBD>
|
||||
}
|
||||
return SPI2->DR; //<2F><><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user