Додавання нового контролера (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 дні

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

780
Коментарі: 15Публікації: 391Реєстрація: 04-02-2018

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

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

     

    0

Залишити коментар

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