#define SD_CS_H GPIOA->BSRR=1<<3
#define SD_CS_L GPIOA->BRR=1<<3
#define SD_DI_H GPIOA->BSRR=1<<7
#define SD_DI_L GPIOA->BRR=1<<7
#define SD_CLK_H GPIOA->BSRR=1<<5
#define SD_CLK_L GPIOA->BRR=1<<5
#define SD_DO GPIOA->IDR&(1<<6)
void SdWrite(unsigned char n)
{
unsigned char i;
for(i=8;i;i--)
{
SD_CLK_L;
if(n&0x80)
{
SD_DI_H;
}
n<<=1;
SD_CLK_H;
}
SD_DI_H;
}
unsigned char SdRead()
{
unsigned char n,i;
for(i=8;i;i--)
{
SD_CLK_L;
SD_CLK_H;
n<<=1;
if(SD_DO) n|=1;
}
return n;
}
引脚不变,但不使用硬件SPI,使用IO模拟,以上函数是否可行呢?
RCC->APB2ENR|=1<<2;//先使能外设PORTA时钟
GPIOA->CRL&=0X000F0FFF;
GPIOA->CRL|=0X38303000;
GPIOA->ODR|=0XFFFF;
这是IO的设置,现象是初始化失败
|