Всем нам известная фирма ST Microelectronics активно развивает свой продукт под названием STM32CubeMx, и я не мог обойти это вниманием, поэтому и решил сделать новую одноименную рубрику. И для начала разберемся, что это вообще такое, и для чего нужно. Итак...
STM32CubeMx - программный продукт, позволяющий легко и непринужденно при помощи достаточно понятного графического интерфейса произвести настройку любой имеющейся на борту микроконтроллера периферии. Предыстория создания CubeMx такова - ST имеют очень разнообразную линейку микроконтроллеров, тут и Cortex-M0, и Cortex-M0+, и Cortex-M3, и Cortex-M4. Соответственно, встает вопрос о каком-то едином наборе библиотек и едином инструменте для инициализации и конфигурирования всего этого многообразия. Вот для решения этих целей и был выпущен STM32CubeMx.
Суть концепции такова - создаем проект, выбираем микроконтроллер, и нам сразу же предлагается схема со всеми выводами выбранного контроллера. Нажимая на выводы и заходя в разнообразные меню, мы легко настраиваем как периферию, так и режимы работы каждого конкретного вывода. Сразу же очевидные плюсы - можно наглядно увидеть, какие выводы уже заняты, а какие еще свободны (в крупных проектах - более чем полезная функция). Давайте рассмотрим все вышеперечисленное на практическом примере.
Собственно, устанавливаем STM32CubeMx, запускаем и создаем новый проект:
Сразу же открывается окно с огромным количеством фильтров, в котором необходимо выбрать микроконтроллер, который мы собираемся использовать в проекте. Я выбрал STM32F407VG:
В результате будет открыто окно для работы с созданным проектом:
И тут мы уже видим в правой части изображение нашего контроллера со всеми выводами, а слева список всей доступной периферии. Соответственно, можно, кликая на выводы, задавать их режимы работы, либо в списке периферии активировать те или иные модули.
На вкладке Clock Configuration задаются все необходимые параметры тактирования, об этом пойдет речь в одной из следующих статей курса.
Если мы зайдем во вкладку Project Manager, то сможем последовательно настроить (перечисляю основное):
- имя проекта
- путь для сохранения проекта
- среду разработки, для которой будут сгенерированы файлы проекта
- версию библиотек, которые будут использованы для генерации исходного кода
Давайте для примера выберем что-нибудь. Пусть будет задействован первый канал АЦП (PA0) и три вывода, работающих в режиме выхода (PE4, PD13, PC0):
- кроме того, если планируется использовать отладчик, необходимо в пункте SYS выбрать отладочный интерфейс. Например, для отладчика ST-Link настройки будут выглядеть так:
Готово, теперь нажимаем на кнопку "Generate Code" в правом верхнем углу, и CubeMx предложит нам скачать необходимые библиотеки (в случае их отсутствия). Не препятствуем данному процессу, ждем.
После окончания генерации открываем папку с нашим проектом и видим, что там появились новые файлы. В папке Drivers содержатся все необходимые библиотеки, а в папках src и inc, соответственно, сами файлы со сгенерированным кодом. Откроем, например, main.c:
/***************************************************************************************/ int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration----------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* Configure the system clock */ SystemClock_Config(); /* System interrupt init*/ /* Sets the priority grouping field */ HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_0); HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_ADC1_Init(); /* USER CODE BEGIN 2 */ /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ } /***************************************************************************************/
В функции main()
вызываются MX_GPIO_Init()
и MX_ADC1_Init()
, которые определены в этом же файле. Собственно, в этих функциях и содержится инициализация и настройка всей периферии, которую мы выбрали при создании проекта в STM32CubeMx. Таким образом, отпадает необходимость вручную производить конфигурацию использующихся модулей контроллера, все это уже содержится в сгенерированном коде.
Свой собственный код нужно добавлять внутри секций вида:
/* USER CODE BEGIN 2 */ // Здесь пользовательская программа /* USER CODE END 2 */
Тогда при изменении проекта в CubeMx пользовательская часть программы будет автоматически перенесена и в заново сгенерированные файлы 👍
Резюмируем - таким вот образом мы получаем инструмент, который позволяет через интуитивно понятный интерфейс выполнить настройку любых модулей микроконтроллера. В результате генерации кода мы, в свою очередь, получаем готовый проект, в котором уже настроено, все что было ранее выбрано в CubeMx. И мы можем дополнять этот проект своим функционалом, используя уже сконфигурированные автоматически периферийные модули.
В общем, пожалуй, на сегодня закончим. Разобрались в общих чертах с созданием тестового проекта при помощи STM32CubeMx, так что до скорых встреч на нашем сайте! Если что-то остается не до конца понятным - не проблема, в следующих статьях будем разбирать поэтапно всю периферию, будет много примеров, которые все и прояснят окончательно.