Перейти к содержанию
    

Чтение после записи... SPI не принимает байт

Всем привет! Я только учусь! Пробую работать с акселерометром L3GD20, установленным на плате STM32F3 Discovery. Читаю регистр WHO_AM_I (0Fh)...

 


SPI1_CS_Set(LOW);

SPI1_DR = 0x008F;
while (!(SPI1_SR & (1<<1)));

SPI1_CS_Set(HIGH);

USART1_SendByte(SPI1_DR>>8);

...получаю вразумительный ответ 0xD4. Теперь читаю CTRL_REG1 (20h), ответ 0x07. Записываю в него 0x1F...

 

SPI1_CS_Set(LOW);

SPI1_DR = 0x0F20;
while (!(SPI1_SR & (1<<1)));

SPI1_CS_Set(HIGH);

И заново читаю (20h), чтобы проверить, но SPI1_DR пуст!!!... не смотря на это анализатор показывает что акселерометр ответил верно...

 

post-76966-1502400926_thumb.jpg

 

Считать регистр акселерометра получается только со второго раза... Почему так??? Что я упускаю???

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

но SPI1_DR пуст!!!

Там 0xFFFF после предыдущей транзакции, верно?

Попробуйте извлекать данные из SPI_DR после каждой передачи, даже если они Вам не нужны. Если этого не делать, вновьпринятые данные не будут перезаписывать старые: ошибка Overrun с установкой соответствующего флага в SPI_SR. Т.е. при начале приёма буфер приёмника всегда должен быть готов (очищен).

PS пишу по памяти, с STM довольно давно не работал, лень документацию перечитывать.

Хм... посмотрел на дату сообщение и понял, что "слегка" опоздал с ответом. И не удалить теперь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

... не смотря на это анализатор показывает что акселерометр ответил верно...

Если на лог.анализаторе - "то" а в контреллере - нет, значит дело в софте приема.

Для начала - отладьте (проверка) работу по SPI.

- отключите все слейвы от линий SPI контроллера.

- соедините вход и выход SPI (MISO + MOSI). SCK и CS не нужны.

- выполните простой тест софта: выдать на SPI сотню чисел с инкриментом (0,1,2 etc) и принять их в массив.

Убедиться, что принятое соовтетствует переданному.

Дальше - по ситуации, в зависимости от того - "прокатило" или нет :)

 

ps - А каким анализатором пользуетесь ?

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ps - А каким анализатором пользуетесь ?
На алиэкспрессе искать "8-канальный логический анализатор", стоит 4.5 евро, штука исключительно полезная.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На алиэкспрессе искать "8-канальный логический анализатор", стоит 4.5 евро, штука исключительно полезная.

Я использую такое с софтом Saleae. На скриншоте выше - похожий интерфейс, но кое-что отличается.

Может TS поделится инф. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почему так??? Что я упускаю???[/b]

 

даже если вы только пишете в СПИ надо вычитать дату

 

uint32_t SPI_TransferByte(SPI_TypeDef *SPIx, uint8_t data)
{
    uint32_t timeout;

    // All data transmitted/received but SPI may be busy so wait until done.
   // timeout = SPI_DELAY;
    while (SPIx->SR & SPI_I2S_FLAG_BSY) { /* if(!timeout--) return SPI_ERR; */}

    // Setting the Data Register (DR) transmits the byte of data on MOSI.
    SPIx->DR = data;

    //  Wait for any data on MISO pin to be received.
   // timeout = SPI_DELAY;
    while (!(SPIx->SR & SPI_I2S_FLAG_RXNE)) {/* if(!timeout--) return SPI_ERR;*/ }

    //  Return the data received on MISO pin.
    return (uint8_t)(SPIx->DR);
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На скриншоте выше - похожий интерфейс, но кое-что отличается.
Просто картинка обрезана.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На алиэкспрессе искать "8-канальный логический анализатор", стоит 4.5 евро, штука исключительно полезная.

это который на супрессе?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

оне все на нём :rolleyes:

ну нет, там и на ксае попадались. Но ценник оно да, более другой :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...