3D printer moederbord herprogrammeren

In de afgelopen 10 jaar is de wereld van 3D-printen geëxplodeerd, mede dankzij opensource. Als gevolg van deze beweging zijn de prijzen van onderdelen drastisch verlaagd, met het grootste verschil in de besturingselektronica en de motoren. Om gebruik te maken van een 3D-printermoederbord wordt doorgaans Marlin- of Klipper-firmware gebruikt. Omdat deze software uitgebreid doorontwikkeld is, is het echter moeilijk en tijdrovend om aanpassingen aan de firmware aan te brengen. Voor afwijkende toepassingen kan het dus handig zijn om eigen firmware te ontwikkelen.

In dit artikel probeer ik een basisschets te uploaden naar mijn BTT SKR E3 Mini V2-bord. Dit bord is, net als veel nieuwere 3D-printermoederborden, gebaseerd op de STM32-microcontroller. Echter, omdat dit bord anders is dan Arduino-bordjes en niet primair bedoeld is om te worden herprogrammeerd, is het niet mogelijk om direct via USB vanuit de Arduino IDE te programmeren. Normaal gesproken wordt dit bord geprogrammeerd door de firmware van een SD-kaart te laden. Dit brengt echter risico’s met zich mee als de firmware niet zorgvuldig wordt geprogrammeerd. Om deze reden heb ik ervoor gekozen om te programmeren via SWD, wat het protocol/interface is dat door de producent van de STM32 wordt gebruikt voor het programmeren van de microcontroller. Hiervoor is een specifiek programmeerbordje nodig. Ik gebruik een Chinese kloon van de ST-Link V2. Deze kost minder dan 5 euro via AliExpress.

Om te programmeren via SWD, het programmeerprotocol voor de STM32, heb je software nodig. Hiervoor zijn verschillende opties beschikbaar, zowel opensourcepakketten die dit protocol ondersteunen als specifieke software van ST zelf. Waar ik tegenaan liep, was dat mijn programmeerbordje verouderde firmware had, waardoor ik niet kon programmeren met OpenOCD, het belangrijkste opensourcepakket dat ik kon vinden. De software die ST aanbeveelt, is de STM32CubeProgrammer, die ook de firmware van de ST-Link V2 kan updaten. Echter werkt deze niet met clones. Gelukkig ontdekte ik na lang zoeken dat ST ook een andere programmeersoftware heeft, de STM32 ST-LINK Utility, die gelukkig wel samenwerkt met de clones.

Ik heb daarom een eenvoudige ‘blinking LED’-firmware geschreven en gecompileerd met behulp van de PlatformIO-plugin in de VS Code IDE. Dit genereert een .bin-bestand dat wordt opgeslagen in de .pio-map. Vervolgens moet dit bestand worden geopend in de STM32 ST-LINK Utility-software. Om de .bin-file te kunnen openen, heb ik eerst de firmware van de ST-Link V2 bijgewerkt, deze optie bevindt zich in het bovenste menu onder ‘ST-LINK’. Ik weet niet of de volgorde van belang is, maar dit werkte voor mij. Vervolgens moet het .bin-bestand worden geladen en kan het programmeren beginnen: klik op ‘program verify’ en vervolgens in het pop-upmenu op ‘start’. En voilà, de LED begint te knipperen!