первоначальная настройка среды AC6

Это старый опыт 2017года.

Гораздо приятнее работать с Atollic True Studio сегодня.

Устанавливаем среду разработки AC6 (STM Work Bench оттуда же www.st.com)

Устанавливаем и запускаем AC6 (sw4stm32) , он же STM Work

Bench, который является полностью бесплатным и кросплатформенным (Windows,Linux,..остальные не пробовал). И тут появляется знакомый интерфейс Eclips.

фотка 1

Первые попытки с нуля, с ходу , как мы это любим , получить положительный результат - не получается. Скомпилировать проект в AC6 без ошибок не удается. Куча непонятных каталогов и файлов (*.c,*.h), нужных и ненужных. Пытаемся разобраться...

При Generate code в STMCubeMX выбираем путь каталога прямо, где workspace нашего AC6. Закрываем STM32CubeMX. И вот тут проще всего так - открываем проводником каталог (где считается workspace у AC6) и ищем файл (у меня без имени) (.cprojec), запускаем его, открывается AC6 уже с нашим проектом. Также в версии уже в 2017г. после генерации кода можно нажать Open Project и откроется ваш проект в AC6. Пытаемся собрать его:

Замечание : Неудобная особенность AC6 - проект нельзя просто копировать между двумя компьютерами: Надо делать импорт! (File ->Import ->General ->Existing Progects into workspace ->Browse ->Выбор папки с проектом ->Finish ). Потом похоже надо выйти из AC6 и зайти заново. Можно очень много времени потерять.

На самом деле текущая версия STM32CudeMx (4.22.0 2017-08) подготавливает проект для AC6 с подключением всех необходимых библиотек , см. в дереве проекта уже подключены каталоги:

  • inc - наши заголовочные файлы
  • src - наши с файла с кодом
  • Drivers / STM32F1XX_HAL_Driver / inc +src библиотека HAL
  • Drivers / CMSIS
  • Middlewares / ST /STM32_USB_Device_Library / Class / CustomHID / inc + src - для поддержки USB HID

Могут все-таки остаться ошибки при сборке. Например, если ругается сразу на первый встреченный HAL вызов (HAL_Init())значит библиотека HAL вообще не настроена. HAL это библиотека , которую надо вручную добавить в проект. На самом деле все уже лежит в папке ..\Drivers\STM32F1xx_HAL_Driver\inc и src вашего проекта , просто надо настроить доступ. На имени проекта щелкаем правой кнопкой , выбирает Properties (также Alt-Enter) , далее C/C++ General , Paths and Symbols , Source Location и Add Foulder , дабавляем отдельно inc и src.

Может ругаться, например, на RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE (Type 'uint32_t' could not be resolved). Возвращаемся в STM32CubeMX , отключаем RCC и ошибки уходят.

Например столкнулся еще "Program "make" not found in PATH" - в интернете пишут нужно установить MinGW (вообще это бесплатный какой-то компилятор , который юзают многие IDE). Устанавливаем там minGW32-gcc-g++ (в PATH через Панель управления добавляем C:\MinGW\bin). Но не помогло, т.к. make там не оказалось (странно).

У меня похоже вырабатывается методика решения проблем с ошибками компиляции и другими проблемами. Если появляются непонятные ошибки и поиск и интернете долго ничего не дает НАДО идти с нуля :

1. в STM32CubeMX - создаем совсем пустой проект, называем например "1.STLink" (только включаем SYS + Serial Wire, т.к. хотим отладку по STLink задействовать ), генерируем код и смотрим как он компилируется - все без ошибок.

2. Настраиваем запуск мк и Отладку
Выход RST на ST Link v2 - только для STM, в процессе работы имеет напряжение близкое к 0, а у нас выход на мк NRST наоборот должен быть постоянно +3.3 , а кратковременный 0 является сбросом мк. Таким образом надо жать reset кнопку все-равно вручную.

2.1 Debug Configurations а AC6 : закладка Debugger : видим SWD + 4MHz (оставляем) : connect Under Reset. Запускаем Debug (F11), нажимаем на STM32f103C8T6 микрик и удивительно вошел в отладку, но не долго можно радоваться - в следующие разы пишет "Error erasing flash with vFlashErase packet".

Приноровился входить в отладку как-то так : запускаем Debug (F11) и 1 раз в сек жмем микрик, помогает (т.е в отладку входим нормально). При этом джампер на STM32F103C8T6 должен быть в 1 (иначе не прошьется).

2.2 в Версии AC6 Version: Neon.3 Release (4.6.3) настройка ресета чипа при отладке похоже изменилась, смотрим так : ALT-ENTER (вход в свойства проекта) выбираем слева Run/Debug Settings

фотка не валидная 2

тут у нас уже создан некий Launch , открываем его и переходим на закладку Startup

фотка не валидная 3

