VLshka 0 9 сентября, 2021 Опубликовано 9 сентября, 2021 · Жалоба Всем привет. Вопрос гуру. Пытаюсь в 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 реально освободилась. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rkit 4 10 сентября, 2021 Опубликовано 10 сентября, 2021 · Жалоба Надо проверять на то, что trasmit вернул hal_ok. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VLshka 0 13 сентября, 2021 Опубликовано 13 сентября, 2021 · Жалоба On 9/10/2021 at 8:40 AM, rkit said: Надо проверять на то, что trasmit вернул hal_ok. это же не значит, что trasmit уже закончил передачу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
misyachniy 0 7 октября, 2021 Опубликовано 7 октября, 2021 · Жалоба On 9/9/2021 at 8:06 PM, VLshka said: вызывает срабатывание калбека MasterTxCpltCallback() до того, как дойдёт до строчки "isTransmit = 1;". Я недавно разбирал работу в обычном режиме с опросом флагов. Событие окончание передачи происходит после загрузки последнего байта в регистр передачи. А при передаче, проверяется завершение передачи байта от предыдущей транзакции. В теории,есть прерывания DMA по половине и окончанию передачи, в них нужно и смотреть вызов MasterTxCpltCallback(). Или то что там вызывается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rkit 4 7 октября, 2021 Опубликовано 7 октября, 2021 · Жалоба On 9/13/2021 at 9:35 PM, VLshka said: это же не значит, что trasmit уже закончил передачу. Это означает, что transmit вообще запустился. Не зная этого, ты получаешь гонку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться