还有两天就放假了,整理代码,准备发帖(是不是有点晚)。
没有看见东西啊、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
SPI外设接口
void STM_EVAL_SPIInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
SPI_InitTypeDef SPI_InitStructure;
/* Enable the SPI periph */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
/* Enable SCK, MOSI, MISO and NSS GPIO clocks */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB, ENABLE);
/* Configure the SPI_NSS pin */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Configure the SPI_RST pin */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;//GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* Configure the SPI periph */
GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_0);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_0);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_0);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_3;
/* SPI SCK pin configuration */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* SPI MOSI pin configuration */
//GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
//GPIO_Init(GPIOA, &GPIO_InitStructure);
/* SPI MISO pin configuration */
//GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
//GPIO_Init(GPIOA, &GPIO_InitStructure);
/* SPI configuration -------------------------------------------------------*/
SPI_I2S_DeInit(SPI1);
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
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_16;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
/* Initializes the SPI communication */
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_Init(SPI1, &SPI_InitStructure);
/* Initialize the FIFO threshold */
SPI_RxFIFOThresholdConfig(SPI1, SPI_RxFIFOThreshold_QF);
/* Enable the Rx buffer not empty interrupt */
//SPI_I2S_ITConfig(SPI1, SPI_I2S_IT_RXNE, ENABLE);
/* Enable the SPI Error interrupt */
//SPI_I2S_ITConfig(SPI1, SPI_I2S_IT_ERR, ENABLE);
/* Data transfer is performed in the SPI interrupt routine */
/* Enable the SPI peripheral */
SPI_Cmd(SPI1, ENABLE);
}
uint8_t SPI_SendByte(uint8_t Data)
{
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_SendData8(SPI1, Data);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
return SPI_ReceiveData8(SPI1);
}
uint8_t SPI_ReadByte(void)
{
return SPI_SendByte(0);
}
GPIO模式实现SPI接口
void STM_EVAL_SPIInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* Enable SCK, MOSI, MISO and NSS GPIO clocks */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB, ENABLE);
/* Configure the SPI_NSS, SPI_CLK, pin */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Configure the SPI_RST pin */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;//GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* SPI_MISO pin configuration */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
/****************************************************************/
/* SPIRead */
/* FM1702SL */
/* , */
/* */
/****************************************************************/
uint8_t SPIRead(uint8_t SpiAddress)
{
uint8_t i, rdata;
SpiAddress = SpiAddress << 1;
SpiAddress = SpiAddress | 0x80;
GPIO_ResetBits(GPIOA, GPIO_Pin_5); //SPI_SCK=0;
GPIO_ResetBits(GPIOA, GPIO_Pin_4); //NSS=0;
for(i=0; i<8; i++){
if(SpiAddress&0x80)
GPIO_SetBits(GPIOA, GPIO_Pin_7); //SPI_MOSI=1;
else
GPIO_ResetBits(GPIOA, GPIO_Pin_7); //SPI_MOSI=0;
GPIO_SetBits(GPIOA, GPIO_Pin_5); //SPI_CLK=1;
SpiAddress = SpiAddress << 1;
GPIO_ResetBits(GPIOA, GPIO_Pin_5); //SPI_CLK=0;
}//Send SpiAddress;
rdata=0;
for(i=0; i<8; i++){
GPIO_SetBits(GPIOA, GPIO_Pin_5); //SPI_CLK=1;
rdata = rdata << 1;
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_6)){
rdata=rdata|0x01;
}
GPIO_ResetBits(GPIOA, GPIO_Pin_5); //SPI_CLK=0;
}//Receive data
GPIO_SetBits(GPIOA, GPIO_Pin_4); //NSS=1;
return (rdata);
}
/****************************************************************/
/* SPIWrite */
/* FM1702SL */
/* , */
/* N/A */
/****************************************************************/
void SPIWrite(uint8_t SpiAddress, uint8_t SpiData)
{
uint8_t i;
SpiAddress = SpiAddress << 1;
SpiAddress = SpiAddress & 0x7e;
GPIO_ResetBits(GPIOA, GPIO_Pin_5); //SPI_SCK=0;
GPIO_ResetBits(GPIOA, GPIO_Pin_4); //NSS=0;
for(i=0; i<8; i++) {
if((SpiAddress&0x80)==0x80)
GPIO_SetBits(GPIOA, GPIO_Pin_7); //SPI_MOSI=1;
else
GPIO_ResetBits(GPIOA, GPIO_Pin_7); //SPI_MOSI=0;
GPIO_SetBits(GPIOA, GPIO_Pin_5); //SPI_SCK=1;
SpiAddress = SpiAddress << 1;
GPIO_ResetBits(GPIOA, GPIO_Pin_5); //SPI_SCK=0;
}//Send SpiAddress
for(i=0;i<8;i++){
if ((SpiData&0x80)==0x80)
GPIO_SetBits(GPIOA, GPIO_Pin_7); //SPI_MOSI=1;
else
GPIO_ResetBits(GPIOA, GPIO_Pin_7); //SPI_MOSI=0;
GPIO_SetBits(GPIOA, GPIO_Pin_5); //SPI_SCK=1;
SpiData = SpiData << 1;
GPIO_ResetBits(GPIOA, GPIO_Pin_5); //SPI_SCK=0;
}//Send data;
GPIO_SetBits(GPIOA, GPIO_Pin_4); //NSS=1;
}