STM32 - STM32CubeMX и Atollic TrueStudio






Здравствуйте.

В предыдущих статьях (раз, два, три) я описал простое программирование платы Blue Pill (STM32F103C8T6) в среде IDE Arduino, однако если вы хотите пойти дальше «мигания светодиодом» и задействовать весь потенциал микроконтроллеров stm32, нужно использовать соответствующие инструменты.

Если не знаете какую плату выбрать, то посмотрите здесь.



Итак, для разработки будем использовать…


STM32CubeMX — это программа для предварительной настройки МК и инициализации начального кода для различных сред разработки, в том числе и для Atollic TrueStudio.

В этой программе можно выбрать нужный МК, указать источники тактирования различных шин, инициализировать пины, включить таймеры, настроить прерывания и ещё кучу всего можно сделать. Всё это делается в графическом режиме, то есть всё то, что раньше нужно было прописывать вручную, можно сделать мышкой. При этом STM32CubeMX не позволит допустить ошибок и конфликтов в работе с железом. После этого созданный проект импортируется в среду разработки и программисту остаётся сосредоточится непосредственно на прикладной задаче.


Atollic TrueStudio — среда программирования (IDE) созданная на базе Eclipse. Atollic TrueStudio была выкуплена компанией ST и тем самым стала официальной средой для микроконтроллеров stm32.

Atollic TrueStudio и STM32CubeMX полностью бесплатные. Поддерживаемые операционные системы   и 

Дополнение: компания ST выпустила среду, которая объединила в себе TrueStudio и STM32CubeMX — STM32CubeIDE.


Перечисленный софт полностью бесплатный и не имеет никаких ограничений! Единственный нюанс, это весьма запутанная регистрация на сайте ST.



Приступим

Подопытной железкой будет упомянутая выше плата Blue Pill…


Шикарная вещица, а стоит сущие копейки. Если планируете заказывать, то закажите две штуки, в дальнейшем одну из них мы превратим в программатор.


Прошивать будем через USART, так что понадобится USB to UART конвертер…



… либо ардуина, из неё можно сделать конвертер (об этом ниже).

Если у Вас есть программатор, то можете прошивать через него (конвертер не понадобится), суть статьи от этого не меняется.

Ну, а если у Вас фирменная плата типа Discovery или Nucleo, тогда вообще всё в шоколаде, втыкайте её в USB и погнали.





Установка


Atollic TrueStudio

Идём сюда atollic.com/resources/download/ выбираем нужную ОС, на следующей странице заполняем поля…


… и нажимаем на кнопку «Download installer...»



Для   будет скачан установочный exe-файл, который и следует запустить.


Для   будет скачан архив, который нужно распаковать в домашнюю папку, открыть терминал и перейдя в эту папку…

cd Atollic_TrueSTUDIO_for_STM32_9.0.1_installer


… запустить установочный скрипт из под root'а…

sudo ./install.sh


После установки в меню программ, в разделе «Разработка» появится ярлык

Это я делал на своей ubuntu 16.04, иные дистры не проверял.




STM32CubeMX

Идём сюда www.st.com/en/development-tools/stm32cubemx.html и регистрируемся. После регистрации находим в самом низу кнопку «Get Software»…


Регистрация немного запутанная, но ничего не поделаешь.



Скаченный архив распаковываем в домашнюю папку и…

Для   запускаем файл SetupSTM32CubeMX-4.27.0.exe и следуем указаниям установщика.

Для   запускаем файл SetupSTM32CubeMX-4.27.0.linux (клацнув мышкой) и следуем указаниям установщика.

После установки появится папка STM32CubeMX, в которой будет исполняемый файл STM32CubeMX (запускать мышкой).






STM32CubeMX


Запускаем STM32CubeMX и жмакаем Меню ⇨ File ⇨ New Project…

В пятой версии CubeMX изменился дизаин, но суть осталась прежняя.


В открывшемся окне выбираем вкладку MCU Selector и в левой колонке последовательно устанавливаем галочки (ядро, серия, линейка и корпус) соответствующие вашему МК, а внизу-справа выбираем строчку с соответствующим объёмом Flash памяти (или циферкам-буковкам на камне).






Для фирменных плат типа Discovery или Nucleo можно и нужно воспользоваться вкладкой Board Selector и просто клацнуть свою плату. В этом случае инициализируются всякая разная периферия подключённая к МК (светодиоды, кнопки, акселерометр и т.п.), и настроен источник тактирования.



