Изучаю SPI на STM32f030. Не могу понять почему из регистра DR считывается не правильное значение.
Спойлер
Код: Выделить всё
// Сигнатура
void w25qReadManuf(uint8_t *answer)
{
uint8_t status = W25Q_JEDEC_ID;
uint8_t i;
W25Q_CS_LO();
// Передать команду
while(!LL_SPI_IsActiveFlag_TXE(SPI1));
LL_SPI_TransmitData8(SPI1, status);
while(LL_SPI_IsActiveFlag_BSY(SPI1));
//LL_SPI_ReceiveData8(SPI1);//Очистка буфера
// Прочитать сигнатуру
for(i=0 ; i<3 ; i++)
{
LL_SPI_TransmitData8(SPI1,0xFF);
while(!LL_SPI_IsActiveFlag_RXNE(SPI1));
*(answer++) = LL_SPI_ReceiveData8(SPI1);
}
W25Q_CS_HI();
}
Должно быть 0xC8, 0x40, 0x16.
Если включаю строку LL_SPI_ReceiveData8(SPI1) то информация читается корректно.
Такое впечатление, что в SPI FIFO буфер. В интернете этот нюанс не нашел.


