Software

Vývoj software s CodeBlocks pro procesor STM32

31. 3. 2010 18:30

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.

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:

Autor WWW
Titulek
Číslo stojedna  
Severovýchod Valid XHTML 1.0 Strict Valid CSS 2 Text to HTML converter and formatter Jay Bee simple CMS