LINUX.ORG.RU

История изменений

Исправление KivApple, (текущая версия) :

Тот же opencm3 I2C умеет весьма условно. По крайней мере тогда, когда я его тыкал. Там нормальная поддержка (точнее вроде работающий пример в репозитории) была только для серии STM32F3. HAL, насколько я помню, достаточно низкоуровневый. Та же отправка пакета по I2C это куча вызовов функций в правильной последовательности. И вообще мой велосипед мне кажется куда более удобным, чем существующие аналоги. Например, я могу написать так:

STM32::GPIOPad usart1tx(STM32::GPIOA, STM32::GPIO9, GPIOPad::Mode::ALTFN);
STM32::GPIOPad usart1rx(STM32::GPIOA, STM32::GPIO10, GPIOPad::Mode::INPUT);
STM32::GPIOPad i2c1scl(STM32::GPIOB, STM32::GPIO6, GPIOPad::Mode::ALTFN, GPIOPad::PuPdMode::NONE, GPIOPad::DriverMode::OPENDRAIN);
STM32::GPIOPad i2c1sda(STM32::GPIOB, STM32::GPIO7, GPIOPad::Mode::ALTFN, GPIOPad::PuPdMode::NONE, GPIOPad::DriverMode::OPENDRAIN);
STM32::GPIOPad led(STM32::GPIOC, STM32::GPIO13, GPIOPad::Mode::OUTPUT);

STM32::USART usart1(STM32::USART1, 64, 64, 115200);
STM32::I2C i2c1(STM32::I2C1, 400000);
STM32::USBD usb(&usbDeviceDescr, usbConfigs);

...

while (true) {
    led.toggle();
    Thread::delay(500);
}

...

usart1.printf("Counter = %i\r\n", counter);

А сам по себе HAL я смотрел. Вроде более-менее повторил алгоритм.

Исправление KivApple, :

Тот же opencm3 I2C умеет весьма условно. По крайней мере тогда, когда я его тыкал. Там нормальная поддержка (точнее вроде работающий пример в репозитории) была только для серии STM32F3. HAL, насколько я помню, достаточно низкоуровневый. Та же отправка пакета по I2C это куча вызовов функций в правильной последовательности. И вообще мой велосипед мне кажется куда более удобным, чем существующие аналоги. Например, я могу написать так:

STM32::GPIOPad usart1tx(STM32::GPIOA, STM32::GPIO9, GPIOPad::Mode::ALTFN);
STM32::GPIOPad usart1rx(STM32::GPIOA, STM32::GPIO10, GPIOPad::Mode::INPUT);
STM32::GPIOPad i2c1scl(STM32::GPIOB, STM32::GPIO6, GPIOPad::Mode::ALTFN, GPIOPad::PuPdMode::NONE, GPIOPad::DriverMode::OPENDRAIN);
STM32::GPIOPad i2c1sda(STM32::GPIOB, STM32::GPIO7, GPIOPad::Mode::ALTFN, GPIOPad::PuPdMode::NONE, GPIOPad::DriverMode::OPENDRAIN);
STM32::GPIOPad led(STM32::GPIOC, STM32::GPIO13, GPIOPad::Mode::OUTPUT);
...
while (true) {
    led.toggle();
    Thread::delay(500);
}

А сам по себе HAL я смотрел. Вроде более-менее повторил алгоритм.

Исправление KivApple, :

Тот же opencm3 I2C умеет весьма условно. По крайней мере тогда, когда я его тыкал. Там нормальная поддержка (точнее вроде работающий пример в репозитории) была только для серии STM32F3. HAL, насколько я помню, достаточно низкоуровневый. Та же отправка пакета по I2C это куча вызовов функций в правильной последовательности. И вообще мой велосипед мне кажется куда более удобным, чем существующие аналоги. Например, я могу написать так:

STM32::GPIOPad usart1tx(STM32::GPIOA, STM32::GPIO9, GPIOPad::Mode::ALTFN);
STM32::GPIOPad usart1rx(STM32::GPIOA, STM32::GPIO10, GPIOPad::Mode::INPUT);
STM32::GPIOPad i2c1scl(STM32::GPIOB, STM32::GPIO6, GPIOPad::Mode::ALTFN, GPIOPad::PuPdMode::NONE, GPIOPad::DriverMode::OPENDRAIN);
STM32::GPIOPad i2c1sda(STM32::GPIOB, STM32::GPIO7, GPIOPad::Mode::ALTFN, GPIOPad::PuPdMode::NONE, GPIOPad::DriverMode::OPENDRAIN);
STM32::GPIOPad led(STM32::GPIOC, STM32::GPIO13, GPIOPad::Mode::OUTPUT);
...
while (true) {
    led.toggle();
    Thread::delay(500);
}

Исходная версия KivApple, :

Тот же opencm3 I2C умеет весьма условно. По крайней мере тогда, когда я его тыкал. Там нормальная поддержка (точнее вроде работающий пример в репозитории) была только для серии STM32F3.