資源簡介
使用GPIO端口模擬SPi協(xié)議,可以根據(jù)端口設(shè)置,自行修改宏定義,修改引腳時鐘

代碼片段和文件信息
#include?“bsp_spi.h“
#include?“delay.h“
void?SPI_Gpio_Init(void)
{
GPIO_InitTypeDef??GPIO_InitStruct;
RCC_AHBPeriphClockCmd(SPI_RCC??ENABLE);
GPIO_InitStruct.GPIO_Mode?=?GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_OType?=??GPIO_OType_PP;
GPIO_InitStruct.GPIO_Pin?=?SPI_CS_PIN?|?SPI_CLK_PIN?|?SPI_MOSI_PIN;
GPIO_InitStruct.GPIO_PuPd?=?GPIO_PuPd_DOWN;
GPIO_InitStruct.GPIO_Speed?=?GPIO_Speed_Level_3;
GPIO_Init(SPI_GPIOx?&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin?=?SPI_MISO_PIN;
GPIO_InitStruct.GPIO_Mode?=?GPIO_Mode_IN;
GPIO_Init(SPI_GPIOx?&GPIO_InitStruct);
GPIO_SetBits(SPI_GPIOxSPI_CS_PIN);
GPIO_SetBits(SPI_GPIOxSPI_MISO_PIN);
GPIO_ResetBits(SPI_GPIOx??SPI_CLK_PIN);
}
void?SPI_Send_Data(uint8_t?data)
{
uint8_t?i=0;
for(i=0?;?i<8?;?i++)
{
if(data?&?0x80)
{
GPIO_SetBits(SPI_GPIOx??SPI_MOSI_PIN);
}
else
{
GPIO_ResetBits(SPI_GPIOx??SPI_MOSI_PIN);
}
data?<<=1;
GPIO_SetBits(SPI_GPIOx??SPI_CLK_PIN);
delay_us(1);
GPIO_ResetBits(SPI_GPIOx??SPI_CLK_PIN);
delay_us(1);
}
}
uint8_t?SPI_Get_Data(void)
{
uint8_t?i=0;
uint8_t?redata=0;
for(i=0?;?i<8?;?i++)
{
GPIO_SetBits(SPI_GPIOx??SPI_CLK_PIN);
if(GPIO_ReadInputDataBit(SPI_GPIOx??SPI_MISO_PIN))
{
redata?|=?(0x01<<(7-i));
}
delay_us(1);
GPIO_ResetBits(SPI_GPIOx??SPI_CLK_PIN);
delay_us(1);
}
return?redata;
}
void?SPI_CS_Status(uint8_t?status)
{
if(status?==1)
GPIO_SetBits(SPI_GPIOx??SPI_CS_PIN);
else?if(status?==0)
GPIO_ResetBits(SPI_GPIOx??SPI_CS_PIN);
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????537??2019-05-22?19:44??bsp_spi.h
?????文件???????1645??2019-05-22?19:44??bsp_spi.c
-----------?---------??----------?-----??----
?????????????????2182????????????????????2
評論
共有 條評論