Arduino core stm32

Дешевая STM32 плата + Arduino IDE UPD 17.08.2017

Хотите прокачать ваши Arduino проекты? Заставить их работать быстрее, измерения и регулировку сделать точнее, ну и добавить баги(с новыми девайсами они неизбежны). Тогда эта статья для Вас.

Arduino тема всё больше захватывает умы человечества, но рано или поздно мы встречаемся с тем, что нам чего-то не хватает, например бюджета/размеров/пиновпортов/разрядности/производительности… Как говорил один мудрый человек — «Кто хочет, тот ищет возможности, кто не хочет — ищет причины».

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

Краткое изложение данной статьи в видео формате:

Ладно, меньше лирики и ближе к теме. В этой статье, я буду рассматривать дешёвую отладочную плату, которая основана на базе микроконтроллера STM32F103C8T6:

Для начала, сравним основные параметры STM32 платы, и её аналога по цене — Arduino Nano V3.0:

  • Рабочая частота 72 МГц, против 16 у ардуино;
  • Объем Flash памяти 64 Кбайта, против 32;
  • Оперативной памяти, она же RAM(где хранятся переменные), у STM32 целых 20 Кбайт, у ардуинки всего лишь 2;
  • Быстрый 12-ти битный АЦП, в то время как у Arduino плат, что на базе AVR микроконтроллеров(это как правило большинство) используется 10-ти битный. Это означает, что в случае STM32, функция analogRead(*); будет возвращать 0..4095 против 0..1023, что в первом случае ведёт к более точным измерениям;
  • 16-ти битный аппаратный ШИМ, против 8-ми у Arduino плат, то есть, функция analogWrite(*);pwmWrite(*); может принимать значение 0..65535, против убогих 0..255. Это позволит ещё точнее управлять нашими двигателями, сервами и прочими девайсами, которые рулятся при помощи ШИМ;
  • Аппаратная работа с USB, чем не может похвастаться не одна Arduino плата стоимостью менее 2 долларов;
  • Напряжение питания — от 2 до 3.6В(прямо таки заточено под 2 AA батарейки), против 2.7. 5В у ардуино плат;
  • Цены на момент написания статьи — 1.9 доллара против 1.8(алиэкспресс).

Очевидно, что отладочная плата на базе STM32 выигрывает по всём параметрам у Arduino Nano, исключением является разве что стоимость, но согласитесь 10 центов — хорошая цена за большую производительность, а про периферию, которой нафарширован STM32, так я вообще молчу, чего только стоят DMA или интегрированные в микроконтроллер часы реального времени.

Всё это в сумме делает данную плату крайне привлекательной во всём, кроме одного — новичку, как например мне, тема STM32 кажется слишком затратной по времени, есть целые сайты посвящённые программированию этих микроконтроллеров. А вот если подружить STM32 с Arduino IDE, то порог вхождения опускается до крайне низкого уровня. Хотя, как говорится, «В каждой бочке мёда, есть ложка дёгтя», но об этом чуть ниже.

Приступим к подготовке платы, для работы с Arduino IDE. Первое что необходимо сделать — залить в микроконтроллер специальный загрузчик, который позволит прошивать плату через аппаратный USB, причём прямо из среды разработки. Для этого необходимо перевести верхний джампер(он же «BOOT0»), в положение «1»:

Дело в том, что в STM32 с завода прошит, в так называемую системную память(system memory), специальный загрузчик, который позволяет прошивать плату через самый обычный USB to UART переходник, не прибегая к специфическим программаторам типа ST-Link V2.

Дальше нам понадобиться переходник с USB на UART. Стоит помнить, что STM32, это 3.3 В логика, совместимость с 5-ти вольтовой не гарантируется, поэтому рекомендовано использовать USB to UART, у которого есть возможность выбора режимов работы с 3.3/5В логикой. Я использовал дешёвый переходник на базе CH340G:


* как видно, производитель не стал заворачиваться со смывкой флюса, на работу, конечно, никак не влияет.

Плату подключил к USB to UART переходнику следующим образом:

G GND;
5V 5V;
PA10 TXD;
PA9 RXD.


* PA10/PA9 на плате подписаны просто как A10/A9 — эти порты являются первым аппаратным USART’ом, всего их на плате 3, так же тут 2 аппаратных I2C и 2 SPI.

Ради удобства запитал плату от 5 В, для питания от 3.3 В на плате есть пин «3.3». Внимание, 5 В может запросто вывести микроконтроллер из строя, так что уделите должное внимание подключению.

Качаем, устанавливаем и запускаем Flash Loader Demonstrator(есть в архиве к статье):

Выбираем номер COM-порта нашего переходника, в моём случае это COM43, потом нажимаем «Next»:

Так как у меня микроконтроллер новый, ещё муха не сидела на него никто ничего не записывал(разумеется кроме самого производителя), то тут по умолчанию стоит защита от чтения, программа нас предупреждает, что если нажать кнопку «Remove protection», Flash память будет очищена, то есть если бы там была какая-то прошивка — она удалится. В моём случае там ничего полезного нет, так что смело жму. Далее вижу следующее:

