Хотя я еще не использовал STM32CubeIDE, это - AFAIK - по сути, комбинация STM32CubeMX и Atollic Truestudio. Мои предложения ниже частично основаны на моем опыте с ними.
Относительно драйверов ... Маловероятно, что упомянутые вами драйверы - для ЖК-дисплея и связи Modbus - будут работать без изменений. Тем не менее, если вас не пугает этот факт, читайте дальше.
Начните с простого
Если вы никогда ранее не программировали для STM32, лучше начать с чего-то более простого - прежде чем пытаться реализовать или интегрировать драйвер ЖК-дисплея и функциональность RS485. Иди, прежде чем бежать, как говорится.
Начните с простого переключения светодиода.
while (1) {
HAL_Delay(500);
HAL_GPIO_TogglePin(MyLED_Port, MyLED_Pin);
}
Затем попробуйте установить связь по UART. Я лично предпочитаю использовать для этого низкоуровневую библиотеку, поскольку она предлагает значительно больший контроль для получения последовательных данных. Например, отправка байта через UART с использованием интерфейса LL выглядит как
uint8_t byte = 'a';
LL_USART_TransmitData8(USART2, byte);
Обратите внимание, что вы должны использовать подпрограммы LL_USART
в своем коде, только если вы инициализировали периферийное устройство USART с использованием интерфейса LL. Если вы инициализировали его с использованием интерфейса HAL, вы должны использовать только подпрограммы HAL по всему коду. Возможно, вам будет проще начать с библиотеки HAL.
Кстати ... Некоторые платы разработки STM32 предлагают последовательную связь через порт USB - что чрезвычайно полезно для создания прототипов и отладки.
Прерывания
Вам нужно будет узнать о прерываниях - если вы еще этого не сделали. Это, вероятно, будет важно для UART / последовательной связи, например.
Чтобы объяснить, почему прерывания важны в последовательной связи ...
Представьте, что байт поступает в ваш буфер UART, и вы не читаете его до прибытия следующего байта. В этом случае у вас будет ошибка переполнения UART (в регистре состояния будет установлен определенный флаг для рассматриваемого периферийного устройства). Один из лучших способов избежать этого - использовать прерывание приема UART и записать в кольцевой буфер внутри этого прерывания.
Библиотека Arduino обрабатывает это для вас автоматически. Например, обе подпрограммы Serial.read()
и Serial.print()
используют прерывания за кулисами. Если вы переключитесь на STM32CubeMX - используя интерфейсы HAL или LL (Low-Level) - вам придется обрабатывать прерывания самостоятельно.
Я не могу особо подчеркнуть, насколько важно узнавать о прерываниях. Google твой друг.
Таймеры
Одной из наиболее полезных функций микроконтроллеров являются их аппаратные таймеры. Вы также захотите узнать об этом в свое время. В сочетании с прерываниями их можно использовать для самых разных вещей.
Многозадачность и параллелизм
Если вы не планируете использовать ОСРВ, такую как FreeRTOS (я не уверен, что на вашем устройстве STM32F100 будет достаточно памяти для этого), вам нужно подумать о том, как вы собираетесь выполнять несколько задач - если у вас их несколько. В идеале вы не хотите, чтобы какие-либо из ваших задач были «блокирующими». Реализация ваших задач как конечных автоматов - один из способов достижения этого.
Возможно, вы уже делаете это в своем коде Arduino - внутри вашей функции loop()
. В любом случае, это может быть хорошей возможностью узнать об «архитектуре суперциклов» и конечных автоматах.
Интерфейс HAL или LL?
Вы упомянули, что планируете использовать интерфейс HAL в своем сообщении. Со временем вы можете обнаружить, что драйвер низкого уровня (LL) более универсален для определенных периферийных устройств (например, UART). Независимо от того, какой интерфейс вы используете для определенного периферийного устройства, имейте в виду, что вы не должны использовать сочетание обоих для одного и того же периферийного устройства. То есть, если вы инициализируете периферийное устройство с использованием библиотеки HAL, не пытайтесь использовать функции LL для взаимодействия с этим периферийным устройством позже в программе. Выбрав интерфейс для периферийного устройства, придерживайтесь его во всем коде.
Опыт отладки
Если вы используете макетную плату STM32 для создания прототипов, они обычно имеют встроенное устройство ST-Link - и предлагают хороший опыт отладки из коробки. На самом деле, по сравнению с Arduino, опыт отладки намного лучше . С библиотекой Arduino вы полагаетесь на операторы Serial.print()
, вставленные в ваш код. С устройством Truestudio / Eclipse / STM32CubeIDE + ST-Link у вас есть правильный отладчик - вы можете вставлять точки останова, просматривать стек вызовов, проверять локальные и глобальные переменные, регистры специальных функций и т. Д.
Таким образом, даже несмотря на то, что приведенные выше предложения могут представлять собой крутой курс обучения, отладчик может, по крайней мере, упростить некоторые вещи - и помочь вам преодолеть любые возникающие проблемы.
Альтернативы
Если все вышеперечисленное звучит как слишком большая работа - или слишком крутая кривая обучения - вы можете посмотреть STM32duino , как кто-то предложил в комментариях. У меня нет опыта с этим, поэтому не могу комментировать.