Software

Vývoj software s CodeBlocks pro procesor STM32

Dlouho jsem řešil problém, jak úspěšně programovat a ladit na procesoru STM32F107 s jádrem Cortex-M3. Nakonec začala fungovat varianta s prostředím Code::Blocks + OpenOCD + Amontek Jtagkey. Vše je názorně ukázáno v demonstračním projketu, který si můžete stáhnout na konci stránky.

Instalace toolchain

Tato fáze zabrala spoustu promarněného času. Nejprve jsem zkoušel přesvědčit program crossdev. Nejprve jsem zkoušel target arm-elf, který se vytvořil, ale všechny podpůrné knihovny byly zkompilovány s podporou VFP, to ale Cortex-M3 nemá. Další varianta byla s arm-softfloat-elf, která sice zkompilovala korektně všechny knihovny pouze se software floating pointem, ale zase nezkompilovala podporu pro instrukční sadu Thumb2, která je potřeba pro jádro Cortex-M3.

Následovala tedy další fáze, a to stažení toolchain z CodeSourcery, který obsahoval vše potřebné.

Nastavení Code::Blocks

Nejprve je potřeba nastavit správné programy pro kompilaci a sestavení (toolchain). Řeším to tak, že si nejprve nadefinuji novou proměnnou prostředí (environment variable) toolchain_path se správnou cestou, kam jsem nainstaloval CodeSourcery.

Nastaveni Toolchain

Nastavení cesty

Následně je potřeba nastavit správně linker, aby používal knihovny Thumb2 a ne jiné.

-L$(toolchain_path)/lib/gcc/arm-none-eabi/4.4.1/thumb2
-L$(toolchain_path)/arm-none-eabi/lib/thumb2
-nostartfiles

Dále bylo potřeba nastavit správné přepínače pro gcc

-mlittle-endian
-msoft-float
-mno-thumb-interwork
-mcpu=cortex-m3
-mthumb

a bylo již téměř vše připraveno pro první projekt.

Nakonec je ještě potřeba použít vlastní linker skript.

/* include the common STMxxx sub-script */
INCLUDE "STM32F10x_COMMON.ld"
 
/* include the memory spaces definitions sub-script */
INCLUDE "STM32F107_256K_64K_DEF.ld"
 
/* include the sections management sub-script for FLASH mode */
INCLUDE "sections_FLASH.ld"

Ladění programu

K ladění je potřeba program OpenOCD, který se musí nastavit pro příslušné ladítko a procesor, který máte. Protože používám procesor STM32 a JTAG adaptér Amontek jtagkey-tiny, je konfigurace jednoduchá

source [find interface/jtagkey-tiny.cfg]
source [find target/stm32.cfg]

Tuto konfiguraci stačí uvést v souboru ~/.openocd/openocd.cfg a již se s ní nemusíte dále zabývat. Po spuštění programu openocd bez parametrů si tuto konfiguraci sám načte a automaticky se k procesoru připojí.

Pro ladění je použit program gdb. Inicializační skript lze také zadat do Code::Blocks, takže se pak vše provádí automaticky při stisku tlačítka ladění.

# pripojeni ke vzdalenemu gdb serveru
target remote localhost:3333
# reset procesoru
monitor reset halt
# nacteni kodu
load
# reset procesoru
monitor reset
# zastaveni procesoru
monitor reset halt
# break na funkci main
b main
# spisteni kodu, zastavi se na main
continue

Pro jistotu přikládám demo projekt pro Code::Blocks, který má většinu z těchto nastavení v sobě.

Závěr

Po dlouhém snažení mohu nakonec vytvářet software pouze s použitím opensource nástrojů (neomezená velikost binárky a pod.). OpenOCD funguje jen s některými JTAG adaptery, takže Ulink2, který mě leží na stole s ním bohužel nefunguje. Všechny adaptéry s čipem FT2232D budou bez problémů.

Při správném nastavení Code::Block lze nakonec jednoduše programy ladit, což byl hlavní důvod celého snažení.

Testovací projekt je možné stáhnout z odkazu níže. Obsahuje blikání LED a provozoval jsem ho na desce MCBSTM32C. Je třeba správně nadefinovat pouze toolchain a proměnnou toolchain_path, zbytek je již v projektovém souboru.

Přiložené soubory:

luta24.2.2011 17:52
stm32

Dík za pěkný návod. Jen tak dál

povik13.5.2011 22:26
Podekovani

Velice napomocne. Dekuji :)

Rad9.6.2011 13:41

ZKusil jsem si to zprovoznit, ale mám STM32vldiscovery kit, který používá k ladění STLink a SWD. Jde to nějak importovat, nebo upravit některý stávající konfigurační file?

Děkuji za pomoc, Rad;)

dieter29.9.2011 21:38
c::b st32f10x

Ahoj Jan, Vaše pokyny Zdá se, že přesně to, co jsem chtěl. Bohužel nemohu česky, to mi pomohlo Google. Můžete mi přeložit do angličtiny návod? To by bylo opravdu skvělé!

Děkuji vám,

Dieter

JayBee30.9.2011 8:49
STLink + C::B

STLink je možné provozovat například v prostředí TrueStudio. Je možné z C::B nasměrovat toolchain_path na GCC, které je přibalené v TrueStudiu a využít i jejich ladítko místo OpenOCD. Je s tím trochu hraní a musí se samozřejmě změnit i skript pro GDB. Když jsem to naposledy zkoušel, tak to ale nebylo příliš dobré řešení.

Honza

luta31.3.2012 10:08
stlink linux

Už je dostupný stlink gdb i pro linux: https://github.com/texane/stlink hodlám brzy vyzkoušet s codeblocks a stm32vldiscovery

Comsytec14.5.2013 13:27
EPS Debugger STM32 plugin pre Code::Blocks

Komplexny debugger plugin pre Code::Blocks. STLink V2 integrovana podpora + project wizard. Umoznuje sledovat periferie na cipe cez okno Peripheral. Konfiguacia projektu je jednoducha nevyzaduje ziadne dodatocne tooly. Podporuje STM32F0, STM32F1, STM32F2, STM32F3, STM32F4, STM32L1

Severovýchod Valid XHTML 1.0 Strict Valid CSS 2 Text to HTML converter and formatter Jay Bee simple CMS