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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> STM32, I2C, HAL, HAL_I2C_Slave_Receive_IT
Метценгерштейн
сообщение May 30 2016, 08:18
Сообщение #16


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

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



ерунда какая- то творится с I2C.
Принимает на прерываниях один пакет, дальше ничего не принимает и виснет.
Заметил, что
Код
while (HAL_I2C_Slave_Receive_IT( &hi2c1, RxBuf, (sizeof(RxBuf)/sizeof(RxBuf[0])) ) != HAL_OK);
while (HAL_I2C_GetState(&hi2c1) != HAL_I2C_STATE_READY);

вторая строчка выдает
Код
HAL_I2C_STATE_BUSY


Кто-то сталкивался? Как корректно вообще работать с I2C на прерываниях и HAL?
Go to the top of the page
 
+Quote Post
Метценгерштейн
сообщение May 31 2016, 14:20
Сообщение #17


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

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



при работе с другим МК STM32 в качестве мастера, все ок.
Как только подключаюсь к другой железке, она мастер, принимаю один пакет, а после второго пакета висну, в регистре ISR висит бит BUSY.
Из-за чего может быть?
Go to the top of the page
 
+Quote Post
delamoure
сообщение Sep 20 2016, 13:45
Сообщение #18


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

Группа: Свой
Сообщений: 176
Регистрация: 2-04-08
Из: Днепропетровск
Пользователь №: 36 406



Удалось побороть?


--------------------
Ребята, как же это вы без гравицапы пепелац выкатываете из гаража? Это непорядок. ©
Go to the top of the page
 
+Quote Post
k155la3
сообщение Sep 21 2016, 10:35
Сообщение #19


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

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



Цитата(Метценгерштейн @ May 31 2016, 17:20) *
при работе с другим МК STM32 в качестве мастера, все ок.
Как только подключаюсь к другой железке, она мастер, принимаю один пакет, а после второго пакета висну, в регистре ISR висит бит BUSY.
Из-за чего может быть?

Проверяйте отработку слейва по ACK-NACK.
Возможно также, что в этом случае "залип" мастер, ожидающий готовности slave.
Посмотрите осцилографом, что твроится на шине. А лучше лог. анализатором.

Кроме того ожидание в стиле
while( GetState() ) { forever} не феншуй, по причине возможного зависания и постоянного дергания опрашиваемой периферии.
(если это не опрос флага-переменной, которая устанавливается в векторе прерывания)
Go to the top of the page
 
+Quote Post
Метценгерштейн
сообщение Oct 6 2016, 08:47
Сообщение #20


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

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



Цитата(Метценгерштейн @ May 31 2016, 17:20) *
при работе с другим МК STM32 в качестве мастера, все ок.
Как только подключаюсь к другой железке, она мастер, принимаю один пакет, а после второго пакета висну, в регистре ISR висит бит BUSY.
Из-за чего может быть?

Побороть не удалось. HAL на кубе, применительно к I2C глючный. Замечено, что тот же код работает на разных МК совершенно по разному.
Пришлось на регистрах писать.
Go to the top of the page
 
+Quote Post

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

 


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


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