После этого станут активны кнопки Features и другие, поклацев которые можно посмотреть блок-схему МК, даташит и прочие доки.



Кнопка Start Project создаёт проект…

В меню ничего интересного нет кроме пункта Project, о котором поговорим позже.



Слева настройка системной частоты, таймеров и прочей периферии. В выпадающих списках представлены все возможные режимы и настройки. По центру сам МК с интерактивными выводами. Можно тыкать, перетаскивать и поворачивать.



Знакомство начнём с предупреждений и незаметно перейдём к функционалу…


Если что-то инициализировано, в данном случае инициализирован (по дефолту) системный счётчик (SysTick), то оно подсвечивается зелёненьким

SysTick
SysTick — это 24-битный вычитающий счетчик, который ведёт отсчёт от определённого значения (можно задавать самостоятельно) и при достижении нуля автоматически перегружается, после чего цикл повторяется. Каждый раз, когда счетчик достигает нуля вызывается прерывание, которое можно использовать в своих целях написав соответствующий обработчик.

easyelectronics.ru/arm-uchebnyj-kurs-systick-sistemnyj-tajmer.html




Важно! Если работаете с программатором, всегда указывайте Debug ⇨ Serial Wire. В противном случае плата не будет прошиваться. Если всё таки проморгали этот момент, тогда смотрите под спойлер...

спойлер
Переставьте джампер…


BOOT0 подтягивается к плюсу и переводит МК в режим системного загрузчика.

Прошейте плату один раз и верните джампер обратно. Всё, можно пользоваться как обычно.



Если где-то появляется значёк , то в этом нет ничего страшного, это просто предупреждение…



… в данном случае я инициализировал аналоговый вход, а система любезно предупредила, что при такой конфигурации не удастся использовать вывод четвертого канала третьего таймера. Имеется в виду именно вывод (ножка), то есть, например сравнение можно использовать.




Если же появится такой значёк , то это означает…



… что если я инициализирую РА2, например как аналоговый вход, то не смогу воспользоваться вторым USART'ом.



Теперь обратим свой взор на картинку МК, как вы уже поняли, ножки у него интерактивные. Если клацнуть какую-нибудь ножку, то выскочит контекстное меню, в котором указаны все возможные режимы для данной ножки…




Если инициализированый пин клацнуть правой кнопкой мыши, то появиться ещё одно меню, в котором можно поменять название вывода (Enter User Label) или убрать булавку (Signal Unpinning), Pin Stacking — это что-то связанное с разведением многослойных плат.


Некоторые ножки можно ремапить (переназначать на другие ножки). Если ножку «приколоть» булавкой, то её нельзя будет переназначить.



В левой панели активируйте USART1 указав асинхронный режим.



Зажав Ctrl и тыкнув вывод уарта, вы увидите как система подсветит альтернативные ножки. Удерживая Ctrl их можно перетащить.

Теперь закройте этот проект — Меню ⇨ File ⇨ Close Project, и откройте новый — Меню ⇨ File ⇨ New Project.



Тактирование


Любой новый проект начинается с выбора источника тактирования. В левой панели находим регистр RCC

Сейчас будут пояснения, которые могут показаться мудрёными, но пугаться не стоит, следом описана автоматическая настройка.



LSE — это кварц для встроенных часов. К работе МК отношения не имеет, поэтому рассмотрим его позже. Сейчас нужно разобраться с HSE, множителями, предделителями, мультиплексорами и тактированием периферии.

Откройте вкладку Clock Configuration




Если в регистре RCC оставить Disable, тогда МК будет работать от HSI RC.

HSI (High Speed Internal) — внутренний генератор частоты 8МГц (для STM32F103). Это не очень точный источник тактирования, его частота может «плавать» от перепада температуры. Внутренний генератор используется в том случае, когда нет возможности установить внешний и устройство не нуждается в высокой вычислительной точности.

Стоит заметить, что микроконтроллеры stm32 всегда стартуют от внутреннего кварца, а потом переходят на внешний. Это сделано для того, чтоб МК мог проверить, что внешний кварц исправен.

Режимы тактирования можно изменять в процессе работы программы, например для энергосбережения.



HSE (High Speed External) — внешний кварцевый резонатор от 4 до 16МГц, обеспечивающий стабильную частоту.

На моей плате установлен внешний кварц на 8МГц…


Сигнал от этого кварца проходит через специальный умножитель и получается нужная частота.

На платах Discovery и Nucleo может вообще отсутствовать внешний кварц (но место для него есть), в этом случае основной чип тактируется от чипа выполняющего роль программатора либо от внутреннего источника.



