Добавление нового контроллера (STM32F103C8 “Blue Pill”) в программу FLProg.

Внимание!

Поддержка STM32 появилась в программе FLProg начиная с версии 8.0.1.

Контроллеры Arduino и ESP   в соответствии с данной инструкцией можно добавлять и в более ранних версиях.

 

Открываем программу FLProg. В главном меню выбираем пункт «Инструменты», а в нём «Редактор пользовательских описаний контроллеров».

 

 

Открывается окно редактора.  В нём добавляем новое описание контроллера.

 

Вводим название контроллера.

 

 

После добавления описания переходим в ветку «Общие параметры»  и выбираем тип используемого ЦПУ.

 

Затем переходим в ветку «Изображения» и загружаем в описание необходимые изображения.

 

 

 

В соответствии с распиновкой контроллера задаем количество пинов платы.

 

 

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

Добавляем функцию цифрового ввода – вывода.

 

 

И задаем параметры этой функции. В соответствии с документацией на плату.

Обратите внимание – в контроллерах Ардуино и ESP при программировании в ArduinoIDE используются цифровые обозначения пинов. Соответственно в редакторе пользовательских описаний так же используются цифровые идентификаторы.  Для STM в примерах и описании используются текстовые описания типа «PC13».  На самом деле это объявленные в ядре числовые константы, рассчитываемые в зависимости от используемого ЦПУ.  Для определения цифровых значений данных констант в плату был загружен следующий скетч.

Код скетча

void setup() {

  // put your setup code here, to run once:

  Serial1.begin(9600);

  delay(2000);

  int temp = PB12;

  Serial1.print(«PB12 — «);

  Serial1.println(temp);

  temp = PB13;

  Serial1.print(«PB13 — «);

  Serial1.println(temp);

  temp = PB14;

  Serial1.print(«PB14 — «);

  Serial1.println(temp);

  temp = PB15;

  Serial1.print(«PB15 — «);

  Serial1.println(temp);

  temp = PA8;

  Serial1.print(«PA8 — «);

  Serial1.println(temp);

  temp = PA9;

  Serial1.print(«PA9 — «);

  Serial1.println(temp);

  temp = PA10;

  Serial1.print(«PA10 — «);

  Serial1.println(temp);

  temp = PA11;

  Serial1.print(«PA11 — «);

  Serial1.println(temp);

  temp = PA12;

  Serial1.print(«PA12 — «);

  Serial1.println(temp);

  temp = PA15;

  Serial1.print(«PA15 — «);

  Serial1.println(temp);

  temp = PB3;

  Serial1.print(«PB3 — «);

  Serial1.println(temp);

  temp = PB4;

  Serial1.print(«PB4 — «);

  Serial1.println(temp);

  temp = PB5;

  Serial1.print(«PB5 — «);

  Serial1.println(temp);

  temp = PB6;

  Serial1.print(«PB6 — «);

  Serial1.println(temp);

  temp = PB7;

  Serial1.print(«PB7 — «);

  Serial1.println(temp);

  temp = PB8;

  Serial1.print(«PB8 — «);

  Serial1.println(temp);

  temp = PB9;

  Serial1.print(«PB9 — «);

  Serial1.println(temp);

  temp = PB10;

  Serial1.print(«PB10 — «);

  Serial1.println(temp);

  temp = PB11;

  Serial1.print(«PB11 — «);

  Serial1.println(temp);

  temp = PB1;

  Serial1.print(«PB1 — «);

  Serial1.println(temp);

  temp = PB0;

  Serial1.print(«PB0 — «);

  Serial1.println(temp);

  temp = PA7;

  Serial1.print(«PA7 — «);

  Serial1.println(temp);

  temp = PA6;

  Serial1.print(«PA6 — «);

  Serial1.println(temp);

  temp = PA5;

  Serial1.print(«PA5 — «);

  Serial1.println(temp);

  temp = PA4;

  Serial1.print(«PA4 — «);

  Serial1.println(temp);

  temp = PA3;

  Serial1.print(«PA3 — «);

  Serial1.println(temp);

  temp = PA2;

  Serial1.print(«PA2 — «);

  Serial1.println(temp);

  temp = PA1;

  Serial1.print(«PA1 — «);

  Serial1.println(temp);

  temp = PA0;

  Serial1.print(«PA0 — «);

  Serial1.println(temp);

  temp = PC15;

  Serial1.print(«PC15 — «);

  Serial1.println(temp);

  temp = PC14;

  Serial1.print(«PC14 — «);

  Serial1.println(temp);

  temp = PC13;

  Serial1.print(«PC13 — «);

  Serial1.println(temp);

  temp = A9;

  Serial1.print(«A9 — «);

  Serial1.println(temp);

  temp = A8;

  Serial1.print(«A8 — «);

  Serial1.println(temp);

  temp = A7;

  Serial1.print(«A7 — «);

  Serial1.println(temp);

  temp = A6;

  Serial1.print(«A6 — «);

  Serial1.println(temp);

  temp = A5;

  Serial1.print(«A5 — «);

  Serial1.println(temp);

  temp = A4;

  Serial1.print(«A5 — «);

  Serial1.println(temp);

  temp = A3;

  Serial1.print(«A3 — «);

  Serial1.println(temp);

  temp = A2;

  Serial1.print(«A2 — «);

  Serial1.println(temp);

  temp = A1;

  Serial1.print(«A1 — «);

  Serial1.println(temp);

  temp = A0;

  Serial1.print(«A0 — «);

  Serial1.println(temp);

}

