1. STM32. Програмування STM32F103. Тестова плата. Прошивка через послідовний порт та через ST-Link програматор
Мікроконтролери STM32 здобувають все більшу популярність завдяки своїй потужності, досить різнорідної периферії, та своєї гнучкості. Ми почнемо вивчати STM32F103C8T6, використовуючи бюджетну тестову плату, вартість якої не перевищує 2$ (у китайців). Ще нам знадобиться ST-Link програматор, вартість якого близько 2.5$ (у китайців). Такі суми витрат доступні і студентам і школярам, тому саме з такого бюджетного варіанту я і пропоную почати.
Цей мікроконтролер не є найпотужнішим серед STM32, але і не самий слабкий. Такий собі середнячок. Існують різні тестові плати, у томі числі Discovery які за ціною коштують близько 20$. На таких платах є майже те саме, що і на нашій платі, плюс програматор. В нашому випадку ми будемо використовувати програматор окремо.
Мікроконтролер STM32F103C8. Характеристики
- Ядро ARM 32-bit Cortex-M3
- Максимальна частота 72МГц
- 64Кб Флеш пам`яті для програм
- 20Кб SRAM пам`яті
- Живлення 2.0 ... 3.3В
- 2 x 12-біт АЦП (0 ... 3.6В)
- DMA контролер
- 37 входів / виходів толерантних до 5В
- 4 16-розрядних таймери
- 2 watchdog таймери
- I2C - 2 шини
- USART - 3 шини
- SPI - 2 шини
- CAN
- USB 2.0 full-speed interface
- RTC - вбудований годинник
На платі STM32F103C8 доступні
- виводи портів A0-A12, B0-B1, B3-B15, C13-C15
- Micro-USB коннектор через який можливе живлення плати. На платі присутній стабілізатор напруги на 3.3В. Живлення 3.3В або 5В також можна подавати на відповідні виводи на платі.
- Кнопка Reset
- Дві перемички для BOOT0 та BOOT1. Будемо використовувати під час прошивки через USART.
- Два кварци 8Мгц та 32768 Гц. У мікроконтролера є множник частоти, тому на кварці 8Мгц ми зможемо досягти його максимальної частоти у 72Мгц.
- Два світлодіода. PWR - сигналізує про включене живлення. PC13 - підключений до виходу C13.
- Коннектор для програматора ST-Link.
Отже почнемо з того, що спробуємо прошити мікроконтролер. Це можна зробити за допомогою USB-Uart перехідника на базі мікросхеми FT232 через USART, або за допомогою програматора ST-Link.
Скачати тестовий файл для прошивки можна тут. Програма блимає світлодіодом на платі.
Прошивка STM32 за допомогою USB-Uart перехідника під Windows
STM32 мають у системній пам`яті Bootloader. Bootloader записаний на виробництві і будь-який мікроконтролер STM32 можна запрограмувати через інтерфейс USART за допомогою USART-USB перехідника. Такі перехідники частіше за все виготовляють на базі популярної мікросхем FT232RL. Перш за все підключимо перехідник до комп’ютера і встановимо драйвери (якщо потрібно). Скачати драйвери можна з сайту виробника FT232RL - ftdichip.com. Треба качати драйвера VCP (virtual com port). Після встановлення драйверів у комп’ютері має з`явитися віртуальний послідовний порт.
Підключаємо RX та TX виходи до відповідних виводів USART1 мікроконтролера. RX перихідника підключаємо до TX мікроконтролера (A9). TX перихідника підключаємо до RX мікроконтролера (A10). Оскільки USART-USB має виходи живлення 3.3В подамо живлення на плату від нього.
Щоб перевести мікроконтролер у режим програмування, треба встановити виводи BOOT0 і BOOT1 у потрібний стан і перезавантажити його кнопкою Reset або вимкнути і ввімкнути живлення мікроконтролера. Для цього у нас є перемички. Різна комбінація заганяє мікроконтролер у різні режими. Нас цікавить тільки один режим. Для цього у мікроконтролера на виводі BOOT0 має бути логічна одиниця, а на виводі BOOT1 – логічний нуль. На платі це наступне положення перемичок:
Після натискання кнопки Reset або відключення і підключення живлення, мікроконтролер має перейти у режим програмування.
Програмне забезпечення для прошивки
Качаємо з сайту st.com програму Flash Loader Demonstrator для STM32. Flash Loader Demonstrator - програма для прошивки STM32 через послідовний інтерфейс.
Після включення схеми з правильно виставленими перемичками контролер готовий до роботи з Flash Loader Demonstrator.
Запускаємо Flash Loader Demonstrator и обираємо порт з яким будемо працювати, та встановлюємо параметри порта.
Після вибору параметрів порта натискаємо Next і маємо побачити «світлофор» і інформацію що до об`єму пам`яті. Якщо цього не відбувається тоді дивимось чи коректно обрані параметри зв`язку та чи мікроконтролер дійсно введений у режим програмування.
Тиснемо Next,
На цій сторінці обираємо файл для завантаження у мікроконтролер. Файл може бути у форматі bin або hex.
Тиснемо Next і чекаємо.
Щоб вивести контролер з режиму програмування, повертаємо перемички у початковий стан і натискаємо кнопку Reset. Програма у мікроконтролері має запрацювати.
Прошивка STM32 за допомогою USB-Uart перехідника під Linux (Ubuntu)
Встановлюємо stm32flash
Скачати DEB файл можна тут: http://launchpadlibrarian.net/188294676/stm32flash_0.4-2_i386.deb
Докладніше про stm32flash читаємо тут: https://launchpad.net/ubuntu/wily/i386/stm32flash/0.4-2
Якщо використовуємо USB-UART перехідник буде порт на кшталт цього /dev/ttyUSB0
Отримаємо інформацію про чип
sudo stm32flash /dev/ttyUSB0
Результат:
stm32flash 0.4 http://stm32flash.googlecode.com/ Interface serial_posix: 57600 8E1 Version : 0x22 Option 1 : 0x00 Option 2 : 0x00 Device ID : 0x0410 (Medium-density) - RAM : 20KiB (512b reserved by bootloader) - Flash : 128KiB (sector size: 4x1024) - Option RAM : 16b - System RAM : 2KiB
Читаємо з чипа у файл dump.bin
sudo stm32flash -r dump.bin /dev/ttyUSB0
Пишемо у чип
sudo stm32flash -w dump.bin -v -g 0x0 /dev/ttyUSB0
Результат:
stm32flash 0.4 http://stm32flash.googlecode.com/ Using Parser : Raw BINARY Interface serial_posix: 57600 8E1 Version : 0x22 Option 1 : 0x00 Option 2 : 0x00 Device ID : 0x0410 (Medium-density) - RAM : 20KiB (512b reserved by bootloader) - Flash : 128KiB (sector size: 4x1024) - Option RAM : 16b - System RAM : 2KiB Write to memory Erasing memory Wrote and verified address 0x08012900 (100.00%) Done. Starting execution at address 0x08000000... done.
Прошивка STM32 за допомогою ST-Link програматора під Windows
При використанні програматора ST-Link піни BOOT0 и BOOT1 не використовуються і мають стояти у стандартному положенні для звичайної роботи контролера.
Качаємо з сайту st.com Утиліту STM32 ST-LINK Utility. Встановлюємо її. З нею має бути встановлений і драйвер для ST-Link. Якщо ні, качаємо і встановлюємо драйвери ST-Link: http://www.st.com/content/st_com/en/products/embedded-software/development-tool-software/stsw-link009.html Підключаємо ST-Link у USB- коннектор, а відповідні виводи програматора підключаємо до виводів тестової плати згідно маркування.
Запускаємо програму STM32 ST-LINK Utility
Виконуємо пункт меню Target -> Connect
Виконуємо пункт меню Target -> Erase Chip
Виконуємо пункт меню File -> Open file...
Обираємо файл для завантаження у мікроконтролер.
Виконуємо пункт меню Target -> Programm & Verify...
Після завершення прошивки і перевірки завантажена програма мікроконтролера автоматично запуститься.
Прошивка STM32 за допомогою ST-Link програматора під Linux (Ubuntu)
Встановлюємо софт для роботи з ST-Link
mkdir ~/stlink
cd ~/stlink
sudo apt-get install git libusb-dev
Довелося ще ставити autoconf та libusb-1.0:
sudo apt-get install autoconf
sudo apt-get install libusb-1.0
git clone git://github.com/texane/stlink.git
cd stlink
./autogen.sh
./configure
make
sudo mkdir /opt/texane
sudo cp gdbserver/st-util /opt/texane
sudo cp ./etc/udev/rules.d/49-stlinkv1.rules /etc/udev/rules.d
sudo cp ./etc/udev/rules.d/49-stlinkv2.rules /etc/udev/rules.d
sudo udevadm control --reload-rules
Перевіряємо чи видно програматор і чип
sudo ./st-info --probe
Результат:
Found 1 stlink programmers serial: openocd: "" flash: 65536 (pagesize: 1024) sram: 20480 chipid: 0x0410 descr: F1 Medium-density device
Читаємо з чипа у файл dump.bin
sudo ./st-flash read dump.bin 0x8000000
Програмуємо STM32
sudo ./st-flash --reset write dump.bin 0x8000000
Пам`ятка
Для того щоб не копирсатися у документації кожного разу щодо виводів мікроконтролера на платі я зробив таку пам`ятку, яка нам знадобиться у подальшому.Документація
Всю потрібну документацію до мікроконтролера STM32F103C8T6 можна скачати з сайту виробника: http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103c8.html
Що можна почитати
The Iinsider`s Guide To The STM32 (Книжка російскою мовою)Маркування STM32
Device family | Product type | Device subfamily | Pin count | Flash memory size | Package | Temperature range |
---|---|---|---|---|---|---|
STM32 = ARM-based 32-bit microcontroller | F = General-purpose L = Ultra-low-power TS = TouchScreen W = wireless system-on-chip | 60 = multitouch resistive 103 = performance line | F = 20 pins G = 28 pins K = 32 pins T = 36 pins H = 40 pins C = 48/49 pins R = 64 pins O = 90 pins V = 100 pins Z = 144 pins I = 176 pins B = 208 pins N = 216 pins | 4 = 16 Kbytes of Flash memory 6 = 32 Kbytes of Flash memory 8 = 64 Kbytes of Flash memory B = 128 Kbytes of Flash memory Z = 192 Kbytes of Flash memory C = 256 Kbytes of Flash memory D = 384 Kbytes of Flash memory E = 512 Kbytes of Flash memory F = 768 Kbytes of Flash memory G = 1024 Kbytes of Flash memory I = 2048 Kbytes of Flash memory | H = UFBGA N = TFBGA P = TSSOP T = LQFP U = V/UFQFPN Y = WLCSP | 6 = Industrial temperature range, –40…+85 °C. 7 = Industrial temperature range, -40…+ 105 °C. |
STM32 | F | 103 | C | 8 | T | 6 |
Як зняти захист?
Якщо ви отримали плату с STM32F103, а програматор її не бачить, це означає, що китайці захистили Флеш пам’ять мікроконтролера. Питання "навіщо?" залишмо без уваги. Щоб зняти блокування, підключимо UART перехідник, будемо програмувати через нього. Виставляємо перемички для програмування і поїхали:
Я це буду робити з під Ubuntu за допомогою утиліти stm32flash.
1. Перевіряємо що мікроконтролер видно:
sudo stm32flash /dev/ttyUSB0
Маємо отримати щось таке:
stm32flash 0.4 http://stm32flash.googlecode.com/ Interface serial_posix: 57600 8E1 Version : 0x22 Option 1 : 0x00 Option 2 : 0x00 Device ID : 0x0410 (Medium-density) - RAM : 20KiB (512b reserved by bootloader) - Flash : 128KiB (sector size: 4x1024) - Option RAM : 16b - System RAM : 2KiB2. Знімаємо захист від читання а потім від запису:
sudo stm32flash -k /dev/ttyUSB0
stm32flash 0.4 http://stm32flash.googlecode.com/ Interface serial_posix: 57600 8E1 Version : 0x22 Option 1 : 0x00 Option 2 : 0x00 Device ID : 0x0410 (Medium-density) - RAM : 20KiB (512b reserved by bootloader) - Flash : 128KiB (sector size: 4x1024) - Option RAM : 16b - System RAM : 2KiB Read-UnProtecting flash Done.
sudo stm32flash -u /dev/ttyUSB0
stm32flash 0.4 http://stm32flash.googlecode.com/ Interface serial_posix: 57600 8E1 Version : 0x22 Option 1 : 0x00 Option 2 : 0x00 Device ID : 0x0410 (Medium-density) - RAM : 20KiB (512b reserved by bootloader) - Flash : 128KiB (sector size: 4x1024) - Option RAM : 16b - System RAM : 2KiB Write-unprotecting flash Done.
Тепер можна нормально працювати з мікроконтролером.
Бажаю успіхів!
Дивись також:
- 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
Чудово! Дякую за статтю! Я якраз приглянув на Aliexpress цю плату і хотів почати з неї знайомитися з STM32, а тут якраз Ваші статті з такими гарними поясненнями.) Окрема подяка за якісний український контент на тематику електроніки, якого, на жаль, дуже мало. Велику справу робите.
Класний сайт! Те що треба. Правда плату я зробив свою, вирішив зразу з головою піти, думаю проблем не буде.
Також дуже вдячний за чудовий матеріал, все по поличкам!! Так як я стартую в цій темі з нуля, для мене наведені приклади программ і особливо пояснення до них дуже цінні. Хотілось би ще дуже розглянути приклади роботи з CAN та FIFO, в інтернеті практично немає обширного опису як це правильно працює.. Дякую!!
Привет. Хочу обновить осциллогнаф DSO138 на 60-тую прошивку с помощью программатора ST-LINK v2. На нем процессор STM32F103 48 ножек. Хочу считать утилитой STM32 ST-LINK Utility v4. Мне постоянно выводится сообщение "Can not read memory! Disable read out protection and retry."
Добрый день. Прошивка защищена от считывания. В этом случае ее можно только стереть и записать новую. Подробнее о защите и как ее снять я писал здесь http://www.avislab.com/blog/stm32-ob_ru/
у меня сразу после команды Target -> Connect вылазит ошибка описана выше. Мне нужно закрыть ошибку и нажать Target -> Erase chip?
Вы можете попробовать сделать Target -> Erase chip, но если Connect не состоялся, то ничего не получиться. Попробуйте Target -> Options bytes... и там снять защиту. Так рекомендуют, но с помощью ST-LINK у меня никак не получалось снят защиту. Программатор просто не видел контроллер. У меня получалось снять защиту от чтения только через UART переходник с помощью Flash Loader Demonstartor.
Отличный цикл статей по STM32. СПАСИБО!!! Хотелось бы еще про Opamp и компаратор если можно.
Дуже велика допомога. Молодцi. Дякую!!!
Дуже дякую за статті та ща й рідною мовою) Чудово!
Чи можна прошивати STM32 за допомоги ST-LINK/V2 прямо із IAR Workbench не використовуючи STM32 ST-LINK Utility окремо. Коли я спробував то тримав декілька помилок після чого процедура прошивання зависла. Пошук в інтернеті нашвидкоруч не допоміг. Чи є можливість виправити помилки?
Ваше питання поставило мене у глухий кут. Щоб Вам щось відповісти я маю знати хоча б що то були за помилки та на якій операційній системі?
На випадок, якщо хтось використовує програматор на CH430G під windows 10, то драйвер можна взяти тут http://www.wch.cn/download/CH341SER_EXE.html Я використовував програматор http://www.ebay.com/itm/3PCS-USB-To-RS232-TTL-CH340G-Converter-Module-Adapter-STC-replace-Pl2303-CP2102-/221994002559?hash=item33afdfa87f:g:O6cAAOSwYIhWlmrB
Дійсно, написав трохи поспіхом і можливо це було б краще помістити в статтю “IAR Workbench – IDE для STM32” але ж). Я використовую Win10 64bit та IAR Embedded Workbench for ARM v7.50.2.10505 Я виконав зразки завдань по Вашим статтям налаштування “IAR Workbench – IDE для STM32” де було показано як налаштувати вказану IDE під широко розповсюджену плату яка містить STM32C8T6 MCU і вдало відкомпілював та «залив» на «залізо» программу по миганню світлодіодом. Також я без проблем виконав приклади №5 по програмуванню USART та першу частину прикладу №7 по програмуванню ADC.
Однак при роботі у мене виникло питання (а потім і бажання) чи не можливо компілювати та заливати відкомпільовану прошивку відразу у MCU без використання утіліти ST-LINK так як інтерфейс IAR Workbench містить відповідні можливості. Крім того таким чином ми не тільки можемо відразу виконати завантаження відкомпільованої а і запустити її в Debug режимі. Тобто ми натискаемо кнопку «Download and Debug» на панелі і переходимо в режим відладки або вибираємо через меню наприклад «Project->Download->Download active application» (після цього потрібно або відключити-включити живлення плати або натиснути кнопку апаратного Reset). Відразу «з коробки» ця опція не працювала. Виявилося що для її налаштування потрібно зробити зовсім не багато. Необхідно зайти в налаштування проекту (Options) та вибрати вкладку «Download». На цій вкладці необхідно активувати два чекбокси: «Use flash loader(s)» та «Override default .board file». Після цього необхідно вибрати наступний .board файл: «$TOOLKIT_DIR$\\config\\flashloader\\ST\\FlashSTM32F10xx8.board». Після цього прошивка та відладка через інтерфейс IAR Workbench на девелопер-платі STM32C8T6 повинна запрацювати.
Дякую за дуже корисний і змістовний коментар.
Прошиваю з допомогою ST-Link V2. Якщо перемички у вихідному положенні, то не прошивається. Загуглив інформацію що потрібно натискати кнопку прошивки з одночасним короткостроковим натисканням кнопки Reset на платі, або переставляти перемички як у прикладі з UART при прошивці та поверненні перемичок при робочому режимі. Дебагер з такими качелями не працює. Протестував декілька плат від різних виробників. Чи є варіанти усунути "поребрика"?
Коли прошиваю ST-Link-ом перемички не чіпаю. І дебагер працює. Може проблема з програматором?
Доброго дня. Я зараз починаю вивчати мікроконтролери STM32. Поки що нічого ще не програмував, розбираюсь з середовищем розробки, з платами, з адаптерами. Купив плати з контролерами і ще дещо на Ali Express. У мена є питання про адаптер на FT232RL. Адаптер виявився неоригінальним, він не працює у Win з новим драйвером, і працює зі старим драйвером v. 2.08.14. Я іще пробував цей адаптер із Ubuntu та Android. На Android (через USB OTG) працює стабільно. На Ubuntu наче працює, але на вихід TX періодично проходять якісь незрозумілі дані (спалахує світлодіод, через підключений джампер на RX проходять якісь байти "...FDDDFDDFDDFDFDDDFDD...", на іншій програмі терміналу обривається зв`язок із портом). Чи не знаєте, може на Ubuntu драйвер також не хоче працювати з неоригінальним чипом? Я на одному форумі знайшов: « Linux has a fix for the "broken" devices: https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/usb/serial/ftdi_sio_ids.h#n33 » але тут наче мова йде про чипи FTDI, які "залочив" драйвер. Чи це просто чип "глючить" під Ubuntu?
Виявилося, що на моїй системі Ubuntu був якийсь додаток чи процес, який щось посилав через COM-порти. На /dev/ttyS0 також були якісь "F", "D", як і на /dev/ttyUSB0. Через це, та іще через деякі проблеми у системі перевстановив свою Ubuntu. Тепер усе працює.
У Вас заданий початок флеша 0x8000000. > Читаємо з чипа у файл dump.bin sudo ./st-flash read dump.bin 0x8000000 А кінцевий адрес який? 0x0801 FFFF? Чи всетаки читається вся память аж до 0x1FFF FFFF. В такому разі можна задати діапазон памяті і його так само зчитати?
Дякую! Завдяки Вашій статі розібрався як перепрошити осцилограф DSO150.
Недавні записи
- Text to speech. Українська мова
- LCD Display ST7567S (IIC)
- Розпізнавання мови (Speech recognition)
- Selenium
- Комп'ютерний зір (Computer Vision)
- Деякі думки про точність вимірювань в електроприводі
- Датчики Холла 120/60 градусів
- Модуль драйверів напівмосту IGBT транзисторів
- Драйвер IGBT транзисторів на A316J
- AS5600. Варіант встановлення на BLDC мотор
Tags
docker sensors rtc led timer wifi remap sms css websocket mongodb bme280 rfid bluetooth esp8266 nodemcu bkp piezo bmp280 i2c mpu-6050 encoder examples avr brushless ngnix nvic displays bldc java-script pmsm barometer pwm lcd ethernet stm32 raspberry-pi capture usart gpio exti atmega meteo solar smd dma adc eeprom eb-500 flask python ssd1306 uart options flash mpx4115a html gps st-link 3d-printer servo dc-dc foc git books battery hih-4000 watchdog dht11 web tim programmator ssd1331 mpu-9250 usb rs-232 motor max1674 soldering
Архіви