Для инициализации внешнего кварца нужно в RCC выбрать Crystal/Ceramic Resonator




BYPASS Clock Source — в этом режиме можно тактировать МК от какого-нибудь генератора частоты или для синхронизации нескольких микроконтроллеров (см. ниже).


Master Clock Output — выдаёт тактовую частоту на отдельную ножку.



Это может пригодится для тактирования какой-то внешней периферии или подцепиться осциллографом для проверки. Так же можно синхронизировать два и более МК, например на одном МК (будет ведущим) инициализируем этот вывод, а на другом (будет ведомым) устанавливаем RCC ⇨ High Speed Clock ⇨ BYPASS Clock Source и подключаем вывод ведущего к пину RCC_OSC_IN ведомого. Таким образом ведомый будет тактироваться от ведущего. Эта схема используется на некоторых платах Discovery и Nucleo.

Пример NUCLEO F030R8
У этой платы нету основного кварца. Черный прямоугольник — это кварц для часов (32.768).



Маленький чип (stm32f103), выполняющий роль программатора, тактируется от полноценного кварца на 8МГц и выдаёт импульсы на главный чип. В данном случае инженеры из ST не ставили задачу синхронизации микроконтроллеров, просто сэкономили один кварцевый резонатор.

Если возникнет желание разделить плату, то нужно либо впаять кварц (место специально оставлено), либо использовать внутренний резонатор.


Выше я писал, что фирменные платы могут тактироваться нестандартно, это как раз тот случай. Если при создании проекта выбрать эту плату через MCU Selector, тогда автоматически инициализируется тактирование от внешнего генератора…




Импульсы от маленького чипа поступают на ножку RCC_OSC_IN.
RCC_OSC_OUT находится в состоянии HiZ — отключён короче.


Вот иллюстрация из даташита…


External Clock это и есть режим BYPASS Clock Source.


Если вдруг захотите впаять кварц, то режимы работы устанавливаются перемычками R34 — R37…




Пояснения из даташита…





Теперь установите регистр RCC как на картинке выше и перейдите на вкладку Clock Configuration



Верхнюю часть схемы я отрезал, она касается часов, разберёмся с ней потом. У более «жирных» камней побольше мультиплексеров, но суть такая же.


Трапеции с точечками это мультиплексоры (переключалки источников тактирования)System Clock Mux, PLL Source Mux и MCO source Mux.

System Clock Mux — переключает источники тактирования различных шин (AHB, APBx).

PLL Source Mux — самый главный мультиплексор, он позволяет выбирать источник тактирования для всего МК.

MCO source Mux — выбор источника для подачи импульсов на внешнюю периферию. Я специально предложил указать в регистре RCC пункт Master Clock Output, чтоб мультиплексор был активным и его можно было потыкать. В дальнейшем Master Clock Output включать не нужно.

PLL (большой голубенький прямоугольник) — очень важная штуковина, это множитель, который увеличивает частоту поступающую с кварца.

— в таких прямоугольниках указаны различные делители и множители частоты, их нельзя редактировать.

Потыкайте мультиплексор MCO source Mux, выходная частота MCO будет меняться.


— а такие делители и множители можно устанавливать по своему усмотрению (если что-то настроите не так, то система ругнётся).

Потыкайте предделители на шинах (APB1,2 Prescaler), частота в голубеньких прямоугольничках будет меняться. ADC Prescaler станет активным только после инициализации пинов в регистрах ADC1 или ADC2.


Если что-то не активно, то оно либо не инициализировано, либо не может работать в данной конфигурации.


На верхней схеме настроено тактирование от внутреннего кварца. Чтобы перенастроить на внешний и установить максимальную частоту (72МГц) нужно переключить мультиплексор PLL Source Mux, множитель PLL выбрать х9, а мультиплексор System Clock Mux переключить на PLLCLK



… и вуаля, контроллер заработал на нужной частоте.


FLITFCLK — это тактирование интерфейса доступа к Flash-памяти. Она тактируется от внутреннего кварца и всегда на частоте 8МГц, видимо это связано с тем, что МК стартует на этом кварце.


Enable CSS (Clock Security System) — если нажать эту кнопочку, тогда включится детектор частоты, который при ее сбое сразу же отключает HSE, включает HSI, устанавливает его источником системной частоты, посылает сигнал ошибки системной частоты расширенным таймерам и генерирует прерывание, извещая программу о сбое. Почитать.