Так как моя отладочная плата основана на микроконтроллере STM32F103C8 — здесь 64 Кбайт Flash памяти, есть ещё STM32F103CB микроконтроллер, где в два раза больше Flash.

Дальше кликаем «Next»:

Опять «Next», и видим следующее окно:

Выбираем «Download to device» и жмём на «. «:

Меняем тип файлов на *.bin и открываем файл «generic_boot20_pc13.bin»(тоже присутствует в архиве) который можно взять из проекта STM32duino-bootloader.

Дальше кликаем на кнопку «Next», после прошивки загрузчика мы увидим зелёный свет:

Потом надо скачать, для среды разработки Arduino IDE, специальное STM32 ядро(так же есть в архиве к статье). Тут есть один нюанс, на момент написания статьи, ядро не работает на версиях среды разработки свыше 1.6.5, у меня стоит 1.6.5-r5 которую скачал тут.
Проверенна работоспособность ядра на Arduino IDE версии 1.6.9.

Дальше разархивируем содержимое по адресу Мои Документы\Arduino\hardware:

В моём случае полный путь выглядит вот так — «C:\Users\RSK\Documents\Arduino\hardware»

Разумеется, что система устройство определить не сумеет, поэтому надо ещё установить драйвера на плату. Заходим в папку «Мои Документы\Arduino\hardware\Arduino_STM32\drivers\win»(или «drivers\win», в случае архива к статье), и запускаем от имени администратора файл «install_drivers.bat»:

После этого верхний джампер(тот что «BOOT0»), переводим в положение «0» и подключаем плату к компьютеру через microUSB кабель:

Она должна в диспетчере устройств определиться или как «Maple DFU» или «Maple Serial (COM*)»:

Не совсем понятно почему после первого подключения плата определяется по-разному, на разных компьютерах, но не суть, приступаем к настройке Arduino IDE.

Запускаем среду разработки, дальше Инструменты -> Плата -> Boards Manager:

Здесь нужно установить ядро для платы Arduino Due. Выбираем последнюю версию и нажимаем «Install»:

Потом Инструменты -> Плата -> «Generic STM32F103C», дальше Variant: «STM32F103C8 (20k RAM. 64k Flash)», Upload Method: «STM32duino bootloader», Порт — номер COM-порта платы, вообщем всё как на скрине:

Всё, плата готова к прошивке и программированию в среде разработки Arduino IDE. Давайте прошьём какой-то скетч из примеров, которые «вшиты» в ядро, заходим Файл -> Папка со скетчами -> hardware -> Arduino_STM32 -> STM32F1 -> libraries -> A_STM32_Examples -> Digital -> Blink:

Классический «Hello World» в мире микроконтроллеров. Изменяем PB1 на PC13, так как светодиод, что на плате, подключен к этому порту:


* К стати, загорается он по низкому уровню на ножке PC13.

Нажимаем кнопку «Вгрузить», после прошивки среда разработки выдаст что-то типа:

«Done!
Resetting USB to switch back to runtime mode
error resetting after download: usb_reset: could not reset device, win error: Не удается найти указанный файл.».

Но прошивка то загрузилась успешно, хотя не всегда так, иногда Arduino IDE выдаёт другие сообщения.

Когда видите, сообщение типа:

«dfu-util — © 2007-2008 by OpenMoko Inc.
Couldn’t find the DFU device: [1EAF:0003]
This program is Free Software and has ABSOLUTELY NO WARRANTY»

Это означает, что плату прошить не удалось.

Когда среда разработки выдаёт:

«Searching for DFU device [1EAF:0003]…
Assuming the board is in perpetual bootloader mode and continuing to attempt dfu programming. »

И больше ничего не происходит, попробуйте в этот момент перезагрузить плату клацнув кнопку ресет. По аналогии это как с Arduino Pro Mini.

А теперь про «ложку дёгтя», о которой я писал вначале статьи, почему-то не всегда получается прошить плату в среде разработки, даже больше, она не всегда определяется компьютером. Я для себя это решил следующим образом, перед тем как загрузить прошивку(перед нажатием кнопки «Вгрузить»), клацаю «Reset» на плате, и после прошивки, ещё раз перезагружаю плату. В этом случае процент вероятности, что плата прошьется, равен 99%. Непонятно почему работает именно так, но факт. Думаю, что рано или поздно этот косяк поправят, и всё будет автоматом перезагружаться как нужно. А чтобы это быстрее поправили, надо чтобы комьюнити этой замечательной STM32 отладочной платы росла, поэтому делитесь этой статьей с друзьями, особенно с друзьями программистами.

По поводу распиновки:

Лучшее что мне удалось найти, это распиновка самого микроконтроллера(открывайте в новой вкладке):

К порту нужно обращаться по полному имени, например:

digitalWrite(PB0, LOW);
analogWrite(PA8, 65535);pwmWrite(PA8, 65535);
analogRead(PA0);
LiquidCrystal lcd(PB0, PA7, PA6, PA5, PA4, PA3);

Ещё рекомендую зайти на сайт docs.leaflabs.com/docs.leaflabs.com/index.html там есть много чего интересного по теме программирования в Arduino IDE, правда на английском языке.

