реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Чтение после записи... SPI не принимает байт, STM32F3 Discovery + L3GD20
Сергей Владимиро...
сообщение Aug 10 2017, 21:59
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 24-05-13
Пользователь №: 76 966



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

Прикрепленное изображение


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

Go to the top of the page
 
+Quote Post
Sergey_Aleksandr...
сообщение Oct 26 2017, 09:58
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 168
Регистрация: 8-10-08
Из: РФ Смоленск
Пользователь №: 40 764



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

Там 0xFFFF после предыдущей транзакции, верно?
Попробуйте извлекать данные из SPI_DR после каждой передачи, даже если они Вам не нужны. Если этого не делать, вновьпринятые данные не будут перезаписывать старые: ошибка Overrun с установкой соответствующего флага в SPI_SR. Т.е. при начале приёма буфер приёмника всегда должен быть готов (очищен).
PS пишу по памяти, с STM довольно давно не работал, лень документацию перечитывать.
Хм... посмотрел на дату сообщение и понял, что "слегка" опоздал с ответом. И не удалить теперь.
Go to the top of the page
 
+Quote Post
k155la3
сообщение Oct 26 2017, 10:32
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(Сергей Владимирович @ Aug 11 2017, 00:59) *
... не смотря на это анализатор показывает что акселерометр ответил верно...

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

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

Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 26 2017, 10:53
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



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


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
k155la3
сообщение Oct 26 2017, 11:04
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



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

Я использую такое с софтом Saleae. На скриншоте выше - похожий интерфейс, но кое-что отличается.
Может TS поделится инф. sm.gif
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Oct 26 2017, 11:14
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(Сергей Владимирович @ 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);
}
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 26 2017, 13:40
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (k155la3 @ Oct 26 2017, 14:04) *
На скриншоте выше - похожий интерфейс, но кое-что отличается.
Просто картинка обрезана.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
toweroff
сообщение Oct 27 2017, 07:41
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



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

это который на супрессе?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 27 2017, 10:03
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



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


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
jcxz
сообщение Oct 27 2017, 11:09
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



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

оне все на нём rolleyes.gif
Go to the top of the page
 
+Quote Post
toweroff
сообщение Oct 27 2017, 18:35
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



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

ну нет, там и на ксае попадались. Но ценник оно да, более другой biggrin.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th June 2025 - 09:57
Рейтинг@Mail.ru


Страница сгенерированна за 0.01435 секунд с 7
ELECTRONIX ©2004-2016