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
у цій закладці встановлюються ключі для компілятора. Ми сюди ще будемо повертатися, а поки що звернемо увагу на поле Optimization. Це поле задає параметр оптимізації для компілятора. Про оптимізацію буде окрема розмова, поки що Вам потрібно засвоїти, що оптимізація Optimizate Size (-Os) максимально зменшує об’єм скомпільованої програми. Але при цьому компілятор може викинути (оптимізувати) деякі операції, і ваша програма може працювати не так, як би Вам того хотілося. Тому, на перших етапах, я не рекомендую використовувати цей метод оптимізації. Встановіть Optimizate (-O1).
Закладка Link
У цій закладці поки що нас цікавить тільки поле Library та Linked Libraries. Якщо Ви будете використовувати стандартні бібліотеки С, наприклад бібліотеку математичних функцій math, Вам треба буде обрати "Use base C Library". Якщо цього не зробити, то компілятор видасть помилку.
Закладка Output
Тут вказуються куди складати скомпільовані файли і у яких форматах.
Закладка User
Поки що в ній ми нічого робити не будемо.
Закладка Debugger
В цій закладці встановлюються параметри дебагера. Оскільки ми будемо використовувати ST-Link, тут нічого міняти не прийдеться.
Закладка Download
Тут встановлюються параметри щодо загрузки програми до мікроконтролера. Тут нам теж нічого міняти не треба.
Дебагер
Звісно, можна просто заливати програму до мікроконтролера і дивитися як вона працює. Але інколи, коли виникають проблеми, цього не достатньо і хотілось би розібратися як саме працює написана програма. 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, якщо таке взагалі можливо реалізувати.
Саме такий бутлоадер я і мав на увазі. Але про нього мова піде пізніше.
Недавні записи
- Розпізнавання мови (Speech recognition)
- Selenium
- Комп'ютерний зір (Computer Vision)
- Деякі думки про точність вимірювань в електроприводі
- Датчики Холла 120/60 градусів
- Модуль драйверів напівмосту IGBT транзисторів
- Драйвер IGBT транзисторів на A316J
- AS5600. Варіант встановлення на BLDC мотор
- DC-DC для IGBT драйверів ізольований 2 W +15 -8 вольт
- U-FOC - Векторне керування безколекторними моторами
Tags
esp8266 examples adc usart rfid eb-500 soldering lcd stm32 raspberry-pi python mongodb gps mpu-9250 sensors led hih-4000 foc ngnix wifi servo sms ethernet bldc 3d-printer bluetooth mpx4115a web pmsm options remap solar timer bme280 mpu-6050 avr docker flash bkp capture gpio uart meteo i2c usb rtc encoder programmator ssd1306 battery displays java-script barometer watchdog eeprom flask websocket pwm dht11 motor ssd1331 piezo smd brushless atmega books css git st-link dc-dc html nodemcu dma nvic rs-232 exti tim bmp280 max1674
Архіви