Я порылся в файлах ядра, и нашёл один интересный файл:
Documents\Arduino\hardware\Arduino_STM32\STM32F1\variants\generic_stm32f103c\board.cpp

Там прописаны все порты, которые поддерживают:

  • ШИМ, то есть функция analogWrite();pwmWrite(); — PB0, PA7, PA6, PA3, PA2, PA1, PA0, PB7, PB6, PA10, PA9, PA8, а это далеко не все, которые размечены на распиновке чипа;
  • АЦП, аля analogRead(); — PB0, PA7, PA6, PA5, PA4, PA3, PA2, PA1, PA0.

Так что имейте это ввиду. Хотя этого более чем достаточно от платы, стоимостью в 1.9 доллара.

Ещё заметил, что пины PA12/PA11 подключены к D+/D- USB, их лишний раз лучше вообще не трогать, ибо чуть что, на кону не 2-х долларовый кусок стеклотекстолита с чипом, а материнская плата компьютера.

Источник

Releases: stm32duino/Arduino_Core_STM32

Arduino Core for STM32 2.3.0

What’s Changed

Interrupts: remove C prototype and keep only C++ prototypes by @ABOSTM in #1617

ci(stm32cube): enhance version regex to match RC versions for example by @ABOSTM in #1618

ci(stm32cube): manage Release candidate for HAL/CMSIS versions by @ABOSTM in #1630

[U(S)ART] hardware flow control support by @akasona in #1634

system(U5): HAL RCC should restore PWR clock after clock configuration by @ABOSTM in #1639

cores(U5): support USB Type-C on U5 by @ABOSTM in #1640

Adding new variant for Generic G070xxT by @techstudio-design in #1638

fix(cli): optional column number in error pattern by @fpistm in #1658

Bootloader jump to application by @ABOSTM in #1653

add STM32G031FxPx (and STM32G031Y8Yx, STM32G041F6Px, STM32G041F8Px STM32G041Y8Yx) by @olikraus in #1655

Wire: implement STOP sequence to recover I2C bus. by @ABOSTM in #1663

fix(WL): wrong arm cortex math library and VECT_TAB_OFFSET used for CM4 by @fpistm in #1665

feat: Add No Optimization (-O0) option to menus by @ABOSTM in #1666

feat: Add STM32Cube HAL getter to SPI, Wire and HardwareSerial by @ABOSTM in #1674

Variant update 6.0.50 by @ABOSTM in #1683

fix: Stabilize SWD Programming for Swan (STM32L4R5) by @zfields in #1694

core: fix HardwareSerial compilation failed when USART disabled by @ABOSTM in #1697

wire: add fix for toggling NoStretch by @ric96 in #1691

Add flags about fpv4 for cortex-m33 on platformio-build.py by @asukiaaa in #1704

chore: Prepare for next STM32CubeProgrammer release by @zfields in #1711

fix: make micros compatible with ISR by @fpistm in #1702

Cleaning the build process by @massonal in #1708

HAL legacy support by @fpistm in #1710

Added new Agafia SG0 Board by @harji2130 in #1690

Add support to CRC peripheral by default by @cparata in #1715

fix: allow to disable HAL CRC module by @fpistm in #1716

HardwareTimer: call refresh() after parameter update when timer not running by @ABOSTM in #1721

Improve Swan initialization by @zfields in #1722

feat: allows arduino-cli to override build property by @fpistm in #1725

Improve support for hand-written asm source files by @ivankravets in #1729

Added F722RE Variant to boards.txt, added F722RE ldscript.ld by @geosmall in #1712

Added the N-Versions of G0(7,8)1G(8,B)U generic Boards by @microtronics in #1730

Added STM32F765IIKx by @PumaFPV in #1732

variant: update entries and ci config by @fpistm in #1734

variant: add AcSIP S76S support by @fpistm in #1733

fix: add COM port prefix in bmp_upload pattern on Windows by @reppad in #1737

Review get adc/dac/timer channel functions by @fpistm in #1735

Error management: save space when core logs are not enabled by @fpistm in #1739

Add functionality to ignore library examples in CI for PlatformIO by @valeros in #1746

fix: CMSIS STM32G491and STM32G4A1 : add missing aliases for TIM7 and COMP4/5/6 by @ABOSTM in #1744

Arduino lint by @fpistm in #1743

Adding L431RC Generic by @mackelec in #1736

variant: G0: add Nucleo-G070RB by @TDhaouST in #1745

HAL Drivers and CMSIS updated:

  • STM32WBxx HAL Drivers to v1.10.1 and CMSIS Drivers to v1.10.1 by @ABOSTM in #1684
  • STM32F4xx HAL Drivers to v1.8.0 and CMSIS Drivers to v2.6.8 by @ABOSTM in #1687
  • STM32G0xx HAL Drivers to v1.4.4 and CMSIS Drivers to v1.4.2 by @ABOSTM in #1688
  • STM32U5xx HAL Drivers to v1.1.0 , CMSIS Drivers to v1.1.0 by @ABOSTM in #1685
  • STM32H7xx HAL Drivers to v1.11.0 and CMSIS Drivers to v1.10.2 by @ABOSTM in #1686
  • STM32L4xx HAL Drivers to v1.13.3 by @fpistm in #1701

