2 新しい STM32 プロジェクトの作成#
2 新しい STM32 プロジェクトの作成#
2.1 STM32F10X モデルの分類と略語#
STM32F103C8T6
: C8T6
のフラッシュは 64K なので、MD の起動ファイルを選択します。
略語 | 意味 | Flash容量 | モデル |
---|---|---|---|
LD_VL | 小容量製品超値シリーズ | 16~32K | STM32F100 |
MD_VL | 中容量製品超値シリーズ | 64~128K | STM32F100 |
HD_VL | 大容量製品超値シリーズ | 256~512K | STM32F100 |
LD | 小容量製品 | 16~32K | STM32F101/102/103 |
MD | 中容量製品 | 64~128K | STM32F101/102/103 |
HD | 大容量製品 | 256~512K | STM32F101/102/103 |
XL | 加大容量製品 | 大于 512K | STM32F101/102/103 |
CL | 互联型製品 | - | STM32F105/107 |
2.2 新しいプロジェクトの作成手順#
プロジェクトフォルダを作成し、Keil で新しいプロジェクトを作成し、モデルを選択します。
プロジェクトフォルダ内に Start、Library、User などのフォルダを作成し、ファームウェアライブラリのファイルをプロジェクトフォルダにコピーします。
プロジェクト内には、Start、Library、User などと同じ名前のグループを作成し、フォルダ内のファイルをプロジェクトグループに追加します。
プロジェクトオプション、C/C++、Include Paths で、すべてのヘッダーファイルのフォルダを宣言します。
プロジェクトオプション、C/C++、Define で、USE_STDPERIPH_DRIVER を定義します。他のプロジェクトでは、STM32F10x_MD
という文字列もここで宣言されていますが、Keil5
は新しいプロジェクトを作成した後に自動的にこれを宣言してくれるため、重複して宣言する必要はありません。
プロジェクトオプション、Debug、ドロップダウンリストから対応するデバッガを選択し、Settings、Flash Download で Reset and Run にチェックを入れます。
2.3 プロジェクトのアーキテクチャ図#
2.4 keil 5 での新しいプロジェクトの構造図#
Start
フォルダ:#
.s
起動ファイルは、Keil ソフトウェアで 1 つしか追加できません。今回はstartup_stm32f10x_md.s
起動ファイルを選択します。
stm32f10x.h
のペリフェラルレジスタの記述ファイルで、51 マイクロコントローラのREGX52.h
と同様の役割を果たし、STM32 のどのレジスタと対応するアドレスがあるかを記述します。
system_stm32f10x.c
とsystem_stm32f10x.h
ファイルはクロックの設定に使用されます。STM32
のメインクロックは、system ファイル内の関数によって設定されます。
core_cm3.c
とcore_cm3.h
ファイルは、コアのレジスタの記述といくつかのコアの設定関数を持っていますので、.c
ファイルが追加されています。
次に、プロジェクトオプションで Start フォルダのヘッダーファイルのパスを追加します。そうしないと、ソフトウェアは.h
ファイルを見つけることができません。
Library
フォルダ:#
inc
とsrc
の 2 つのフォルダには、ST 社が提供する.h
と.c
のライブラリファイルが含まれています。
System
フォルダ:#
System フォルダには、システムのリソースが格納されています。たとえば、delay.c
delay.h
などです。
User
フォルダ:#
main.c
ファイル
stm32f10x_conf.h
ファイルは、ライブラリ関数のヘッダーファイルの関係を設定するためのもので、パラメータのチェック用の関数定義も含まれています。これはすべてのライブラリ関数で必要です。
stm32f10x_it.c
とstm32f10x_it.h
ファイルは、割り込み関数を格納するためのものです。
2.5 STLink
を使用してstm32
マイクロコントローラを接続する#
接続方法:
ST-LINK V2 | STM32 |
---|---|
3.3V | 3V3 |
SWDIO | SWIO |
SWCLK | SWCLK |
GND | GND |
main.c
#include "stm32f10x.h" // Device header
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //Cポートのクロックを有効にする
//構造体の定義
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //汎用プッシュプル出力
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; // 13番ピン
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50MHzの速度
//ポートモードの設定
GPIO_Init(GPIOC, &GPIO_InitStructure);
//ポートのハイ・ローレベルの設定
//GPIO_SetBits(GPIOC, GPIO_Pin_13);//ハイレベル
GPIO_ResetBits(GPIOC, GPIO_Pin_13);//ローレベル
while(1)
{
}
}