搜档网
当前位置:搜档网 › stm32模拟spi代码

stm32模拟spi代码

//先初始化各个端口
//对于时钟和极性问题要先考虑从器件来写(4种模式)
#define MOSI_H GPIO_SetBits(GPIOB, GPIO_Pin_10)
#define MOSI_L GPIO_ResetBits(GPIOB, GPIO_Pin_10)
#define SCLK_H GPIO_SetBits(GPIOB, GPIO_Pin_13)
#define SCLK_L GPIO_ResetBits(GPIOB, GPIO_Pin_13)
#define MISO GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11)

/*
unsigned char SPI_SendByte(unsigned char dt)
{
u8 i;
u8 temp=0;
for(i=8;i>0;i--)
{
if(dt&0x80)MOSI_H;
else MOSI_L;
dt<<=1;
SCLK_H;
__nop();
__nop();
__nop();
temp<<=1;
if(MISO)temp++;
__nop();
__nop();
__nop();
SCLK_L;
}
return temp;
}
*/


unsigned char Simulate_SPI_SendByte(unsigned char dt)
{
u8 i;
u8 temp=0;
for(i=8;i>0;i--)
{
//MOSI准备数据位
if(dt&0x80)MOSI_H;
else MOSI_L;
dt<<=1;

//SCLK产生上升沿
SCLK_H;
__nop();
__nop();
__nop();

//MISO读取收到的数据位,如果是1,那么temp最低位置1,数据位左移
temp<<=1;
if(MISO)temp++;

//SCLK恢复为低电平,并保持一段时间
SCLK_L;
__nop();
__nop();
__nop();
}
return temp;
};




相关主题