New Contributors

  • @akasona made their first contribution in #1634
  • @techstudio-design made their first contribution in #1638
  • @olikraus made their first contribution in #1655
  • @ric96 made their first contribution in #1691
  • @asukiaaa made their first contribution in #1704
  • @massonal made their first contribution in #1708
  • @harji2130 made their first contribution in #1690
  • @ivankravets made their first contribution in #1729
  • @microtronics made their first contribution in #1730
  • @PumaFPV made their first contribution in #1732
  • @reppad made their first contribution in #1737
  • @mackelec made their first contribution in #1736
  • @TDhaouST made their first contribution in #1745

Known issue

  • #1749 build_opt.h not properly generated (see issue to get patch)

Contributors

Arduino Core for STM32 2.2.0

This release includes:

Add support of:

  • Daisy Petal SM by @beserge in #1559
  • Daisy Patch SM by @beserge in #1519
  • Generic G030C6Tx and G030C8Tx by @hitech95 in #1547
  • WeAct MiniSTM32H7xx by @ag88 in #1552
  • Generic STM32G030F6 by @ademuri in #1589
  • DevEBox H7xx by @fpistm in #1573

HAL Drivers and CMSIS updated:

  • STM32F7xx HAL Drivers to v1.2.10 by @ABOSTM in #1599
  • STM32F7xx CMSIS Drivers to v1.2.10 by @ABOSTM in #1599
  • STM32G4xx HAL Drivers to v1.2.2 by @ABOSTM in #1597
  • STM32G4xx CMSIS Drivers to v1.2.2 by @ABOSTM in #1597
  • STM32H7xx HAL Drivers to v1.10.1 by @ABOSTM in #1603
  • STM32H7xx CMSIS Drivers to v1.10.1 by @ABOSTM in #1603
  • STM32L4xx HAL Drivers to v1.13.2 by @ABOSTM in #1594
  • STM32L4xx HAL Drivers to v1.7.2 by @ABOSTM in #1594
  • STM32MP1xx HAL Drivers to v1.5.0 by @ABOSTM in #1576
  • STM32MP1xx CMSIS Drivers to v1.5.0 by @ABOSTM in #1576
  • STM32U5xx HAL Drivers to v1.0.2 by @ABOSTM in #1595
  • STM32WBxx HAL Drivers to v1.10.0 by @ABOSTM in #1580
  • STM32WBxx CMSIS Drivers to v1.10.0 by @ABOSTM in #1580

Middleware updated:

  • OpenAmp Middleware to MP1 Cube version 1.5.0

Core dependencies:

  • Update STM32 Tools 2.1.1
  • Move from xpack-arm-none-eabi-gcc-10.2.1-1.1 to xpack-arm-none-eabi-gcc-10.3.1-2.3.

What’s Changed

  • CI: refactor python scripts by @fpistm in #1522
  • Daisy Seed 1.1 variant compatibility by @beserge in #1528
  • fix(F2): Ethernet peripheral configuration for LAN8742A by @fpistm in #1540
  • HardwareTimer: Allow delaying initialization to setup method by @matthijskooijman in #1534
  • HardwareTimer: Add API to check whether timer/channels are running by @ABOSTM in #1550
  • Fix typos in variants/ subdirectory by @luzpaz in #1553
  • ci: add codespell action by @fpistm in #1554
  • HardwareTimer: start timer in case only CC interrupts are used by @ABOSTM in #1549
  • HardwareTimer: fix typo in comments and obvious ICPolarity wrong setting by @ABOSTM in #1548
  • HardwareTimer: remove useless variable timAssociatedInputChannel by @ABOSTM in #1558
  • Wire: Max TX buffer length by @ABOSTM in #1562
  • Synchronize PlatformIO build scripts by @valeros in #1563
  • fix variant WeActMiniH7xx, DevEBoxH7xx: ena peripheral pll clks by @ag88 in #1585

New Contributors

  • @beserge made their first contribution in #1528
  • @hitech95 made their first contribution in #1547
  • @luzpaz made their first contribution in #1553
  • @ag88 made their first contribution in #1552
  • @ademuri made their first contribution in #1589

Several components libraries are available on stm32duino organization.
They are also available through the Arduino library manager. Search for STM32duino 😉

Contributors

Arduino Core for STM32 2.1.0

This release includes:

Add support of:

