ページへ戻る

− Links

 印刷 

BTC097 Digitus STM32F3 のバックアップソース(No.1) :: Besttechnology

knowledge:BTC097 Digitus STM32F3 のバックアップソース(No.1)

  Next »[4]
TITLE:BTC097 Digitus STM32F3マニュアル
#norelated
#contents
[[ショップページへ>http://www.besttechnology.co.jp/modules/onlineshop/index.php?fct=photo&p=160]]

**Digitusシリーズの特徴 [#FEATURE]
-小指サイズの汎用マイコンボードシリーズ
-USBコネクタを装備しバスパワー駆動サポート
-ブレッドボード等で扱いやすい40ピンDIPパッケージサイズ
-専用ブートローダを搭載し自作したプログラムをUSBを介して転送
-チップに搭載された機能をできる限り外部端子へ接続

**概要 [#ebd26e62]
Digitus STM32F3は[[STMicroelectronics社>http://www.st.com/web/jp/home.html]]製STM32F373(cortex-M4Fコア)を搭載し、USBケーブルを接続すればバスパワーで駆動でき、PCに割り当てられたCOMポートを介してプログラムの書き換えやプログラムのデバッグができます。また、外部端子にはマイコンのほぼ全ての端子が割り当てられており、ブレッドボードでのテストなどを簡便に行うことができます。

**基本仕様 [#x1141bd0]
|商品番号  |BTC097 |
|PCBリビジョン |E108 (2層) |
|CPU |[[ST STM32F373CC:http://www.st.com/web/jp/catalog/mmc/FM141/SC1169/SS1576/LN10/PF253090]] |
|メモリ |フラッシュROM: 256kbyte&br;SRAM: 32kbyte |
|クロック |外部オシレータ:8MHz (内部はPLLによりプログラマブル) |
|通信機能 |USB |
|動作温度 |0~+50℃ |
|動作電圧 |USBバスパワー:DC5V&br;ボード内:DC3.3V |
|消費電流 |35mA (MAX) |
|寸法 |約19×52mm |
|コネクタ等 |1x20ピンランド×2, microUSB×1, プッシュボタン×1, 電源モニタLED |
|付属品 | |
|環境配慮 |RoHS準拠, 鉛フリー半田 |

***外観 [#i016df04]
| top |h
| #ref(E108_TOP.png,50%) |

***回路図 [#ba402fe4]
#ref(E108_SCH.pdf)
***配置・外形 [#w5ebb2b0]
#ref(E108_LAYOUT.png,100%)

***コネクタ・端子・スイッチ等 [#d1e98c39]
****CN1, CN2 [#tf8c1e95]
-2.54mmピッチ1列 20ピン×2
-ランド穴径 0.9mm
-*の記述がある端子は基板内で使用されていたり、パーツの未実装により配線が完結していない事を意味する。詳細は()中のコメントと回路図を参照の事。
| CN1 |<| CN2 |<|h
| No. | 端子名称 | No. | 端子名称 |h
| 1 | GND | 40 | PB9 |
| 2 | 3.3V | 39 | PB8 |
| 3 | *PC13 (R10でプルアップ) | 38 | *BOOT0 (R5でプルダウン) |
| 4 | PC14 | 37 | PB7 |
| 5 | PC15 | 36 | PB6 |
| 6 | *NRST (R1でプルアップ・PB1に接続) | 35 | PB5 |
| 7 | PA0 | 34 | PB4 |
| 8 | PA1 | 33 | PB3 |
| 9 | PA2 | 32 | PA15 |
| 10 | PA3 | 31 | PA14 |
| 11 | PA4 | 30 | PF7 |
| 12 | PA5 | 29 | PF6 |
| 13 | PA6 | 28 | PA13 |
| 14 | PB0 | 27 | *PA12 (R6を介しCN3に接続) |
| 15 | PB1 | 26 | *PA11 (R7を介しCN3に接続) |
| 16 | PB2 | 25 | PA10 |
| 17 | PE8 | 24 | PA9 |
| 18 | PE9 | 23 | PA8 |
| 19 | *VREFSD+&br;(L2/C7を介し3.3Vに接続,&br;70kHz程度のカットオフ周波数) | 22 | PD8 |
| 20 | PB14 | 21 | PB15 |

****CN3 [#j8574659]
-USB-MicroBレセプタクル
-直列抵抗を介してSTM32F373のPA11とPA12へ接続
-USBバスパワーをボード上の電源として供給
-NRSTとPC13端子の論理積でUSB DP端子に設けられたプルアップ抵抗のON/OFFを制御。

****CN4 [#m4cf2892]
-1.27mmピッチ7ピンランド
-JTAG/SWD用
| No. | 端子名称 |h
| 1 | TCK/PA14 |
| 2 | GND |
| 3 | TMS/PA13 |
| 4 | 3.3V |
| 5 | TDO/PB3 |
| 6 | NRST |
| 7 | TDI/PA15 |

****LED1 [#cd58e257]
-LED
-色:赤
-電源の印加で点灯

****PB1 [#sd5c5595]
-プッシュボタン
-押下でマイコンのNRST端子をGNDへ短絡し、USB DP端子のプルアップがOFF

****USER LAND [#vf83b5a9]
-基板端に設けられたフリー(緑色の囲み)なランド
-GNDと3.3Vとある2つのランド(赤色の囲み)は電源に接続済

#ref(E108_USERLAND.png)

**各機能の詳細 [#DETAILS]

***電源 [#DETAILS_POWER]
--USB BUS Power~
CN3にUSBケーブルを接続するとPCから約5Vの電源(バスパワー)が供給され、ボード内のLDOにて3.3Vが作られます。~
CN1-2(3.3V)端子とCN1-1(GND)端子間から外部機器へ3.3Vが供給できます。
#ref(buspower.png)
--Self Power~
CN1-2(3.3V)端子とCN1-1(GND)間に安定した3.3Vの外部電源を接続します。~
CN1-1,2に外部電源(3.3V)を供給した状態でUSBケーブル(5V)を接続すると、ボード内で3.3Vの電源が並列に供給される状態となります。ボード内には電流制限付き整流回路が備わっているため、外部電源の電流がUSBポートを介してPCへ逆流することはありません。しかし外部電源の電圧がボード内のLDOで生成される3.3Vより低くなると、その電位差をLDOがまかなおうとします。LDOが供給する電流が500mAを超える場合は、LDOによるボード外部への3.3V供給をあきらめ、本ボードへの電源供給ラインに整流回路を設けます。
#ref(selfpower.png)

***ブートローダ [#hdbff97d]
出荷時にはフラッシュROMに弊社オリジナルのブートローダが書き込まれています。~
PCとUSBケーブルで接続すると本プログラムが起動し、USBを仮想シリアルポートとして初期化します。専用のデバイスドライバを適用する事でPCからはCOMポートとして見え、シリアルターミナルプログラム等を使って簡単なコミュニケーションができます。~
ブートローダの詳細は[[こちら>STM32F3_BL]]。

***USB [#DETAILS_CN3]
CN3にはUSBケーブルを接続します。主に電源供給と、ブートローダを介したプログラムの転送やデバッグに使用します。~
仮想シリアルポートとして使用する場合のWindows用のデバイスドライバはGCC Developer Liteと一緒にインストールされますが、[[ST社から提供されるデバイスドライバ>http://www.st.com/web/jp/catalog/tools/PF257938]]と同一となります。Linux等の場合はCDCデバイスとして認識されます。~
なお、NRST及びPC13端子と連動してUSBのDP端子に設けられたプルアップ抵抗を制御する回路が設けられているため、PC13端子をユーザプログラム等で不用意に操作するとUSBの活性状態に影響します。

***プッシュボタン(PB1) [#DETAILS_PB1]
PB1を押下するとNRST端子がGNDに接続され、放すとブートローダはハードリセットを検出してコマンドモードに遷移します。~
また、NRST端子と連動してUSBのDP端子に設けられたプルアップ抵抗を制御しています。ハードリセット以外のリセット要因(ソフトウェア・WDT等)によってもNRST端子から短時間(数十ms以下)ですがLOWが出力され、その間USBが非活性状態になります。

***Boot mode [#see74209]
STM32F373のBoot modeはBOOT0端子で決定されます。BOOT0端子はGNDへプルダウンされているため、電源投入直後はフラッシュROMに書き込まれているブートローダが実行されます。~
BOOT端子を3.3Vに接続して電源を投入するとシステムメモリから起動し、STが予め搭載させているブートローダ(弊社のブートローダとは異なる)が実行されます。その場合は[[ST>http://www.st.com/web/jp/home.html]]から提供される[[DfuSe>http://www.st.com/web/jp/catalog/tools/FM147/CL1794/SC961/SS1533/PF257916]]といったツールを使用してラッシュROMのプログラムを書き換える事が可能です。

**開発環境 [#IDE]
紹介する開発環境に含まれるツールの連携を次図に示します。おおまかには2つのパスをサポートします。
#ref(DEV_OUTLINE.png,60%)
***GCC Developer Lite [#GDL]
GCC Developer Liteの詳細については[[こちら>GCC Developer Lite]]。~
フルインストールないしDigitus STM32F3で使用を選択する事で必要なコンポーネントが自動的にインストールされます。
STM32F3で使用される主要なコンポーネントを簡単に示します。
-''[[GCC Developer Lite>GCC Developer Lite#GCCDevL]]''
~ソースプログラムを編集するためのテキストエディタとその他のツールを起動するためのランチャ機能を有する。~
#ref(GCC Developer Lite/GDL.png,50%)
-''[[FLASH WRITER>GCC Developer Lite#FW]]''
~ターゲットへコンパイルされたプログラムをOpenOCDやCOMポートを介して転送する。~
USB等で提供されるCOMポートの動的な検出と、COMポートを使用する弊社ツールとの排他制御機能を持つ。
#ref(GCC Developer Lite/FW.png,80%)
-''[[SIMPLE TERM>GCC Developer Lite#STERM]]''
~汎用シリアルターミナル。簡易的なTELNETクライアントとしても機能する。~
USB等で提供されるCOMポートの動的な検出と、COMポートを使用する弊社ツールとの排他制御機能を持つ。~
なお、Digitusシリーズで提供される仮想COMポートはプログラムの実行状況によって動的に活性/非活性になるが、SIMPLE TERMはそれと連動して自動的にポートのオープン/クローズ処理を行ってくれるのが一般のシリアルターミナルと異なる点。
#ref(GCC Developer Lite/sterm.png,70%)
-''ARMGCC''
~ARMコア向けGCC(GNU Compiler Collection)。GCC Developer Liteより適宜呼び出され、ユーザソースのコンパイル・ライブラリ等とリンク・ファイルフォーマット変換等を行う。
-''デバイスドライバ''
~USBを使用した仮想シリアルポートドライバを提供。ソースは[[USB CDCエミュレーションドライバ>http://www.st.com/web/jp/catalog/tools/PF257938]]。
-''[[OpenOCD]]''
~TINY JTAG-ICE2の制御を行うデーモン。JTAGを使用する場合は全て本デーモンを仲介する。
-''ターゲットファイル''
~STM32F3の内蔵ペリフェラルを定義したヘッダファイルやUARTを簡便に使うためのAPI、USBをシリアルポートとして使用するためのAPI、スタートアップルーチン、それらをコンパイルしてアーカイブしたライブラリファイル、GDBにてデバッグする際に使用する初期化ファイル、目的別に異なるメモリマップを定義したリンカスクリプトファイルを含む。

****ターゲットファイル [#TARGETFILES]
GCC Developer LiteではDigitus STM32F3用の設定を複数備えています。~
例えば、ARMコアの学習・組み込み向けCコンパイラの習熟・内蔵ペリフェラルの機能を試すといった段階ではJTAGを使ってRAM上でデバッグし、慣れてきたらブートローダを経由してprintfデバッグ、最終的に製品等としてリリースして完成させる時はフラッシュROMに、といった段階を踏む場合でもGCC Developer Liteのコンパイルオプションの設定リストから選択し直すだけで設定が完了します。~
#ref(GDL_CompileOption_TargetList.png)
以下に設定リストの一覧とその設定における主な機能を紹介します。
-''STM32F373 (Bootloader)''
~Digitus STM32F3の[[ブートローダ>STM32F3_BL]]を使用してフラッシュROM上へ転送して実行するファイルを生成。
| 生成ファイルの拡張子 | .bin (バイナリ) |
| スタートアドレス | 0x08004000 (フラッシュROM) |
| 転送ツール | [[SIMPLE TERM>GCC Developer Lite#STERM]] |
| ブートローダ | 必要 |
-''STM32F373 (RAM)''
~OpenOCDを使用してSRAM上へ転送して実行するファイルを生成。
| 生成ファイルの拡張子 | .bin (バイナリ) |
| スタートアドレス | 0x20000000 (RAM) |
| 転送ツール | [[FLASH WRITER>GCC Developer Lite#FW]] & [[OpenOCD]] |
| ブートローダ | 不要 |
-''STM32F373 (Flash)''
~OpenOCDを使用してフラッシュROMへ転送して実行するファイルを生成。
| 生成ファイルの拡張子 | .bin (バイナリ) |
| スタートアドレス | 0x08000000 (フラッシュROM) |
| 転送ツール | [[FLASH WRITER>GCC Developer Lite#FW]] & [[OpenOCD]] |
| ブートローダ | 不要 |
****SIMPLE TERMとブートローダ  [#STERM_BL]
ブートローダを使用する事ではJTAGやその他の特殊なI/Fを使用せずとも、USBケーブルで接続した環境だけでプログラムの書き換えが出来ます。~
ブートローダを使用して動作するプログラムが構成できる設定リストは以下の通りで、これ以外の設定リストで構成されたプログラムを転送したとしても正常に動作しません。
-''STM32F373 (Bootloader)''

USB接続した際に仮想シリアルポートとして認識させるためのPC用デバイスドライバは、[[GCC Developer Lite>GCC Developer Lite]]をインストールした際にWindowsのシステムフォルダにコピーされます。USBケーブルでマイコンボードとPCを接続するとデバイスドライバを要求されますが、自動検索させる事で自動的にインストールが行われます。~
デバイスドライバのインストール後、新しいCOMポートがWindowsのデバイスとして追加され、SIMPLE TERMから該当するCOMポートを選択(COMポート番号はPCの環境によって変わるが、デバイス名に「STMicroelectronics Virtual COM Port (COMxxx)」が表示されたポートを選択)しオープンするとブートローダの各種コマンドが使用可能となります。SIMPLE TERMのポートの設定は以下の通りです。~
 Baudrate:ここでは意味を持たないので何でも構わない
 Databits:8
 Stopbits:1
 Parity:Non
 Flow Control:Non
 Protocol:Xmodem
#ref(STM32F3_BL_COM.png,100%)

先の設定リストでソースプログラムをコンパイルし成功するとSTERM.exe(SIMPLE TERM)の起動を促されます。「OK」を押してSIMPLE TERMを起動すると、以下の条件でSIMPLE TERMが起動します。
-既にSIMPLE TERMが実行中であれば2重に起動しない。
-コンパイル済み.binファイルの情報が渡る(ステータスバーにて確認可)。
-ユーザプログラムを転送する際の手順を記述したスクリプトファイルが使用できる様になる。

#ref(STM32F3_STERM_SCRIPT1.png,100%)

DIgitus STM32F3のブートローダがコマンドモードであれば、「スクリプト実行[STERM_STM32F3]」をクリックするだけでプログラムの書き換えにかかる処理(転送ファイルの選択・フラッシュROMの消去・転送)が全て自動的に行われます。
#ref(STM32F3_STERM_SCRIPT2.png,100%)

****FLASH WRITER [#FW]
様々なターゲットに対応した転送ツールです。
FLASH WRITERを使用する設定リストは以下の通りで、これ以外の設定リストで構成されたプログラムをFLASH WRITERで転送しても動作しません。
-''STM32F373 (RAM)''
~[[OpenOCD]]を経由してSRAMに転送実行。
-''STM32F373 (Flash)''
~[[OpenOCD]]を経由してフラッシュROMに転送実行。

*****FLASH WRITERとOpenOCD [#FW_OOCD]
[[TINY JTAG-ICE2とCN4を接続>#JTAG]]し、[[OpenOCD]]を仲介してフラッシュROMないしRAMの書き換えを行います。~
[[OpenOCD]]が起動している状態でFLASH WRITERのScanをクリックし、PORTのリストに現れる「OpenOCD (TELNET)」を選択します。
#ref(STM32F3_OCD_TELNET.png,100%)
Write Script Fileはデバイス及び書き込むメモリの種類に応じて複数のスクリプトファイルが存在します。ファイル名の先頭にstm32f3xx_が付加されているものがDigitus STM32F3用のスクリプトファイルとなります。~
これらスクリプトファイルはFLASH WRITERを自動起動させる設定がなされたコンパイラオプションにて予め指定されるので、通常はユーザが選択する必要はありません。
-''stm32f3xx_bin_flash.script''
~.binファイルをフラッシュROMの先頭から書き込んだ後、デバイスをを再起動
-''stm32f3xx_bin_ram.script''
~.binファイルをRAMの先頭から書き込んだ後、SRAMの先頭アドレスから実行

**JTAG I/F[#JTAG]
JTAG ICEでホストと接続する事でCPUコアの制御やメモリの操作を行う事ができます。~
20ピンタイプのARM系JTAG ICEの場合は、以下の様に接続します。
#ref(STM32F3_JTAG_CONNECTION.png,100%)

**STM32F3用ライブラリ [#LIBRARY]
[[GCC Developer Lite>GCC Developer Lite]]では[[ターゲットファイル>#TARGETFILES]]と称してDigitus STM32F3用の様々なファイルが提供されています。~
GCC Developer Liteを標準的な環境のPCへインストールすると、「C:\Program Files\BestTech\GCC Developer Lite\TARGET\STM32F3」フォルダに必要なファイルがコピーされますので、必要に応じて本フォルダを参照できますしユーザがソースを修正しライブラリを再構築する事も可能です。
-''スタートアップルーチン''
~C言語で作成するユーザプログラムを実行させるために、C言語で記述された必要最低限の初期化処理プログラムです。~
'''exceptions.c''' (スタートアップルーチン本体のソースファイル)~
'''lowlevel.c''' (低レベルな初期化処理ルーチンのソースファイル)~
-''リンカスクリプトファイル''
~実行条件に応じたメモリの割り当てを記述したファイルです。ビルド時にリンカが参照しコードの最終的な配置が決定されます。~
'''stm32f373_ram.x''' (SRAM上で実行させるリンカスクリプト)~
'''stm32f373_rom.x''' (フラッシュROM上で実行させるリンカスクリプト)~
'''stm32f373_rom_term.x''' ([[ブートローダ>STM32F3_BL]]を介して実行させるリンカスクリプト)~
-''内蔵ペリフェラルのレジスタ名定義ヘッダファイル''
~内蔵ペリフェラルが持つレジスタは、決められたメモリ上のアドレスに配置されています。それらレジスタをアドレスではなくレジスタ毎に決められた名称を使い、変数のようにアクセスするためのマクロ定義が記述されています。また、ST社から提供される標準ライブラリのヘッダファイルのインクルードも含まれます。~
'''stm32f37x.h''' (レジスタのマクロ定義とビット情報)~
-''UART API''
~複数のシリアルポートが備わっており制御方法も多種多様なため、それに応じてライブラリとして個別に提供しています。~
'''us.h''' (APIのプロトタイプ宣言を含むヘッダファイル)~
'''usart1_*.c''' (USART1ポートを割り込みで使用するAPIのソース群)~
'''usart2_*.c''' (USART2ポートを割り込みで使用するAPIのソース群)~
'''usart3_*.c''' (USART3ポートを割り込みで使用するAPIのソース群)~
'''usb_*.c''' (USBポートでシリアルエミュレーションを行うAPI群)~
'''.\libusb''' (USBポートでシリアルエミュレーションを行うドライバソース)
-''PIO初期化API''
~煩雑なPIOの初期化を簡便に行うためのAPIです。~
'''piocfg.h''' (APIのプロトタイプ宣言を含むヘッダファイル)~
'''piocfg.c''' (APIのソースファイル)
-''ライブラリファイル''
~上記各APIをコンパイルし、1つのライブラリファイルにアーカイブして提供します。~
'''makelib.bat''' (APIをコンパイルし、アーカイブするバッチ)~
'''libstm32f37x_basic.a''' (makelib.batで作成されるライブラリファイル)~
~ST社から提供されるライブラリをアーカイブして提供します。~
'''./libstd/makelib.bat''' (APIをコンパイルし、アーカイブするバッチ)~
'''./libstd/libstm32f37x_std.a''' (makelib.batで作成されるライブラリファイル)~
**サンプルプログラム [#SAMPLE]
**その他 [#ETC]

  Next »[4]