已解决。
unsigned char w25q64spi_write(unsigned char d)
{
SPI1->DR;
SPI1->DR = d;
while (0 == (SPI1->SR & MASK_RXNE)) {}
return SPI1->DR;
}
这个函数改成这样:
unsigned char w25q64spi_write(unsigned char d)
{
SPI1->DR;
*((unsigned char *)&SPI1->DR) = d;
while (0 == (SPI1->SR & MASK_RXNE)) {}
return SPI1->DR;
}
就可以了。
说明:ST的新MCU的SPI带有FIFO。当传输位数小于等于8时,如果对DR进行16BIT写,它会把这个16BIT变成多个传输放到FIFO中。
|