void loop() {

  // put your main code here, to run repeatedly:

}

 

В результате получил следующие значения:

 

PB12 — 16

PB13 — 15

PB14 — 14

PB15 — 13

PA8 — 12

PA9 — 11

PA10 — 10

PA11 — 9

PA12 — 8

PA15 — 7

PB3 — 6

PB4 — 5

PB5 — 4

PB6 — 3

PB7 — 2

PB8 — 1

PB9 — 0

PB10 — 30

PB11 — 31

PB1 — 201

PB0 — 200

PA7 — 199

PA6 — 198

PA5 — 197

PA4 — 196

PA3 — 195

PA2 — 194

PA1 — 193

PA0 — 192

PC15 — 19

PC14 — 18

PC13 — 17

A9 — 201

A8 — 200

A7 — 199

A6 — 198

A5 — 197

A5 — 196

A3 — 195

A2 — 194

A1 — 193

A0 – 192

В соответствии с этими значениями задаем параметры и остальных пинов. Некоторые из пинов могут быть выходами с поддержкой ШИМ.

Для этих пинов  не забываем ставить соответствующую галочку.

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

Для них добавляем ещё одну функцию –«Анадоговый вход».

И в свойствах этой функции задаем необходимые параметры, полученные с помощью скетча.

После заполнения параметров всех пинов возможна ситуация, когда ранее заданного количества либо не хватило, либо остались лишние. Это число всегда можно поправить на ветке «Выводы контроллера».

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

 

При желании можно поменять последовательность пинов.

 

Затем добавляем дополнительные функции. В соответствии с документацией на пины РА9 и РА10 выведен UART1.

Добавляем на пин РА9 функцию UART.

И заполняем параметры этой функции.

 

В любой момент можно посмотреть есть ли текущие ошибки в описании и в чем они заключаются. Если в описании присутствуют ошибки появляется ветка «Ошибки» которая содержит их описание.

 

 

Добавляем функцию UART  для пина РА10.

 

И заполняем параметры.

 

 

Ошибки в описании пропадают.

 

 

Таким образом описываем UART2 и UART3.

Переходим к шине I2C. На текущее время программа FLProg поддерживает только одну шину I2C. Поэтому и описывать будем только одну. По документации шина I2C подключена к пинам РВ6 и РВ7.

Соответственно на пин РВ6 добавляем функцию I2C.

 

И задаем необходимые параметры (в FLProg номера шин начинаются с 0).

То же самое проделываем с пином РВ7.

И параметризируем.

Переходим к шине SPI.

Добавляем на нужный пин функцию.

 

И настраиваем.

 

Завершаем настройку шины.

После настройки пинов переходим к настройке состава стандартной библиотеки для данного контроллера. По умолчанию для нового контроллера запрещены все блоки стандартной библиотеки. Я пока решил что стоит пока разрешить все стандартные блоки для этого контроллера.

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

Переходим на ветку пред настройки Arduino IDE. Эта ветка служит для задания параметров необходимых для того, чтобы Arduino IDE запускалась с настройками на необходимый контроллер.

 

После нажатия кнопки «Прочитать» откроется окно считывания необходимых параметров.

Сначала очищаем файл «preferences.txt» от мусора, а затем открываем Arduino IDE. В ней выбираем необходимый ЦПУ.

 

 

Затем выбираем конкретную плату.

И настраиваем остальные параметры.

 

После чего просто закрываем Arduino IDE, и вычитываем необходимые параметры.

 

Проверяем полученные параметры.

Теперь вернёмся к документации и разберёмся с UART0. Согласно документации он подключается на USB и не имеет выхода на физические пины.

Добавим два новых выхода на в списке пинов.

 

Будем считать их виртуальными.

Задаем имя первому виртуальному пину.

 

 

Добавляем ему функцию UART.

 

Заполняем параметры функции.

 

Аналогично настраиваем второй виртуальный пин.

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

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

 

 

 


1

Автор публикации

не в сети 2 недели

Сергей Глушенко

757
Комментарии: 15Публикации: 388Регистрация: 04-02-2018

2 комментария к “Добавление нового контроллера (STM32F103C8 “Blue Pill”) в программу FLProg.”

  1. Будете ли, Вы, Сергей добавлять новые контроллера и tft  дисплеи в программу, fbd очень мне понятен, работал в кодесис на сфс, но там только свои контроллера, хотелось бы на кортекс А8-А9 платы

     

    0

Оставьте комментарий

Войти с помощью: