CortexMO. Имеет встроенный DFU и CAN но емкость Flash vs размер не очень, относительно 103 серии https://www.st.com/en/microcontrollers-microprocessors/stm32f0x2.html
Тулы STM32 http://www.stm32res.ru/ru/newsarhivprog
Платы для ArduinoIDE с разных ресурсов: https://github.com/stm32duino/BoardManagerFiles/raw/master/STM32/package_stm_index.json http://dan.drown.org/stm32duino/package_STM32duino_index.json
Драйвера MappleDFU (под Win10 не работают) https://github.com/rogerclarkmelbourne/Arduino_STM32
https://electronix.ru/forum/index.php?app=forums&module=forums&controller=topic&id=166045
Теперь микроконтроллер готов ппрошиваться через USB загрузчик. Но ведь еще нужно саму прошивку подправить. А сделать нужно 2 вещи:
Указать линкеру стартовый адрес. В CooCox это делается в настройках проекта, вкладка Link, раздел Memory Areas, Адрес IROM1 Start Address. Бутлоадер занимает первые 8 килобайт, значит стартовый адрес прошивки будет 0x0800000 + 0x2000 = 0x08002000. Поле Size, наверное, тоже стоит уменьшить на 8к.
Где нибудь вначале программы перед инициализацией периферии сделать вызов
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x2000);