フォト
無料ブログはココログ

« Raspberry Pi | トップページ | ソニーのふり見て、我がふり直せ。 »

2012年7月15日 (日)

OpenOCD ST-Link + STM32LVDiscovery

STM32vlDiscoveryのRAMで動くプログラムをEcripseで作ってOpenOCD-STLinkでデバッグするときのメモ


  1. 概要
    STM32vlDiscoveryは開発環境(IDE)として

    ● Atollic, TrueSTUDIO® (including the free LiteTrueSTUDIO®)
    ● IAR, Embedded Workbench® for ARM
    ● Keil, MDK-ARMTM

    が使える

     評価ボードや雑誌のオマケ基板をで遊んでいると開発環境が増えてくるのだが、大抵はLチカが動くと2度と使わない。ということで既にインストールしてあるEclipse+gcc+OpenOCD-STLinkでやってみることにした。
    更に、ちょっとしたプログラムをいちいちFlashに書くのは面倒なのでRAMで動くプログラムを作ることにする。

  2. Eclipse+CDT
     EclipseのインストールはNetを探すと見つかる。CDTもインストールしておく。
    ZylinCDT(組み込み用CDT)もインストールする。
    Eclipseの[ヘルプ]→[新規ソフトウェアのインストール]→[追加]で

    名前(N): Zylin embeddedCDT
    ロケーション(L): http://opensource.zylin.com/zylincdt
    Eclipsezylincdt_2


    を追加すると、中ほどのリストボックスに Zylin embeddedCDT が表示されるのでこれをインストールする。

  3. サンプルソース
     サンプルはSTのSTM32VLDiscoveryのページの[Design Support]タブにSTM32VLDISCOVERY firmware package (AN3268)が公開されている。
     このサンプルはARM-based 32-bit MCU STM32F10xxx standard peripheral libraryが使用されていている。ソースは参考になるのだが、このサンプルではRAMに収まらない。

ここのサンプルはSTのライブラリを使っていないのでRAMに収まる。ヘッダファイルはSTM32F10x standard peripheral librayのものを使う。

  1. スタートアップルーチン
     スタートアップルーチンはSTM32VLDISCOVERY firmware packageを展開してできる、

    ~\an3268\stm32vldiscovery_package\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\TrueSTUDIO\startup_stm32f10x_ld_vl.s
    の拡張子を"S"(大文字)にして使う。

  2. リンカスクリプト
     RAMで動作させるためのリンカスクリプトはSTM32VLDISCOVERY firmware packageを展開してできる、
    ~an3268\stm32vldiscovery_package\Project\Master Workspace\TrueSTUDIO\stm32_flash.ld 
    の「>FLASH」を「>RAM」に編集して使う。
    (スタートアップルーチンで.dataセグメントをROMからRAMへのコピーが不要になるのだが、ここは手抜きということで ^^;)
  3. コンパイル
    Lesson1
    のソースをコンパイルしてみた。
    Lchika_src

     

  4. デバッグ
    デバッグの構成で左ペインの Zylin embedded debuger(C++アプリは不可)を選択し、コマンドタブに以下のコマンドを入力する。
    Lchika_dbg

     

    target remote localhost:3333
    monitor reset halt
    thbreak main
    mon mww 0xE000ED08 0x20000000
    set $sp=0x20002000
    set $pc=Reset_Handler
    info reg
    mon reg
    load
    c

    gdbのコマンドの意味は

    target remote localhost:3333 #OopenOCDのgdbポート
    monitor reset halt #CPUをリセットして停止する
    thbreak main #main() にブレークポイント設定
    mon mww 0xE000ED08 0x20000000 #割り込みベクタをRAMの先頭に設定
    set $sp=0x20002000 #スタックポインタをRAMの末尾に設定
    set $pc=Reset_Handler #プログラムカウンタをReset_Hanlerに設定
    info reg #レジスタ表示
    #mon reg #こちらの方が詳しい      
    load #バイナリをRAMにロードする
    c #実行

    OpenOCDを起動しておくとソースレベルデバッグが可能になる。
    (メニューバーの[実行]→[外部ツール]→[外部ツールの構成]でOpenOCDを起動するように設定しておくと外部ツールアイコンで起動できる)
    Lchika_off

  5. 実行
    実行するとこんな感じ
    Mvi_5837thm←リンク先に動画

    プログラムで点滅しているのは右上の青LED


そのうちもっと丁寧に書こう

« Raspberry Pi | トップページ | ソニーのふり見て、我がふり直せ。 »

JTAG」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: OpenOCD ST-Link + STM32LVDiscovery:

« Raspberry Pi | トップページ | ソニーのふり見て、我がふり直せ。 »