AHB Prescaler и APB1,2 Prescaler — это предделители системной шины (AHB) и шин периферии (APB). Их настройка зависит от того, что подключено к шине (имеется в виду и внутренняя периферия, и устройства подключаемые к МК).


На схеме показано какие выводы, интерфейсы и таймеры подключены к шинам APB1,2:




Для примера используем аналоговый вход. На вкладке Pinout активируйте какой-нибудь ADC-пин и вернитесь на вкладку Clock Configuration. Частота ADC покажет ошибку и выскочит окошко с предложением настроить всё автоматически (нажмите No)



Дело в том, что ADC должен тактироваться частотой не превышающей 12МГц, чтоб исправить ошибку нужно установить ADC Prescaler /6…




USB Prescaler при активации регистра USB тоже выдаст ошибку так как частота не должна превышать 48МГц. Чтоб исправить ошибку установите предделитель /1.5…




Настраивая предделители нужно следить за тем, чтоб не возникало конфликтов. Например подключая какое-нибудь устройство по I2C (шина APB1) и подбирая необходимую частоту для этого интерфейса, вы тем самым измените частоту тактирования таймеров.


Разберёмся с часами. В регистре RCC укажите Low Speed Clock ⇨ Crystal/Ceramic Resonator, а в регистре RTC поставьте галочку Activate Clock Source




В мультиплексоре RTC Clock Mux нужно указать источник LSE



LSI (Low Speed Internal) — внутренний низкоскоростной генератор (40КГц). Это внутренний кварц для тактирования встроенных часов.

LSE (Low Speed External) — внешний низкоскоростной генератор (32.768КГц). Это внешний кварц для тактирования встроенных часов (присутствует на различных платках типа Discovery и т.п.).



Включать часы необязательно, я просто показал как их настраивать.



И наконец автоматическая настройка тактирования всего и вся...


Закройте этот проект и откройте новый (это можно сделать нажав кнопочку   не сохраняя предыдущий).

В регистре RCC выберите High Speed Clock ⇨ Crystal/Ceramic Resonator, больше ничего не трогайте и перейдите на вкладку Clock Configuration.

В синем прямоугольничке   HCLK (MHz) нужно вписать требуемую частоту и нажать Enter. Выскочит окошко, в котором надо нажать ОК…



После этого все мультиплексоры, предделители и частоты настроятся сами…



Больше ничего не тыкайте, чтоб не испортить. Далее мы подготовим проект для мигания светодиодом с использованием таймера и без.


Перейдите на вкладку Pinout, активируйте таймер №1 (TIM1) и пин PC13 инициализируйте как выход (мышкой кликнуть вывод и выбрать GPIO_Output)



Clock Source ⇨ Internal Clock — означает что таймер тактируется от внутреннего источника (источником может быть и какой-то внешний сигнал).


Теперь пришло время посмотреть вкладку Configuration




В левой колонке частично показана конфигурация из вкладки Pinout (если там что-то активировать, то оно появится здесь), справа кнопки с расширенными настройками выводов, интерфейсов, прерываний и т.д.


С DMA мы ничего не делаем, поэтому она и не зелёненькая.

Нажмите кнопку GPIO и кликните строчку…




GPIO output level — что подать на ножку при старте МК, 0 или 1.

GPIO Mode — работа вывода в обычном режиме (Push-pull), либо в режиме открытого стока (Open-drain).

GPIO Pull-up/Pull-down — внутренняя подтяжка к плюсу или минусу, либо без подтяжки.

Maximum output speed — задает время спада/нарастания фронта при переключении пина. Иными словами, это скорость с которой пин может переключаться с LOW на HIGH или с HIGH на LOW. (Low — 2MHz, Medium — 10MHz, High — 50MHz)

User Label — можно указать своё имя для ножки (led13).


На вкладке RCC ничего интересного нет кроме возможности присвоить свои имена выводам кварца.

Нажмите Apply и OK.



NVIC — отвечает за всякие прерывания.

RCC — всякие настройки источника тактирования (кварца).

Я не буду описывать эти и большинство других настроек, так как для этого придётся написать книгу.



Поскольку мы будем мигать светиком с помощью таймера, то его нужно настроить. Нажмите кнопку TIM1 и перейдите на вкладку NVIC Setting



Включите прерывание по переполнению как на картинке и перейдите на вкладку Parameter Setting




Здесь нужно настроить таймер так, чтоб он вызывал прерывание каждые 500мс, таким образом светик будет мигать раз в секунду.

