STM32/ARM Cortex-M3 HOWTO: Development under Ubuntu (Debian)

Flash with perl telnet...

Now let's look at how we can do that flashing part a little bit better. One way is to to a perl telnet script.

First we need to make sure that you have installed perl telnet.

sudo apt-get install libnet-telnet-perl

Then we put this little script in the dir.


use Net::Telnet;

$numArgs = $#ARGV + 1;
if($numArgs != 1){
    die( "Usage ./ [main.bin] \n");

$file   = $ARGV[0];

$ip = ""; 
$port = 4444;

$telnet = new Net::Telnet (
    Port   => $port,
    Prompt =>'/>/');


print $telnet->cmd('reset halt');
print $telnet->cmd('flash probe 0');
print $telnet->cmd('stm32x mass_erase 0');
print $telnet->cmd('flash write_bank 0 '.$file.' 0');
print $telnet->cmd('reset halt');
print $telnet->cmd('exit');

print "\n";

And add this to the Makefile.

flash: all
        ./ main.bin

So it looks a little bit like this.

Filename: Makefile

CC      = arm-none-eabi-gcc
LD      = arm-none-eabi-ld -v
AR      = arm-none-eabi-ar
AS      = arm-none-eabi-as
CP      = arm-none-eabi-objcopy
OD		= arm-none-eabi-objdump
CFLAGS  =  -I./ -c -fno-common -O0 -g -mcpu=cortex-m3 -mthumb  
AFLAGS  = -ahls -mcpu=cortex-m3 -mthumb 
LFLAGS  = -Tstm32.ld -nostartfiles
CPFLAGS = -Obinary

all: main.bin

	-rm main.lst main.o main.elf main.lst main.bin startup_stm32f10x.lst startup_stm32f10x.o

main.bin: main.elf
	@ echo "...copying"
	$(CP) $(CPFLAGS) main.elf main.bin
	$(OD) $(ODFLAGS) main.elf > main.lst

main.elf: main.o startup_stm32f10x.o stm32.ld  
	@ echo "..linking"
	$(LD) $(LFLAGS) -o main.elf main.o startup_stm32f10x.o

main.o: main.c
	@ echo ".compiling"
	$(CC) $(CFLAGS) main.c

startup_stm32f10x.o: startup_stm32f10x.s
	@ echo ".assembling"
	$(AS) $(AFLAGS) -o startup_stm32f10x.o startup_stm32f10x.s > startup_stm32f10x.lst

flash: all 
	./ main.bin

Now we can build and flash in one step by just type.

make flash
This page is licensed with Creative Commons ShareAlike 3.0