Picked up this eval board at the last Embedded Systems Conference, and finally starting to work with it. The chip is a 168MHz ARM Cortex M4 with 12-bit A/D and D/A's . The eval board includes an accelerometer, microphone, and separate audio D/A chip, among other things. Pricing is really interesting. Here are Digikey quantity-1 prices:
STM32F4DISCOVERY $19.50
STM32F407VGT6 $16.00
STM32F103C8T6 $ 5.71
(The F407 is the main ARM chip, and the F103 is a smaller ARM chip used as a programming interface). So the eval board is actually cheaper than the chips on it.
The F407 chip has a built-in program loader using either the serial port or the USB port. Both are supported by Linux tools, so I'm ignoring the F103-based programming port and using the F407's USB port.
Connections: I have USB cables from my Linux box to both the F103's mini-USB connector at the top and the F407's micro-USB connector at the bottom. The mini-usb is just used to supply power to the board, and isn't necessary if an external supply is used.
The programming tool is dfu-util, from dfu-util.gnumonks.org . I downloaded and built the latest version from the git repository. To test it, I used the miniblink example program from the libopencm3 package at www.libopencm3.org/wiki/Downloads . libopencm3 uses the summon-arm toolchain, so I downloaded and built that as well so the example would compile easily. (This also means I now have 5 different versions of GNU GCC for ARM on my system: summon-arm (linaro-based), 2 from CodeSourcery, one from openembedded, and a built-from-scratch GCC. One of these days I'll simplify that).
To program, I connect a jumper between the 3V and boot0 pins on connector P2. After hitting the black reset button, lsusb shows USB devices connected as:
Bus 001 Device 011: ID 0483:df11 SGS Thomson Microelectronics STM Device in DFU Mode
Bus 001 Device 012: ID 0483:3748 SGS Thomson Microelectronics ST-LINK/V2
To use it without being root, I also added the line:
SYSFS{idVendor}=="0483", SYSFS{idProduct}=="df11", MODE="666" GROUP="plugdev" SYMLINK+="usb/stm32_dfu"
to plugdev (in Debian, I just created a new file in the /etc/udev/rules.d directory with this single line in it. Locations may be slightly different in other Linux distributions).
With that done, the command:
dfu-util --device 0483:df11 --alt 0 \
--dfuse-address 0x08000000 \
--download /miniblink.bin
works. I removed the jumper and hit reset again, and a single LED blinks, as expected.
So that's "Hello, World" for the STM32F4DISCOVERY. Now I can start doing real work with it.
Friday, January 27, 2012
Subscribe to:
Post Comments (Atom)
2 comments:
Thanks for posting this!!!
Flashing parts from Linux has always been a bit of a roadblock to clear. I've used a UART bootloader on the STM32 CM3 parts, but don't have it up yet on the F4 Discovery board.
You might want to put something in about reloading the plugdev rules:
>sudo udevadm control --reload-rules
There's another option on this board: the gdb server for the stlink jtag from texane: https://github.com/texane
but I've never been a big jtag fan.
Do you know if dfu is properly erasing flash pages before writing? Is there a way to get it to be more verbose?
Cheers,
Alex
THANKS ... it only took me a month to find this.
This is exactly what I was looking for.
Post a Comment