NUCLEO WL55JC1 (No LoRa support available)

  • Several generic variant:
    • Generic F042K4Tx
    • Generic F042K6Tx
    • Generic G0B1RBTx
    • Generic G0B1RCIx
    • Generic G0B1RCTx
    • Generic G0B1REIx
    • Generic G0B1RETx
    • Generic G0C1RCIx
    • Generic G0C1RCTx
    • Generic G0C1REIx
    • Generic G0C1RETx
    • Generic H742IGKx
    • Generic H742IGTx
    • Generic H742IIKx
    • Generic H742IITx
    • Generic H750IBTx
    • Generic L433CBTx
    • Generic L433CBUx
    • Generic L433CCTx
    • Generic L433CCUx
    • Generic L443CCTx
    • Generic L443CCUx
    • Generic L4R5ZGYx
    • Generic L4R5ZIYx
    • Generic L4R9ZGYx
    • Generic L4R9ZIYx
    • Generic L4S5ZIYx
    • Generic L4S9ZIYx
    • Generic U575AGIxQ
    • Generic U575AIIxQ
    • Generic U575ZGTxQ
    • Generic U575ZITxQ
    • Generic U585AIIxQ
    • Generic U585ZETxQ
    • Generic WB5MMGHx
    • Generic WL54CCUx
    • Generic WL54JCIx
    • Generic WL55CCUx
    • Generic WL55JCIx
    • Generic WLE4C8Ux
    • Generic WLE4CBUx
    • Generic WLE4CCUx
    • Generic WLE4J8Ix
    • Generic WLE4JBIx
    • Generic WLE4JCIx
    • Generic WLE5C8Ux
    • Generic WLE5CBUx
    • Generic WLE5CCUx
    • Generic WLE5J8Ix
    • Generic WLE5JBIx
    • Generic WLE5JCIx
  • HAL Drivers and CMSIS added:

    • STM32U5xx CMSIS Drivers to v1.0.0
    • STM32U5xx HAL Drivers to v1.0.0
    • STM32WLxx CMSIS Drivers to v1.1.0
    • STM32WLxx HAL Drivers to v1.1.0

    HAL Drivers and CMSIS updated:

    • STM32F0xx HAL Drivers to v1.7.6
    • STM32F0xx CMSIS Drivers to v2.3.6
    • STM32F1xx HAL Drivers to v1.1.8
    • STM32F1xx CMSIS Drivers to v4.3.3
    • STM32F2xx HAL Drivers to v1.2.7
    • STM32F2xx CMSIS Drivers to v2.2.5
    • STM32F3xx CMSIS Drivers to v2.3.6
    • STM32F3xx HAL Drivers to v1.5.6
    • STM32F4xx HAL Drivers to v1.7.13
    • STM32F4xx CMSIS Drivers to v2.6.7
    • STM32G0xx HAL Drivers to v1.4.2
    • STM32G0xx CMSIS Drivers to v1.4.1
    • STM32L0xx CMSIS Drivers to v1.9.2
    • STM32L0xx HAL Drivers to v1.10.5
    • STM32L1xx HAL Drivers to v1.4.4
    • STM32L1xx CMSIS Drivers to v2.3.2
    • STM32WBxx CMSIS Drivers to v1.9.0
    • STM32WBxx HAL Drivers to v1.9.0

    Middleware updated:

    Core dependencies:

    • Update STM32 Tools 2.1.0
    • Move from xpack-arm-none-eabi-gcc-9.3.1-1.3 to xpack-arm-none-eabi-gcc-10.2.1-1.1.

    Enhancements/improvements:

    • board: Nucleo-G474RE: use HSE instead of HSI (#1376)
    • feat(cdc): add api to manage the DTR usage (#1193)
    • feat(cdc): implement rts api
    • feat(uart): add LPUART2 support available wit G0
    • Dual pad analog switch: skip gpio configuration in case of direct ADC
    • chore: update ll and hal source wrapped files to ignore unused warning
    • library: add RGB LED TLC59731
    • config: add debug information menu (#873)
    • update generated files to STM32_open_pin_data c6.0.30 including L1 AF USB fix (#1451)
    • wire: enhance i2c_getClkFreq()
    • spi: enhance spi_getClkFreqInst()
    • spi: ensure peripheral reset
    • spi: set MasterKeepIOState to avoid glitches
    • bsp: analog: handle ADC_VER_V5_V90 available with some STM32H7xx
      .

    Fixes:

    • fix: BlackPill F411CE I2C SDA pin (#1369)
    • fix: analog: use MAX_PWM_RESOLUTION instead of MAX_ADC_RESOLUTION (#1378)
    • fix: variant NUCLEO_H743ZI digital pin typo
    • fix(spi): get correct peripheral clock frequency
    • fix(eeprom): define FLASH_FLAG_ALL_ERRORS
    • fix: BlackPill F407Zx missing comma
    • fix: nucleo-l152RE: add missing clock configuration for ADC
    • fix: correct guard for RHF76_052 (#1439)
    • platform: use build.opt instead of build_opt.h . See: arduino/arduino-cli#1338
      When the above issue will be fix. This change should be reviewed. This is backward compatible.
    • fix: Add missing USB and ADC clock configuration for STM32F103R(8-B)T
    • fix(uart): add missing half duplex init
    • fix: correct variant path for some STM32G0xx
    • HartdwareSerial: recover original Arduino asynchronous write API (#1492)
    • chore: sort third party group by alphabetical order
    • refactor: unified stm32CubeProg shell script. Require STM32Tools v2.1.0

    Plus several other fixes: See 2.0.0. 2.1.0

    Several components libraries are available on stm32duino organization.
    They are also available through the Arduino library manager. Search for STM32duino 😉

    Arduino Core for STM32 2.0.0

    Important note:

    The board package index has changed to better follow the package index specification. New link is:

    Main changes

    As the number of variants continues to grow and in order to ease navigation, they have been grouped in sub-folders per series.

    To improve variants support and generic ones several enhancements/fixes has been done:

    • Each variant is linked to its mcu/package
    • All pins capabilities is possible without modifying the PeriperhalPins.c PinMap array. ALTx pin naming allows to use all alternative possibilities which use other Hardware peripheral instances.
    • All remap pins are supported (F0/G0)
    • All dual pad pins are supported (H7)
    • Analog definition clean up
    • Several fixes in existing variants

    All generic variants are now automatically generated thanks the STM32_open_pin_data repository which provides all the information required for the pin configuration of products based on STM32 MCU. All the generic variants are generated in the variant folder, this means all the generic STM32 MCU are generated. Only the linker script and the clock config are missing. A board_entry.txt file is generated to ease board declaration.

    Note that flash size used can be increased by 2k as now all pins are available in the PeripheralPins.c . To decrease it you can redefine the \ PinMap arrays at sketch level to only provide access to the used pins. See the Wiki custom pinmap array section.

    This release includes:

    Add support of:

  • Several generic variant:
    • STM32F030C8
    • STM32F030F4
    • STM32F030R8
    • STM32F031K6T
    • STM32F042C4, STM32F042C6
    • STM32F051K6U, STM32F051K8U
    • STM32F070CB
    • STM32F070RB
    • STM32F072C8, STM32F072CB
    • STM32F072R8, STM32F072RB
    • STM32F091RB, STM32F091RC
    • STM32F100C4, STM32F100C6
    • STM32F100C8, STM32F100CB
    • STM32F207ZC, STM32F207ZE, STM32F207ZF, STM32F207G
    • STM32F217ZE, STM32F217G
    • STM32F302R6, STM32F302R8
    • STM32F303CB, STM32F303CC
    • STM32F303K6, STM32F303K8
    • STM32F303RD, STM32F303RE
    • STM32F303RB, STM32F303RC
    • STM32F303VBT, STM32F303VCT
    • STM32F334K4, STM32F334K6, STM32F334K8
    • STM32F401VB, STM32F401VC, STM32F401VD, STM32F401VE
    • STM32F407ZE, STM32F407ZG
    • STM32F413ZG, STM32F413ZH
    • STM32F417ZE, STM32F417ZG
    • STM32F423ZH
    • STM32F427ZG, STM32F427ZI
    • STM32F429ZE, STM32F429ZG, STM32F429ZI
    • STM32F437ZG, STM32F437ZI
    • STM32F439ZG, STM32F439ZI
    • STM32F446VC, STM32F446VE
    • STM32F745ZE, STM32F745ZG
    • STM32F746BE, STM32F746BG, STM32F746NE, STM32F746NG
    • STM32F746ZE, STM32F746ZG
    • STM32F750N8
    • STM32F750Z8
    • STM32F756BG, STM32F756NG
    • STM32F756ZG
    • STM32F765VG, STM32F765VI
    • STM32F765ZG, STM32F765ZI
    • STM32F767VG, STM32F767VI
    • STM32F767ZG, STM32F767ZI
    • STM32F777VI
    • STM32F777ZI
    • STM32G030K6, STM32G030K8
    • STM32G031J4, STM32G031J6
    • STM32G031K4, STM32G031K6, STM32G031K8
    • STM32G041J6
    • STM32G041K6, STM32G041K8
    • STM32G071R6, STM32G071R8, STM32G071RB
    • STM32G081RB
    • STM32G431C6U, STM32G431C8U, STM32G431CBU
    • STM32G441CBU
    • STM32G431K6, STM32G431K8, STM32G431KB
    • STM32G441KB
    • STM32G431R6, STM32G431R8, STM32G431RB
    • STM32G441RB
    • STM32G473RB, STM32G473RC, STM32G473RE
    • STM32G474RB, STM32G474RC, STM32G474RE
    • STM32G483RE
    • STM32G484RE
    • STM32H742VG, STM32H742VI
    • STM32H742ZG, STM32H742ZI
    • STM32H743IG, STM32H743II
    • STM32H743VG, STM32H743VI
    • STM32H743ZG, STM32H743ZI
    • STM32H747AG, STM32H747AI
    • STM32H747IG, STM32H747II
    • STM32H750ZB
    • STM32H750IB, STM32H750II
    • STM32H750VB
    • STM32H753VI
    • STM32H753ZI
    • STM32H757AI
    • STM32H757II
    • STM32L010RB
    • STM32L031K4T, STM32L031K6T
    • STM32L041K6T
    • STM32L051C6, STM32L051C8
    • STM32L052R6T, STM32L052R8T
    • STM32L053R6T, STM32L053R8T
    • STM32L063R8T
    • STM32L072CBY, STM32L072CZE, STM32L072CZY
    • STM32L072KBT, STM32L072KZT
    • STM32L072RBT, STM32L072RZT
    • STM32L073CZY
    • STM32L073RBT, STM32L073RZT
    • STM32L082CZY
    • STM32L082KBT, STM32L082KZT
    • STM32L083RBT, STM32L083RZT
    • STM32L100C6, STM32L100C6-A
    • STM32L151C6, STM32L151C8, STM32L151CB
    • STM32L151C6-A, STM32L151C8-A, STM32L151CB-A
    • STM32L152C6, STM32L152C8, STM32L152CB
    • STM32L152C6-A, STM32L152C8-A, STM32L152CB-A
    • STM32L151RE
    • STM32L152RE
    • STM32L162RE
    • STM32L412K8, STM32L412KB, STM32L422KB
    • STM32L432KB, STM32L432KC, STM32L442KC
    • STM32L433RC-P
    • STM32L452RC, STM32L452RE, STM32L462RE
    • STM32L452RE-P
    • STM32L475VC, STM32L475VE, STM32L475VG
    • STM32L476VC, STM32L476VE, STM32L476VG
    • STM32L476RC, STM32L476RE, STM32L476RG
    • STM32L486VG
    • STM32L496ZE, STM32L496ZG
    • STM32L496ZG-P
    • STM32L4A6ZG
    • STM32L4A6ZG-P
    • STM32L4R5VG, STM32L4R5VI
    • STM32L4R5ZGTx, STM32L4R5ZITx
    • STM32L4R5ZI-P
    • STM32L4R7VITx
    • STM32L4R7ZITx
    • STM32L4R9ZGJx, STM32L4R9ZIJx
    • STM32L4S5VI
    • STM32L4S5ZITx
    • STM32L4S7VI
    • STM32L4S7ZITx
    • STM32L4S9ZIJx
    • STM32L552ZC-Q, STM32L552ZE-Q
    • STM32L562ZE-Q
    • STM32WB55CC, STM32WB55CE, STM32WB55CG
    • STM32WB55RC, STM32WB55RE, STM32WB55RG
  • HAL Drivers and CMSIS added:

    • [L5] STM32L5xx CMSIS Drivers to v1.0.4
    • [L5] STM32L5xx HAL Drivers to v1.0.4

    HAL Drivers and CMSIS updated:

    • [F0] STM32F0xx CMSIS Drivers to v2.3.5
    • [F0] STM32F0xx HAL Drivers to v1.7.5
    • [F1] STM32F1xx HAL Drivers to v1.1.7
    • [F1] STM32F1xx CMSIS Drivers to v4.3.2
    • [F2] STM32F2xx HAL Drivers to v1.2.6
    • [F2] STM32F2xx CMSIS Drivers to v2.2.4
    • [F3] STM32F3xx CMSIS Drivers to v2.3.5
    • [F3] STM32F3xx HAL Drivers to v1.5.5
    • [F4] STM32F4xx HAL Drivers to v1.7.12
    • [F4] STM32F4xx CMSIS Drivers to v2.6.6
    • [F7] STM32F7xx CMSIS Drivers to v1.2.6
    • [F7] STM32F7xx HAL Drivers to v1.2.9
    • [G4] STM32G4xx CMSIS Drivers to v1.2.1
    • [G4] STM32G4xx HAL Drivers to v1.2.1
    • [H7] STM32H7xx CMSIS Drivers to v1.10.0
    • [H7] STM32H7xx HAL Drivers to v1.10.0
    • [L0] STM32L0xx CMSIS Drivers to v1.9.1
    • [L0] STM32L0xx HAL Drivers to v1.10.4
    • [L1] STM32L1xx HAL Drivers to v1.4.3
    • [L1] STM32L1xx CMSIS Drivers to v2.3.1
    • [L4] STM32L4xx CMSIS Drivers to v1.7.1
    • [L4] STM32L4xx HAL Drivers to v1.13.0
    • [MP1] STM32MP1xx CMSIS Drivers to v1.4.0
    • [MP1] STM32MP1xx HAL Drivers to v1.4.0
    • [WB] STM32WBxx CMSIS Drivers to v1.8.0
    • [WB] STM32WBxx HAL Drivers to v1.8.0

    Middleware updated:

    • USB Device library to v2.6.0
    • USB Host library to v3.3.4

    Core dependencies:

    • Updates STM32 Tools 2.0.0
    • Moved from CMSIS 5.5.1 to 5.7.0
    • Move from xpack-arm-none-eabi-gcc-9.2.1-1.1 to xpack-arm-none-eabi-gcc-9.3.1-1.3.

    Enhancements/improvements:

    • variant: Group each variant per STM32 series
      As the number of variants continues to grow and in order to ease navigation,
      they have been grouped in sub-folders per STM32 series.
    • Rename PinMap_PWM to PinMap_TIM
    • Extend Arduino pin naming to the max possibilities (64)
    • Clean up old way to define Ax pins definition
    • Rework analog pin management. Use mask to ease analog pin management and ease alternative
      analog pins introduction.
    • Add Alternate pins ( ALTx ) management
      The PinName mentioned Px_y_ALTz (described in the PeripheralPins.c / PinNames.h files)
      are alternative possibilities which use other HW peripheral instances.
      To access those alternative PinName name using a pin number can be performed like this:
      • PYn_ALTx
      • Ax | ALTx
      • Dx | ALTx
      • x | ALTx
    • Change Ax constants to an enum
    • Move genpinmap from Arduino_Tools repository and renamed stm32variant.py
    • Allow use of a custom peripheral pins file
      Syntax in the board.txt:
      xxx.build.peripheral_pins=-DCUSTOM_PERIPHERAL_PINS
      Example to use a custom peripheral pins file for Nucleo_L476RG:
      Nucleo_64.menu.pnum.NUCLEO_L476RG.build.peripheral_pins=-DCUSTOM_PERIPHERAL_PINS
      Then add a file with «.c» extension like » PeripheralPins_ .c » in the variantfolder.
      At sketch folder:
      CUSTOM_PERIPHERAL_PINS could now be overridden using the build_opt.h , ex:
      -DCUSTOM_PERIPHERAL_PINS=\»PeripheralPins_NUCLEO_L476RG.c\»
    • Update variant header management
      By default the variant.h will include variant_generic.h file .
      *.build.variant_h=variant_.h can be added in the boards.txt to define the dedicated header to a board.
    • Enable HSEM HAL module by default
    • Enable HAL MDMA by default
    • Rework hardware semaphore usage. This new implementation is more generic and support MP1 as well WB.
      H7 could be added easily later if dual core support is implemented.
    • Move the STM32 rtc drivers from core to library
    • Move the STM32 low power drivers from core to library
    • Move the STM32 eeprom driver from core to built-in library
    • Use more efficient mode for STM32L4XX stop mode (#1097)
    • Moved Stream.flush() to Print.flush() (#1170)
    • Added Print.availableForWrite() (#1170)
    • Wire: Implement requestFrom(uint8_t address, size_t quantity, bool sendStop)
    • CMSIS DSP: Update include path and source files
    • Wire: change definition of MASTER_ADDRESS to avoid potential conflict
    • Wire examples: rename old *.pde files to *.ino (#1319)
    • Wire: modifying to be able to do multiple .write() calls in i2cRequestEvent() as Slave
    • Allow users to tweak the I2C timeout (#1233)
    • [PNUCLEO_WB55RG] BLE support configuration
    • U(S)ART: Add USART10 support
    • U(S)ART: Update SERIAL_UART_INSTANCE for LPUART1 (101 instead of 0)
    • U(S)ART: Remove repetitive NVIC SetPriority calls
    • Add I2S and SAI support in the HAL conf
    • dtostrf should not print fractional part if prec is 0
    • Prevent redefine of HSE_VALUE if already user-overridden (#1281)
    • L1: USB: Manage internal pull-up
    • ADC: Manage channel bank. For STM32L1xx, in Cat.3, Cat.4, Cat.5 and Cat.6 devices
      there are up to 42 multiplexed channels organized in 2 banks. Channels ADC_IN0 to ADC_IN31 are available
      in Bank A and channels ADC_IN0b to ADC_IN31b are available in Bank B.
    • servo: optional default servo angle on attach
    • Enable PWR clock systematically when available
    • Group system IP clock enable in separate function called at init
    • spi: wait for end of transfer before returning from spi_transfer()
    • Define USE_FULL_LL_DRIVER at top level
    • Clean up Vddio2 Independent I/Os supply setting
    • Clean up generic HAL conf file. Enable IPCC by default
    • DAC: STM32F3 dac may have output switch instead of output buffer (#1324)
    • DAC: remove HAL_DAC_DeInit to avoid other channel deconfiguration
    • Manage dualpad analog switch
    • Remove redundant tools/ directory in STM32Tools
      Before path was:
      STM32/tools/STM32Tools/ /tools/
      now:
      STM32/tools/STM32Tools/ /

    Fixes:

    • Fix AFIO definition for F1
    • Remap pin management (#1180)
    • SoftwareSerial: stopListening at the begining
    • SoftwareSerial: Fix analog pins usage (#1093)
    • stm32L0xx or stm32L1xx soc series has an embedded EEPROM
    • remove stm32L0x and stm32L1x EEPROM buffered functions
    • HardwareTimer: pause() need to call HAL API to restore HAL state
    • HardwareTimer: getTimerClkFreq() add comment to avoid confusion
    • HardwareTimer: Fix assert failed when using TIMER_OUTPUT_COMPARE (#1244)
    • HardwareTimer: Fix issue when no channel N state
    • Fix flash offset on HY_TinySTM103T variant. (#1131)
    • Align Print API of (unsigned) long long
    • Fix flash latency for F4x5RG running full speed at 168MHz
    • Fix typo on TIM13_BASE in IRQ handler.
    • Wire: fix onReceiveEvent() not being triggered when a repeated start/no stop condition is sent in slave mode
    • SPI: Fix CS pin check
    • HardwareSerial: don’t call STM32 HAL for every bytes to transfer (#1309)
    • [G0] Fix USART IRQ handler (#1188)
    • [CI] Manage arduino-cli version
    • [CI] Harden exception handling
    • [CI] Use dev branch for test
    • Fix HAL not initialized on F105x series
    • BlackPill F401CC: add USER_BTN on PA0
    • BLACK_F407ZX: invert PF9 and PF10 in digitalPin[]
    • Fix noTone() when no TIMER_TONE is defined

    Plus several other fixes: See 1.9.0. 2.0.0

    WiKi pages will be updated to accordiling.

    Several components libraries are available on stm32duino organization.
    They are also available through the Arduino library manager. Search for STM32duino 😉

    Источник

    Adblock
    detector