Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Чтение после записи... SPI не принимает байт
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Сергей Владимирович
Всем привет! Я только учусь! Пробую работать с акселерометром L3GD20, установленным на плате STM32F3 Discovery. Читаю регистр WHO_AM_I (0Fh)...

CODE

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 пуст!!!... не смотря на это анализатор показывает что акселерометр ответил верно...

Нажмите для просмотра прикрепленного файла

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

Sergey_Aleksandrovi4
Цитата
но SPI1_DR пуст!!!

Там 0xFFFF после предыдущей транзакции, верно?
Попробуйте извлекать данные из SPI_DR после каждой передачи, даже если они Вам не нужны. Если этого не делать, вновьпринятые данные не будут перезаписывать старые: ошибка Overrun с установкой соответствующего флага в SPI_SR. Т.е. при начале приёма буфер приёмника всегда должен быть готов (очищен).
PS пишу по памяти, с STM довольно давно не работал, лень документацию перечитывать.
Хм... посмотрел на дату сообщение и понял, что "слегка" опоздал с ответом. И не удалить теперь.
k155la3
Цитата(Сергей Владимирович @ Aug 11 2017, 00:59) *
... не смотря на это анализатор показывает что акселерометр ответил верно...

Если на лог.анализаторе - "то" а в контреллере - нет, значит дело в софте приема.
Для начала - отладьте (проверка) работу по SPI.
- отключите все слейвы от линий SPI контроллера.
- соедините вход и выход SPI (MISO + MOSI). SCK и CS не нужны.
- выполните простой тест софта: выдать на SPI сотню чисел с инкриментом (0,1,2 etc) и принять их в массив.
Убедиться, что принятое соовтетствует переданному.
Дальше - по ситуации, в зависимости от того - "прокатило" или нет sm.gif

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

Сергей Борщ
QUOTE (k155la3 @ Oct 26 2017, 13:32) *
ps - А каким анализатором пользуетесь ?
На алиэкспрессе искать "8-канальный логический анализатор", стоит 4.5 евро, штука исключительно полезная.
k155la3
Цитата(Сергей Борщ @ Oct 26 2017, 13:53) *
На алиэкспрессе искать "8-канальный логический анализатор", стоит 4.5 евро, штука исключительно полезная.

Я использую такое с софтом Saleae. На скриншоте выше - похожий интерфейс, но кое-что отличается.
Может TS поделится инф. sm.gif
Jenya7
Цитата(Сергей Владимирович @ Aug 11 2017, 02:59) *
Почему так??? Что я упускаю???[/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);
}
Сергей Борщ
QUOTE (k155la3 @ Oct 26 2017, 14:04) *
На скриншоте выше - похожий интерфейс, но кое-что отличается.
Просто картинка обрезана.
toweroff
Цитата(Сергей Борщ @ Oct 26 2017, 13:53) *
На алиэкспрессе искать "8-канальный логический анализатор", стоит 4.5 евро, штука исключительно полезная.

это который на супрессе?
Сергей Борщ
QUOTE (toweroff @ Oct 27 2017, 10:41) *
это который на супрессе?
да
jcxz
Цитата(toweroff @ Oct 27 2017, 10:41) *
это который на супрессе?

оне все на нём rolleyes.gif
toweroff
Цитата(jcxz @ Oct 27 2017, 14:09) *
оне все на нём rolleyes.gif

ну нет, там и на ксае попадались. Но ценник оно да, более другой biggrin.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.