Делим системную частоту на 720 и получаем 100000 тиков в секунду, соответственно до переполнения (50000) таймер дотикает за 500мс.

Prescalerпредделитель системной частоты.

Counter Mode — режим счетчика, в данном случае он будет считать вверх (от нуля и до переполнения).

Counter Periodпереполнение.

Repetition Counter — счётчик повторений, этот счётчик позволяет генерировать прерывание не на каждое переполнение, а на каждые N переполнений.

Оставшиеся вкладки нам не интересны.

Нажмите Apply и OK.


Последняя вкладка — Power Consumption Calculator — калькулятор для расчёта энергопотребления, я в ней не разбирался.

Осталось сгенерировать проект. Нажимаем кнопку  …



Придумываем название проекта (Project Name), указываем путь до воркспейса (Project Location) и выбираем тулчеин (Toolchain/IDE). Размер кучи (Heap) и стека (Stack) трогать не стоит, во всяком случае пока.


На вкладке Advanced Settings можно выбрать библиотеку, на которой будет писаться код, оставьте HAL.

HAL (Hardware Acess Level) — библиотека для разработки, упрощающая создание программ и обеспечивающая переносимость кода. Появилась вместе с CubeMX.

LL (low-layer) — низкоуровневое API ориентированное на экспертов.



Нажмите Оk.

После первой сборки, это окно больше не будет показываться, если оно понадобится, тогда нужно нажать




Проект сгенерирован, нажмите Close...


STM32Cube-Presentation




Atollic TrueStudio


Описывать интерфейс я не буду, ничего особенно интересного тут нет, разве что справа-снизу можно видеть объём занимаемой памяти. С настройками компиляции, отладки и прочими умными словами разберётесь потихоньку сами, в любом случае это длительный процесс. Сейчас важно написать «Hello World» (помигать светиком).

Запускаем Atollic TrueStudio и открываем проект созданный в CubeMX — Меню ⇨ File ⇨ Open Project from File System…




Укажите папку с проектом (кнопка Directory...) и нажмите Finish.


В левой панеле разверните список и клацните файл main.c



Свой код нужно вписывать в специально сделанные блоки USER CODE…

/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

Эти блоки расставлены везде где нужно.

Если написать что-либо вне этих блоков, то при повторной генерации кода в CubeMX (мало ли нужно что-то добавить/удалить) оно будет затёрто. Вы можете менять что-либо в CubeMX и эти изменеия будут автоматически происходить в TrueStudio.


Прежде чем вносить изменения, нажмите  чтоб проверить соберётся ли проект.


В коде уже всё инициализировано, например в функции static void MX_TIM1_Init(void) вы найдёте те самые циферки, которые мы указывали в CubeMX. Однако здесь не хватает обработчика прерываний от таймера.

В левой панели нужно найти заголовочный файл stm32f1xx_hal_tim.h (название файла намекает на его принадлежность) и открыть…



В хедарах лежат прототипы всех нужных функций, вы будете часто сюда заглядывать.

Откройте окно поиска (Ctrl + F) и найдите функцию HAL_TIM_PeriodElapsedCallback. Это колбек, который вызывается каждый раз когда случается прерывание. Функция вызывающая колбек находится в файле stm32f1xx_hal_tim.c, там же лежит и сам колбек с атрибутом __weak.

Создадим свою функцию и вставим её в main.c между тегами…

/* USER CODE BEGIN 0 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  if(htim->Instance == TIM1) //проверяем какой таймер вызвал колбек
   {
     HAL_GPIO_TogglePin(led13_GPIO_Port, led13_Pin); // переключаем пин на противоположное состояние
   }
}
/* USER CODE END 0 */

Так как колбек один для всех таймеров, то надо проверить какой именно таймер вызвал прерывание.


И ещё надо стартануть таймер функцией HAL_TIM_Base_Start_IT() (она тоже лежит в stm32f1xx_hal_tim.c).

/* USER CODE BEGIN 2 */
HAL_TIM_Base_Start_IT(&htim1); // передаём в функцию указатель на структуру TIM1
/* USER CODE END 2 */




Заодно впишем в цикл while(1) немного кода, чтоб помигать тем же светиком, но без таймера, через delay(). Перед прошивкой что-нибудь одно закомментируете.

while (1)
  {

  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */
	  HAL_GPIO_WritePin(led13_GPIO_Port, led13_Pin, GPIO_PIN_SET);
	  HAL_Delay(1000); // 1000ms (HAL_Delay останавливает программу)
	  HAL_GPIO_WritePin(led13_GPIO_Port, led13_Pin, GPIO_PIN_RESET);
	  HAL_Delay(1000);
  }
  /* USER CODE END 3 */

