Quantcast
Channel: Linux.org.ru: Форум (тех. форум)
Viewing all articles
Browse latest Browse all 73832

STM32 I2C

$
0
0

Написал вот такой класс для работы с модулем I2C на STM32:

https://github.com/KivApple/ControllerFramework/blob/a07c28b93f160b2f1fddaf07...

https://github.com/KivApple/ControllerFramework/blob/a07c28b93f160b2f1fddaf07...

Используются примитивы BinarySemaphore и Mutex от FreeRTOS (простейшие C++ обёртки), поэтому вряд ли проблема в них.

Для теста общаюсь с MPU6050. Делаю следующие операции:

Прочитать регистр 0x75 (по факту отправка 1 байта, а потом приём 1 байта)
Записать 0 регистр в регистр 0x6B (по факту отправка 2 байт)
Прочитать 16-битный регистр 0x3B (по факту отправка 1 байта и приём 2 байт)
Подождать полсекунды и повторить

В настоящий момент код вроде как отлично работает, однако для этого мне пришлось добавить отключение тактирования модуля I2C после каждой операции и включение его лишь непосредственно перед ней. Без этого при компиляции с -O2 через какое-то время работы происходила ошибка чтения 16-битного регистра и после этого ни одной успешной операции.

Мне такой подход не нравится, потому что я не смогу добавить поддержку режима slave (модуль же отключен всё время, пока не передаёт с режиме master). Что я делаю не так?

 ,


Viewing all articles
Browse latest Browse all 73832

Trending Articles