|
stm32 i2c |
|
|
|
Aug 12 2011, 22:29
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046

|
У меня тоже он че-то не идет. Работает некоторое время, потом виснет. помогает только полный рестарт i2c + передергивание вручную SCL. прерывания забустил. Также есть несколько веток (типа https://my.st.com/public/STe2ecommunities/m...urrentviews=304 ) на их форуме, тоже без решений по сути. Сделал софтовый I2C, благо, шина не сильно нагружена
|
|
|
|
|
Jul 10 2012, 07:29
|
Участник

Группа: Участник
Сообщений: 18
Регистрация: 6-11-11
Пользователь №: 68 153

|
Еще вопрос
Пытаюсь запустить обмен по шине на прерываниях. Так вот не пойму, у них прерывание по Start bit send работает в принципе? То есть выставляю в I2C1->CR1 бит I2C_CR_START. По идее, после генерации старта на шине я должен попасть в прерывание I2C1_EV_IRQHandler() и там увидеть выставленный фдаг SB в SR1, однако, в прерывание не попадаю. Или я что то не так понял?
Другие прерывания вроде работают (например ADDR TxE). Прерывания разрешены, переферия затактирована...
|
|
|
|
|
Jul 11 2012, 08:32
|
Знающий
   
Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725

|
Цитата(Dron_Gus @ Nov 8 2009, 20:57)  Теперь только ДМА. У меня же основная засада в том, что заранее неизвестно, сколько данных отдаст периферийное устройство. Количество данных идет в первом байте. Т.е. ДМА не мой вариант. Это как так? Мастер не знает, сколько спрашивает? Протокол I2C весьма детерминированный. Мастер определяет, сколько читать/писать. Если у ведомого запросить больше, чем он может дать, он выставит NACK. Это ловится в прерывании, обмен завершается, DMA останавливается. Все чисто. Не глядел еще примеры от ST: в свое время написал свою поддержку, работающую по прерываниям и с использованием DMA, работает стабильно.
|
|
|
|
|
Jul 18 2012, 09:26
|
Участник

Группа: Участник
Сообщений: 27
Регистрация: 4-03-07
Пользователь №: 25 875

|
Прошу прощения, разобрался, напутал в чтении.
Сообщение отредактировал sls_ - Jul 18 2012, 12:41
|
|
|
|
|
Mar 8 2013, 18:50
|
Группа: Новичок
Сообщений: 1
Регистрация: 1-03-13
Пользователь №: 75 855

|
Всем доброго времени суток! Помогите разобраться с опросом MS5611, никак не могу прочитать два байта при опросе, читается старший и все... Может кто сталкивался уже?
|
|
|
|
|
Mar 11 2013, 08:49
|
Знающий
   
Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725

|
Цитата(LeonVS @ Mar 8 2013, 19:50)  Всем доброго времени суток! Помогите разобраться с опросом MS5611, никак не могу прочитать два байта при опросе, читается старший и все... Может кто сталкивался уже? Что значит "читается старший и все"? Что значит "всё", то есть, как это проявляется: выставляется NACK, либо I2C виснет вообще, либо младший байт неправильный по содержанию? Как можно вообще так пространно вопросы ставить и потом на ответы надеяться?...
|
|
|
|
|
Jul 10 2013, 09:00
|
Группа: Новичок
Сообщений: 4
Регистрация: 9-07-13
Из: СПб
Пользователь №: 77 447

|
Доброго времени суток. Юзаю i2c на STM32F4DISCOVERY для опроса датчика. Использую библиотеку CPAL. Появилась проблема, которая вот уже много времени гложет мозг. Суть в следующем. CPAL проверяет таймауты, для чего на CPAL у меня выделен TIM3, по прерыванию раз в мс вызывается библиотечная функция CPAL_I2C_TIMEOUT_Manager(). И все вроде хорошо. НО! Возникают моменты, когда программа затыкается на __CPAL_I2C_TIMEOUT(). Это дефайн, который представляет из себя цикл, выход из которого возможен по одному из двух условий: 1) наступило ожидаемое событие (например, скинулся бит BUSY статусного регистра); 2) превышен лимит ожидания. То есть, если щелкает таймер, то рано или поздно цикл будет покинут. НО! При зависании в __CPAL_I2C_TIMEOUT() таймер хоть и работает, и выставлены нужные флаги, но прерывание, и соответственно, подсчет таймингов, не вызываются. Привожу рисунок, на нем - собственно место затыка во время отладки, а также регистры 3-го таймера. Ниже по коду в комментах - определение самой __CPAL_I2C_TIMEOUT()
Эскизы прикрепленных изображений
|
|
|
|
|
Jul 10 2013, 09:43
|
Местный
  
Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866

|
Цитата(drcepera @ Jul 10 2013, 13:00)  таймер хоть и работает, и выставлены нужные флаги, но прерывание, и соответственно, подсчет таймингов, не вызываются. Так определите, кто (где, почему) запретил прерывание, если оно не вызывается.
--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|