我用IO模拟SPI,发现始终MOSI没有波形,不知为何?当我在主函数中调用WriteSpi(0xaa)时。
void SDGPIOInit(void)
{
RCC->APB2ENR |= 1<<2;//打开Porta端口的时钟
GPIOA->CRL &= 0x000fffff;//PA5,6,7
GPIOA->CRL |= 0x33800000;//PA6,7配置成推挽输出,PA5配置成上拉输入
GPIOA->ODR |=0xc0;//把最高两位置1,其余都为0
RCC->APB2ENR |= 1 << 3;//打开PB
GPIOB->CRL &= 0xffffff0f;//设置PB0
GPIOB->CRL |= 0x000000030; //PB0推挽输出
GPIOB->ODR |= 0x01 ;
}
u8 ReadSpi(void)
{
u8 temp = 0;
u8 i = 0;
CLK = 1;
for(i = 0; i < 8; i++)
{
temp <<= 1;
CLK = 0;
delay_us(5);
temp |= MISO;
CLK = 1;
delay_us(5);
}
return temp;
}
void WriteSpi(u8 data)
{
u8 i = 0;
CLK = 1;
for(i = 0; i < 8; i++)
{
MOSI = (data & 0x80);
CLK = 0;
delay_us(5);
CLK = 1;
delay_us(5);
data <<= 1;
}
}
|