Помните о том, что у платы Blue Pill PC13 включается минусом.


Соберите проект кнопкой


Если внизу на вкладке Problems всё чисто, то значит пришло время прошивать плату.


Если работаете с программатором, тогда запустите отладку —   — это загрузит прошивку в МК.

Запустите программу (внутри МК)
Поставьте программу на паузу —
Выйти —



Если программатора нет, тогда ступайте в раздел «Прошивка».





Прошивка


Описанным способом можно загружать любые .bin или .hex файлы.


Файл будет лежать там где и проект, в папке Debug — STM32_workspace_9.0/myled/Debug/myled.hex.



Вам потребуется USB to UART конвертер…



Если такой штуковины нет, то есть два варианта превращения ардуины в конвертер…

превращение
1. Замкнуть RESET на GND (может не прокатить).
2. Загрузить в неё вот такой незамысловатый скетч:

void setup() 
 { 
   pinMode(0, INPUT); 
   pinMode(1, INPUT); 
 } 
 void loop() 
 {} 


Чтобы проверить работает ли ардуина в качестве конвертера, замкните RX и TX, откройте   и отправьте какие-нибудь символы. Если они вернулись, значит всё работает.


Далее переставляем джамперы на платке вот так:

Если плата самодельная, тогда пин BOOT0 надо подтянуть к плюсу.


Режим системного бутлоадера. Не поленитесь заглянуть по ссылке.



Соединяем конвертер и STM следующим образом…

картинка



Конвертер RX <-> PA9 STM
Конвертер TX <-> PA10 STM
Конвертер GND <-> GND STM

… и подключаем конвертер и STM к компьютеру.



Инструкция по прошивке для


Скачайте архив и распакуйте куда-нибудь. Если хотите, можете взять с сайта ST (в самом низу страницы).

Нажмите Reset на плате.

Перейдите в папку Flash Loader Demonstrator и запустите Flash Loader Demonstrator.exe


Выбираем СОМ-порт конвертера и жмем Next...

WARNING Remove Protection (защита от записи)
Такое сообщение…



… означает, что плата, залочена. Ничего страшного нет, просто снимите защиту кнопкой Remove protection и следом нажмите ОК.



Защита снята.

Если выдаёт ещё какие-то ошибки, то либо не нажали Reset, либо что-то с конвертером.




Если светофор даёт зеленый свет, то смело жмите Next...




Жмем Next...




В пункте Download to device указываем путь к файлу myled.hex и жмем Next...





Готово.




Инструкция по прошивке для


Скачайте архив и распакуйте куда-нибудь.

Из папки соответствующей вашей ОС скопируйте файл stm32flash в домашнюю папку.

Эта утилита есть в репах ubuntu, в других дистрах не знаю, поэтому выкладываю.

Перед прошивкой всегда нажимайте Reset на плате.

В терминале дайте команду:

./stm32flash -w /home/dima/Atollic/TrueSTUDIO/STM32_workspace_9.0/myled/Debug/myled.hex -v -g 0x0 /dev/ttyUSB0

Путь к файлу у вас будет свой. HEX-файлы тоже можно прошивать этой утилитой.

Если будет ругаться на права, тогда дайте команду…

sudo chmod 777 /dev/ttyUSB0


… или запускайте утилиту через sudo.


Защита от записи

Если появилось вот такое сообщение…



… тогда дайте по очереди две команды:

./stm32flash -u /dev/ttyUSB0

./stm32flash -k /dev/ttyUSB0


Первая снимает защиту от записи, вторая от чтения.




Ну и наконец...

Верните джампер в исходное положение и нажмите Reset…



Светик начнёт мигать. Первая программа написана и прошита.





На этом наверно всё.


Всем спасибо


Если у Вас стоял ардуиновский загрузчик, то он будет затёрт, чтоб его востановить просто залейте описанным выше способом этот файлик. И не забудте вот про это.


Телеграм-чат istarik

Телеграм-чат STM32


В следующей статье описано как из платы Blue Pill сделать программатор, и работать с ним в Atollic TrueStudio

Мои статьи про stm32



  • 0
  • 68931
Поддержать автора


Telegram-чат istarik

Задать вопрос по статье
Telegram-канал istarik

Известит Вас о новых публикациях






Комментарии (0)

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.