Перейти к содержанию
    

HAL: как узнать, что шина i2c реально освободилась

Всем привет. Вопрос гуру.

Пытаюсь в stm32 cube организовать с помощью HAL обмен данными по i2c шине между двумя stm32 платами:
NUCLEO-L053R8 (i2c-slave)
NUCLEO-F746ZG (i2c-master)

Обмен в обе стороны должен быть завершён 100 раз в секунду.

Обнаружил, что код:

HAL_I2C_Master_Transmit_DMA(hi2c, DevAddress, pData, Size);
isTransmitProcess = 1;

вызывает срабатывание калбека MasterTxCpltCallback() до того, как дойдёт до строчки "isTransmit = 1;".

Выглядит, как будто HAL сгрузил pData и Size в dma и отрапортовал, что передача завершена.

При этом dma имеет статус HAL_I2C_STATE_READY. Регистр NTDR при этом равен нулю.

Соответственно, вопрос: как узнать, что шина i2c реально освободилась.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 9/10/2021 at 8:40 AM, rkit said:

Надо проверять на то, что trasmit вернул hal_ok.

это же не значит, что trasmit уже закончил передачу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 9/9/2021 at 8:06 PM, VLshka said:

вызывает срабатывание калбека MasterTxCpltCallback() до того, как дойдёт до строчки "isTransmit = 1;".

Я недавно разбирал работу в обычном режиме с опросом флагов. Событие окончание передачи происходит после загрузки последнего байта в регистр передачи.

А при передаче, проверяется завершение передачи байта от предыдущей транзакции. В теории,есть прерывания DMA по половине и окончанию передачи, в них нужно и смотреть вызов MasterTxCpltCallback(). Или то что там вызывается.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 9/13/2021 at 9:35 PM, VLshka said:

это же не значит, что trasmit уже закончил передачу.

Это означает, что transmit вообще запустился. Не зная этого, ты получаешь гонку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...