趣味の電子工作などの記録。時にLinuxへ行ったり、ガジェットに浮気したりするので、なかなかまとまらない。
RSS icon
  • STM32 Value Line DiscoveryをLinuxで開発する(2)

    投稿日 2012年 2月 9日 コメントはありません

    続きです。

    2.stlinkのインストール

    gitでリポジトリをクローンします。

    ~/stm32-linux $ mkdir stlink
    ~/stm32-linux $ cd stlink/
    ~/stm32-linux/stlink $ git clone git://github.com/texane/stlink.git
    Cloning into stlink...
    remote: Counting objects: 3515, done.
    remote: Compressing objects: 100% (1228/1228), done.
    remote: Total 3515 (delta 2276), reused 3434 (delta 2204)
    Receiving objects: 100% (3515/3515), 12.63 MiB | 45 KiB/s, done.
    Resolving deltas: 100% (2276/2276), done.
    ~/stm32-linux/stlink $

    パッケージマネージャで libusb-1.0 と pkg-config がインストールされていることを確認する必要があります。自分の場合は一見libusb-1.0がインストールされているように見えたのですが、実際にmakeするとエラーになったので、

    $ sudo apt-get install libusb-1.0

    でlibusb-1.0をインストールしました。

    その後、コンパイルします。コンパイルは make 一発です。

    ~/stm32-linux/stlink/stlink $ make

    STM32 Value Line Discoveryを取り付けます。・・・が、こいつのSCSIエミュレーションはだめだめらしいので、システムから無視させるために、

    ~$ sudo modprobe -r usb-storage && modprobe usb-storage quirks=483:3744:i

    とすることになっていますが、エラーになってしまいます。しかも、アンマウントしても、すぐに復活してしまいます。恒久策としては

    ~$ sudo cp stlink_v1.modprobe.conf /etc/modprobe.d
    ~$ sudo modprobe -r usb-storage && modprobe usb-storage

    なのですが、それでもエラーになってしまいますので、一旦強制的に挿抜しました。

    次に、udevルールをセットアップします。

    ~/stm32-linux/stlink/stlink $ sudo cp 49-stlinkv*.rules /etc/udev/rules.d
    ~/stm32-linux/stlink/stlink $ sudo udevadm control --reload rules

    ここでSTM32 Value Line Discoveryを取り付けると、/devの下が

    ~/stm32-linux/stlink/stlink $ ls -la /dev/stlink*
    lrwxrwxrwx 1 root root 15 2012-02-08 02:40 /dev/stlinkv1_2 -> bus/usb/001/005

    というようになります。

    3.弄ってみる

    gdbserverを起動してみます。

    ~/stm32-linux/stlink/stlink $ ./gdbserver/st-util -1 /dev/stlinkv1_2
    non-option ARGV-elements: /dev/stlinkv1_2
    2012-02-08T02:44:28 INFO src/stlink-sg.c: Current mode unusable, trying to get back to a useful state...
    2012-02-08T02:44:28 WARN src/stlink-sg.c: received tag 0 but expected 3
    2012-02-08T02:44:28 INFO src/stlink-common.c: Loading device parameters....
    2012-02-08T02:44:28 INFO src/stlink-common.c: Device connected is: F1 Medium-density Value Line device, id 0x10016420
    2012-02-08T02:44:28 INFO src/stlink-common.c: SRAM size: 0x2000 bytes (8 KiB), Flash: 0x20000 bytes (128 KiB) in pages of 1024 bytes
    2012-02-08T02:44:28 INFO src/stlink-sg.c: Successfully opened a stlink v1 debugger
    Chip ID is 00000420, Core ID is 1ba01477.
    KARL - should read back as 0x03, not 60 02 00 00
    init watchpoints
    Listening at *:4242...

    とりあえず正しく認識して、gdbserverが起動しているようです。

    4.何か動かしてみる

    gdbserverが動いたままの状態にして、tutorialに沿って、Lチカのサンプルを動かしてみます。

    まず、サンプルプログラムをコンパイルします。(赤字が入力箇所です)

    ~/stm32-linux/stlink/stlink/example/blink $ PATH=~/sat/bin:$PATH
    ~/stm32-linux/stlink/stlink/example/blink $ make
    arm-none-eabi-gcc -g -O2 -mlittle-endian -mthumb -ffreestanding -nostdlib -nostdinc -Wl,-Ttext,0x20000000 -Wl,-e,0x20000000 -mcpu=cortex-m3 -DCONFIG_STM32VL_DISCOVERY=1 main.c -o blink_32VL.elf
    arm-none-eabi-gcc -g -O2 -mlittle-endian -mthumb -ffreestanding -nostdlib -nostdinc -Wl,-Ttext,0x20000000 -Wl,-e,0x20000000 -mcpu=cortex-m3 -DCONFIG_STM32L_DISCOVERY main.c -o blink_32L.elf
    arm-none-eabi-gcc -g -O2 -mlittle-endian -mthumb -ffreestanding -nostdlib -nostdinc -Wl,-Ttext,0x20000000 -Wl,-e,0x20000000 -mcpu=cortex-m4 -DCONFIG_STM32F4_DISCOVERY=1 main.c -o blink_F4.elf
    main.c:83:6: warning: conflicting types for 'main'
    main.c:53:2: note: previous implicit declaration of 'main' was here

    次に、gdbserverに接続して、ダウンロード&実行します。

    ~/stm32-linux/stlink/stlink/example/blink $ ~/sat/bin/arm-none-eabi-gdb
    GNU gdb (GDB) 7.3.1
    Copyright (C) 2011 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law. Type "show copying"
    and "show warranty" for details.
    This GDB was configured as "--host=x86_64-unknown-linux-gnu --target=arm-none-eabi".
    For bug reporting instructions, please see:
    <http://www.gnu.org/software/gdb/bugs/>.
    (gdb) target extended localhost:4242
    Remote debugging using localhost:4242
    0x08000b4c in ?? ()
    (gdb) load blink_32VL.elf
    Loading section .text, size 0x40 lma 0x20000000
    Start address 0x20000000, load size 64
    Transfer rate: 810 bytes/sec, 64 bytes/write.
    (gdb) continue
    Continuing.
    Cannot access memory at address 0x7bf35cc8

    ボード上のLEDがチカチカし始めましたので成功です。


    コメントをどうぞ(日本語のみ/Only in Japanese)

    日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)