3. Копируем файл нашего проекта 1.STLink.iocв новый каталог, переименовываем его в , например, 2.STLink-RCC.ioc, открываем его в STM32CubeMX и добавляем RCC (настраиваем на работу от внешнего кварца), делаем генерацию кода. Проверяем в AC6 компиляцию (Ctrl-B) и прошивку в микроконтроллер (Ctrl-F11).

3. Копируем файл нашего проекта *.ioc в новый каталог и называем 2.STLink-RCC-PIN13.ioc, открываем его в STM32CubeMX и добавляем , например, управление GPIO13 (хотим помигать встроенным светодиодом) и делаем генерацию кода. Добавляем в AC6 код мигания светодиодом:

  • HAL_Delay(1000);
  • HAL_GPIO_WritePin(MY_PIN_13_GPIO_Port,MY_PIN_13_Pin,GPIO_PIN_SET);
  • HAL_Delay(1000);
  • HAL_GPIO_WritePin(MY_PIN_13_GPIO_Port,MY_PIN_13_Pin,GPIO_PIN_RESET);

Компилируем , прошиваем , далее надо переставить джампер на STM32F103C8T6 в 0 (иначе он будет в состоянии ожидания прошивки) и перезапустить микроконтроллер (нажать , например , на микрик, при этом STLink не надо отключать) и вуаля светодиод мигает 1 раз в секунду - значит делаем вывод, что удачно внесли свой код, прошили микроконтроллер и можем даже отлаживать его. Это и попробуем :

Прошивка и отладка из AC6 (System Work Bench)

В-общем-то работает, только при прошивке (например по кнопке F11, компиляция,прошивка,отладка ) надо все-таки жать кнопку reset постоянно примерно 1 раз в сек., тогда в отладку входит нормально.

Джампер на STM32F103C8T6 в положение 1 , F11 (Debug) , точка останова стоит допустим на HAL_GPIO_WritePin(MY_PIN_13_GPIO_Port,MY_PIN_13_Pin,GPIO_PIN_RESET); и видим , что мы остановились на это точке, жмем F8, далее светодиод мигнул на 1сек и опять ждем на той же точке останова (диод не мигает). Значит отладка реально работает. Но единственно вообще без точек останова Debugger как-то заклининило, пришлось перезагружать ПК, т.к. ничего не помогло. И тогда решил попробовать еще вариант, когда в Debug Configurations : закладка Debugger устанавливаем Software System Resetи вроде все заработало нормально - F11 (не надо жать никакой микрик), далее debugger останавливается на первой инструкции (у меня HAL_Init), далее F8 и попадаем на первую точку останова и потом вроде все удобно работает без глюков.

Кстати попробовал другой ST-Link v2 (с aliexpress.com) тоже все нормально заработало.

4. Копируем файл нашего проекта 2.STLink-RCC-PIN13.ioc в новый каталог и называем 3.STLink-RCC-PIN13-USBHID.ioc, открываем его в STM32CubeMX и добавляем USB-HID. В Clock Configuration автоматически что-то подправилось и на выходе APB1,APB2 timer clocks стало 48MHz (не помню на каком выходе, но для USB обязательно 48MHz). Генерируем код, прошиваем, пытаемся отлаживать (кстати надо установить "Software System Reset") , отладка на начальном этапе идет, в цикле while отладка не идет (есть у меня предположение , что HAL_Delay(1000) в цикле тут вообще нельзя использовать, USB знаете ли , потоки и все такое прочее). Но подключаем USB к ПК , джампер на STM32F103C8T6 в 0 и перезапуск микриком и в системе появился STM32 Human interface(USB\VID_0483&PID_572B&REV_0200) . Значит базовые функции USB работают. Только как тут отлаживать, ведь USB в реальной жизни, когда подключен к ПК ,обменивается с ПК сотнями пакетов в секунду , даже когда ничего не делает.

5. Копируем файл нашего проекта 3.STLink-RCC-PIN13-USBHID.ioc в новый каталог и называем 4.STLink-RCC-PIN13-USBHID_2.ioc, открываем его в STM32CubeMX и в Deveice Descriptor меняет общие параметры VID,PID, всякие STRING. И в ОС Windwos-7-64 появиться USB-устройство ввода(USB\VID_0483&PID_572B&REV_0200) и нормально прилеплеными стандартными драйверами, описание STM32 Human interface Pasha.

Примечание: прошивать можно также через Flash loader demonstrator: в STM32F103C8T6 (по UART только).


После первого опыта взаимодействия с AC6 захотелось сравнить с чем нибудь другим. В Ас6 утомляет многократного переставление джампера туда-сюда, а также непонятки с отладкой (нестабильность). В общем выбрал Keil с ограничением 32KBb ( это только на отладку!) и скажу не пожалел , именно там было собрано первое мое Custom USB Hid устройство (см. в соответствующем разделе).