2. STM32. Програмування. IDE для STM32
Для того, щоб розробляти свої програми нам знадобиться середовище розробки, бажано з дебагером, і компілятор C.
Я зупинився на CooCox CoIDE та GCC. По-перше цей софт не коштує грошей, по-друге - з ним не виникло ніяких питань. Встановив і почав робити. Щоправда CooCox зроблений тільки під Windows. Це не зовсім добре. І хоча на Ubuntu CooCox і працює під wine і навіть компіляція проходить вдало, з дебагером проблема. Та й робота через wine - це не true way. Якось я напишу, як налаштувати IDE для STM32 під Ubuntu.
А тим часом...
UPD: Я виклав версію CoIDE 1.7.8 на Яндексдиску. У подальшому будемо використовувати інші IDE (читай як встановити і налаштувати Keil uVision5 – IDE для STM32, IAR Workbench – IDE для STM32).
Встановимо IDE CooCox CoIDE на Windows
- Качаємо і встановлюємо програму CooCox (CoIDE-1.7.8.exe) На час написання статті вже була доступна версія 2.0 Бета. Та я бета-версіями намагаюсь не користуватися, тому у прикладах буде фігурувати версія 1.7.8.
- Качаємо і встановлюємо GCC (gcc-arm-none-eabi-5_3-2016q1-20160330-win32.exe)
Перша програма
Запускаємо CooCox.Виконуємо пункт меню Project -> New
Вказуємо ім`я проекту:
Обираємо Чип:
З репозиторію обираємо, які саме модулі ми будемо використовувати:
Відкриваємо main.c і набираємо наступний текст програми:
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
int main(void)
{
int i;
/* Initialize Leds mounted on STM32 board */
GPIO_InitTypeDef GPIO_InitStructure;
/* Initialize LED which connected to PC13, Enable the Clock*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
/* Configure the GPIO_LED pin */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
while (1)
{
/* Toggle LED which connected to PC13*/
GPIOC->ODR ^= GPIO_Pin_13;
/* delay */
for(i=0;i<0x100000;i++);
}
}
Компілюємо (Project->Build)
При першій компіляції IDE може запросити вказати місцезнаходження компілятора.
Треба коректно вказати місце, куди було встановлено GCC.
Після вдалої компіляції заливаємо програму до мікроконтролера. Ця програма буде блимати світлодіодом на платі. Як залити програму до мікроконтролера ми розглядали у попередній статті.
Якщо Ви будете заливати через UART за допомогою UART-USB перехідника, файл для заливки знайдете у директорії: C:\CooCox\CoIDE\workspace\Example_GPIO\Example_GPIO\Debug\bin\Example_GPIO.bin
Якщо у Вас є встановлений ST-Link програматор, програму у мікроконтролер можна залити прямо з IDE (Flash -> Program Download).
Якщо при цьому виникла помилка "Error: Flash driver function execute error" Рекомендується:
- Запустити STM32 ST-LINK Utility і виконати Frimware update.
- Скопіювати файл STLinkUSBDriver.dll з папки C:\Program Files\STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility у папку C:\CooCox\CoIDE\bin після чого перезапустити CooCox IDE
Деякі налаштування IDE та параметри компілятора
Repository
Виконуємо пункт меню View -> RepositoryТут ми обираємо бібліотеки, які необхідні для нашого проекту. При цьому IDE копіює у папку stm_lib вашого проекту потрібні файли.
Конфігурація проекту
Далі дивимось у конфігурацію проектуЗакладка Compile
![CooCox_09](/uploads/2016/07/CooCox_09-300x183.png)
у цій закладці встановлюються ключі для компілятора. Ми сюди ще будемо повертатися, а поки що звернемо увагу на поле Optimization. Це поле задає параметр оптимізації для компілятора. Про оптимізацію буде окрема розмова, поки що Вам потрібно засвоїти, що оптимізація Optimizate Size (-Os) максимально зменшує об’єм скомпільованої програми. Але при цьому компілятор може викинути (оптимізувати) деякі операції, і ваша програма може працювати не так, як би Вам того хотілося. Тому, на перших етапах, я не рекомендую використовувати цей метод оптимізації. Встановіть Optimizate (-O1).
Закладка Link
![CooCox_10](/uploads/2016/07/CooCox_10-300x183.png)
У цій закладці поки що нас цікавить тільки поле Library та Linked Libraries. Якщо Ви будете використовувати стандартні бібліотеки С, наприклад бібліотеку математичних функцій math, Вам треба буде обрати "Use base C Library". Якщо цього не зробити, то компілятор видасть помилку.
Закладка Output
![CooCox_11](/uploads/2016/07/CooCox_11-300x183.png)
Тут вказуються куди складати скомпільовані файли і у яких форматах.
Закладка User
![CooCox_12](/uploads/2016/07/CooCox_12-300x183.png)
Поки що в ній ми нічого робити не будемо.
Закладка Debugger
![CooCox_14](/uploads/2016/07/CooCox_14-300x183.png)
В цій закладці встановлюються параметри дебагера. Оскільки ми будемо використовувати ST-Link, тут нічого міняти не прийдеться.
Закладка Download
![CooCox_14](/uploads/2016/07/CooCox_14-300x183.png)
Тут встановлюються параметри щодо загрузки програми до мікроконтролера. Тут нам теж нічого міняти не треба.
Дебагер
Звісно, можна просто заливати програму до мікроконтролера і дивитися як вона працює. Але інколи, коли виникають проблеми, цього не достатньо і хотілось би розібратися як саме працює написана програма. CooCox CoIDE має вбудований дебагер, що дуже корисно на етапі вивчення мікроконтролера. Також дебагер допоможе знайти помилки у складних проектах. CooCox CoIDE вже налаштована на роботу з ST-Link і ніяких додаткових налаштувань робити не потрібно. Достатньо запустити дебагер Меню (Debug -> Debug). При цьому програматор має бути підключеним до комп`ютера, а мікроконтролер - до програматора. При запуску дебагера виконується компіляція проекту, заливка програми до мікроконтролера і її покроковий запуск.У Вас є наступні кнопки для керування дебагером.
Проекспериментуйте з ними, щоб зрозуміти як вони працюють.
У закладці Variables можете спостерігати за значенням змінних.
Також можна підвести курсор до змінної і спостерігати у спливаючий підказці її значення
Якщо встановити Breackpoint (Меню Debug -> Todggle Breackpoint) на потрібні рядки у коді, під час виконання програми дебагер буде зупинятися на встановлених Breackpoint-ах.
Тепер, після першого знайомства з IDE, можна перейти безпосередньо до вивчення мікроконтролера STM32F103 і написання своїх програм.
Бажаю успіхів!
Дивись також:
- 1. STM32. Програмування STM32F103. Тестова плата. Прошивка через UART та через ST-Link
- 2. STM32. Програмування. IDE для STM32
- 3. STM32. Програмування STM32F103. GPIO
- 4. STM32. Програмування STM32F103. Тактування
- 5. STM32. Програмування STM32F103. USART
- 6. STM32. Програмування STM32F103. NVIC
- 7. STM32. Програмування STM32F103. ADC
- 8. STM32. Програмування STM32F103. DMA
- 9. STM32. Програмування STM32F103. TIMER
- 10. STM32. Програмування STM32F103. TIMER. Захоплення сигналу
- 11. STM32. Програмування STM32F103. TIMER. Encoder
- 12. STM32. Програмування STM32F103. TIMER. PWM
- 13. STM32. Програмування STM32F103. EXTI
- 14. STM32. Програмування STM32F103. RTC
- 15. STM32. Програмування STM32F103. BKP
- 16. STM32. Програмування STM32F103. Flash
- 17. STM32. Програмування STM32F103. Watchdog
- 18. STM32. Програмування STM32F103. Remap
- 19. STM32. Програмування STM32F103. I2C Master
- 20. STM32. Програмування STM32F103. I2C Slave
- 21. STM32. Програмування STM32F103. USB
- 22. STM32. Програмування STM32F103. PWR
- 23. STM32. Програмування STM32F103. Option bytes
- 24. STM32. Програмування STM32F103. Bootloader
- STM32. Скачати приклади
- System Workbench for STM32 Інсталяція на Ubuntu
- Keil uVision5 – IDE для STM32
- IAR Workbench – IDE для STM32
- Керування безколекторним двигуном постійного струму (BLDC) за допомогою STM32
- Керування PMSM за допомогою STM32
Схоже, Coocox помер. Сайт не відповідає. Дуже шкода. Був дуже гарний засіб розробки. Доведеться користуватися зв`язкою STM32CubeMX та System Workbench for STM32 IDE.
Так, їх сайт лежить. Може тимчасові проблеми. Шкода якщо проект закриють.
Дякую за чудову добірку статей для початківців. Вирішив спробувати себе в програмуванні STM32, купив саме таку плату і чудом знайшов цей сайт з дедатьним описом всіх кроків PS Скріншот для "Закладка Debugger" додайте будь ласка. А то зараз двічі скрін з закладкою Download.
Здається виконувати всередині циклу один і той же фрагмент коду двічі то зайве. while (1) { /* Toggle LED which connected to PC13*/ GPIOC->ODR ^= GPIO_Pin_13; /* delay */ for(i=0;i<0x100000;i++); } Результат, здається той же.
Дякую за зауваження. Поправив.
Вам дякую за чудову підборку статей. Роблю перші кроки в програмуванні взагалі, та STM32 зокрема. Буде купа питань, буду спамити в коментах :) До якоїсь зі статей бачив комент про можливу статтю Бутлоадер. Є питання/пропозиція - бутлоадер для програмування мікроконтроллера через рідний USB, якщо таке взагалі можливо реалізувати.
Саме такий бутлоадер я і мав на увазі. Але про нього мова піде пізніше.
Недавні записи
- Selenium
- Комп'ютерний зір (Computer Vision)
- Деякі думки про точність вимірювань в електроприводі
- Датчики Холла 120/60 градусів
- Модуль драйверів напівмосту IGBT транзисторів
- Драйвер IGBT транзисторів на A316J
- AS5600. Варіант встановлення на BLDC мотор
- DC-DC для IGBT драйверів ізольований 2 W +15 -8 вольт
- U-FOC - Векторне керування безколекторними моторами
- FOC - своя реалізація векторного керування. Підбиваю підсумки 2022 року
Tags
raspberry-pi st-link bldc timer max1674 bluetooth eb-500 python ngnix rtc atmega servo avr pwm web tim uart remap brushless bme280 smd esp8266 eeprom bkp capture dht11 ethernet sensors websocket mongodb 3d-printer piezo rs-232 led css meteo i2c options exti html battery soldering bmp280 wifi mpu-9250 examples dma adc gpio sms motor solar hih-4000 lcd docker ssd1306 encoder dc-dc displays pmsm barometer watchdog java-script flask git gps mpu-6050 flash nvic books foc nodemcu programmator usb usart rfid mpx4115a stm32 ssd1331
Архіви