Например TDA7294

Форум РадиоКот • Просмотр темы - STM32F303 + гироскоп WT901 , не читает с нужного регистра
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пт ноя 28, 2025 07:03:37

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: STM32F303 + гироскоп WT901 , не читает с нужного регистра
СообщениеДобавлено: Пт сен 27, 2019 20:55:56 
Говорящий с текстолитом
Аватар пользователя

Карма: 16
Рейтинг сообщений: 236
Зарегистрирован: Вт апр 03, 2012 20:36:41
Сообщений: 1662
Откуда: Сочи
Рейтинг сообщения: 0
Пытаюсь подружить STM32F303 и WT901 по I2C шине.
Не хотит читать с нужного регистра.
Читает не известно с какого адреса , но что бы добраться до нужных мне данных, надо прочитать больше 150 байт.
код
Спойлерvoid GYRO_READ_I2C2(uint8_t HardSlaveAddr, uint16_t ExtSlaveAddress,uint8_t NumBytes, uint8_t *buf)
{
int DataNum = 0;
I2C2->CR2 = (1<<16) | (HardSlaveAddr<<1);
while (!(I2C2->ISR & I2C_ISR_TXE) );
I2C2->TXDR = ExtSlaveAddress;
I2C2->CR2 |= I2C_CR2_START;
while (!(I2C2->ISR & I2C_ISR_TC) ){};
I2C2->CR2 = I2C_CR2_AUTOEND | (NumBytes<<16) |
(HardSlaveAddr<<1) |
I2C_CR2_RD_WRN |
I2C_CR2_NACK;
I2C2->CR2 |= I2C_CR2_START;
while(DataNum != NumBytes)
{
while(LL_I2C_IsActiveFlag_RXNE(I2C2) == RESET){};
buf[DataNum] = LL_I2C_ReceiveData8(I2C2);
DataNum++;
}
while(LL_I2C_IsActiveFlag_STOP(I2C2) == RESET){};
LL_I2C_ClearFlag_STOP(I2C2);
}


Вызов GYRO_READ_I2C2 (0x50,0x3D,6,rd_value); //Адрес гироскопа, адрес регистра,количество байт


Картинка с анализатора
Изображение
В анализаторе стоит 8бит.
Делал для того что бы сравнить с картинкой из даташита.
Вот она.
Изображение
Не могу понять что не хватает.
Гироскоп отзывается, и передает свои данные, но не берет номер регистра, откуда читать.
Вот даташит на гироскоп, нужное на 47 странице документа
Вложение:
1.PDF [2.69 MiB]
Скачиваний: 342

Может кто что подскажет ?
СТМ занялся не давно многое еще не понятно.
И на F3 мало примеров.
А на этот гироскоп, все примеры для уарта, для I2C не нашел.
Вложение:
screenshot.png [10.13 KiB]
Скачиваний: 315


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32F303 + гироскоп WT901 , не читает с нужного регист
СообщениеДобавлено: Пт сен 27, 2019 21:18:30 
Говорящий с текстолитом

Карма: -7
Рейтинг сообщений: 187
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1642
Рейтинг сообщения: 2
Не могу понять что не хватает.
Гироскоп отзывается, и передает свои данные, но не берет номер регистра, откуда читать.
На Ваших осциллограммах видно, что из фазы записи в фазу чтения Вы переходите выполняя на шине СТОП, затем СТАРТ.
На картинках из даташита (хоть там очень мелко и трудно разобрать), но судя по всему переход там выполняется выполнением на шине ПОВТОРНОГО СТАРТА (или ещё это называют - РЕСТАРТ).
Разные I2C-чипы немного по-разному отрабатывают такие переходы. Некоторым всё равно: и СТОП-СТАРТ-ом переходят в чтение, и ПОВТОРНЫМ СТАРТОМ. Но другие чипы требуют совершенно конкретной операции (или СТОП-СТАРТ или ПОВТОРНЫЙ СТАРТ). Которая обычно явно указывается в даташите. В этом даташите вроде не находится явного указания, но на картинке показан похоже ПОВТОРНЫЙ СТАРТ. Попробуйте выполнить его.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32F303 + гироскоп WT901 , не читает с нужного регист
СообщениеДобавлено: Пт сен 27, 2019 22:22:58 
Говорящий с текстолитом
Аватар пользователя

Карма: 16
Рейтинг сообщений: 236
Зарегистрирован: Вт апр 03, 2012 20:36:41
Сообщений: 1662
Откуда: Сочи
Рейтинг сообщения: 0
Вроде и через релоад пробовал, не заводилось совсем, повисал при отправке адреса на чтение.
Попробую еще раз помучать.
Так вроде покрупнее.
Вложение:
Изменение размера 11.jpg [74.09 KiB]
Скачиваний: 302


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32F303 + гироскоп WT901 , не читает с нужного регист
СообщениеДобавлено: Вс сен 29, 2019 20:19:44 
Говорящий с текстолитом
Аватар пользователя

Карма: 16
Рейтинг сообщений: 236
Зарегистрирован: Вт апр 03, 2012 20:36:41
Сообщений: 1662
Откуда: Сочи
Рейтинг сообщения: 0
Спасибо за пинок в нужную сторону.
Я чет рестарт с релоадом попутал, поэтому и не получалось
Изменил строку в такой вид
I2C2->CR2 = I2C_CR2_AUTOEND | (NumBytes<<16) |
(HardSlaveAddr<<1) | I2C_CR2_START |
I2C_CR2_RD_WRN |
I2C_CR2_NACK;
И все заработало как надо.


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y