STM32 + EmBlocks-点滅するLED

EmBlocksに関する前の記事のコメントで要求されたように、今日は、LEDを点滅させるためのEmBlocksで簡単なプロジェクトを作成する方法を最初から最後までお見せします。

デバッグボードとして、 STM32F103C8のクラムを使用します。

こちらが当社のスタンドです。



LEDのアノードをピンPB5およびPB6に接続し、カソードを390オームの抵抗器を介してグランドに接続します。



したがって、 EmBlocksをまだダウンロードしていない場合は、実行してください。 任意の便利なディレクトリに解凍して実行します。

「ファイル->新規->プロジェクト...」を選択してプロジェクトを作成します

[プロジェクト]カテゴリで、[STmicro-Arm]を選択します。



プロジェクトに名前を付けて、プロジェクトを作成するフォルダーを選択します。 将来、別のプロジェクトを選択しない場合、新しいプロジェクトは自動的にそこに保存されます。



コンパイラー選択ウィンドウで、何も触れずに先に進みます。

最初のリストからプロセッサを選択するためのウィンドウで、「STM32F10x_md」を選択します STM32F103C8はF1ファミリーに属し、64kフラッシュを含んでおり、中密度デバイスに関連付けられています。

ColinkExを使用する場合、次のウィンドウで特定のプロセッサ名を選択します。これはCoFlashユーティリティファームウェアに必要です。

ST-Linkを使用する場合は、そのままにしておくことができます。

「hexファイルの作成」チェックボックスは、.elfファイルの代わりに.hex出力を作成します。 ColinkExは両方を受け入れますが、ST-Link Utilityのみ.hex



完了をクリックします。 ウィザードでは、デバッガーを選択して構成するよう求められます。 そして2回-デバッグの目的で、次にリリースの目的で...別のものを使用する場合は、キャンセルをクリックして別のデバッガーを選択します。 他のデバッガについては改めて説明します。

デフォルトでは、ST-Linkが提供されています。これは私たちに適しています。したがって、ターゲット(デバッグ、リリース)ごとに[ OK ]を2回クリックするだけです。

すべて、プロジェクトのブランクは準備ができています。 ここでF7を押すと、プロジェクトがコンパイルされ、リマインダー付きのファームウェアの準備ができます。これは、リリースターゲットの設定ですでに考慮されています。



プロジェクト構造を分析しましょう:





すべてのプロジェクトファイルは、それぞれ.c.h、および.SファイルのSourcesHeaders、およびASM Sourcesフォルダーに自動的に分解されます。



Sourcesフォルダーには、CMSISライブラリファイルを含むcmsis_bootサブフォルダーがあります。

サブフォルダーstm_lib \ srcには、ほぼすべてのプロジェクトで必要ないくつかのファイルが既にあります。

stm32f10x_gpio.c

stm32f10x_rcc.c






これらは、GPIOおよびクロックシステムを操作するためのStdPeriphライブラリの一部です。

Srcサブフォルダーにはmain.cファイルがあります。これはプログラムのブランクです。



ヘッダーフォルダーでは、ヘッダーはまったく同じフォルダーに配置されます。

将来的には、StdPeriph Libraryの必要な部分をstm_lib \ incおよびstm_lib \ srcサブフォルダーに追加し、名前を右クリックして「ファイルを追加...」または「ファイルを再帰的に追加...」を選択してプロジェクトに含めます。 しかし、今日は必要ありません。



ASM Sources \ cmsis_boot \ startupフォルダーにあるstartup_stm32f10x_md.Sファイルは、マイクロコントローラーの起動を担当します。

リンカスクリプトはOthersフォルダにあり、gcc_arm.ldと呼ばれます



プロジェクトの構造を簡単に理解しました。今度は、ビジネスを開始するためのコードを作成します。

ファイルSources \ Src \ main.cを開き、その中のテキストを次のように置き換えます。

 #include <stm32f10x.h> #include <stm32f10x_conf.h> #include <stm32f10x_rcc.h> #include <stm32f10x_gpio.h> #define RCC_GPIO RCC_APB2Periph_GPIOB #define LED_PORT GPIOB #define LED1_PIN GPIO_Pin_5 #define LED2_PIN GPIO_Pin_6 void Delay(volatile uint32_t nCount) { for (; nCount != 0; nCount--); } int main(void) { /* SystemInit()    startup_stm32f10x_md_vl.S */ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_GPIO, ENABLE); GPIO_InitStructure.GPIO_Pin = LED1_PIN | LED2_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init( LED_PORT , &GPIO_InitStructure); LED_PORT->ODR ^= LED2_PIN; while (1) { LED_PORT->ODR ^= LED2_PIN; LED_PORT->ODR ^= LED1_PIN; Delay(0x7FFFF); } return 0; }
      
      





マクロRCC_GPIO、LED_PORT、LED_PIN1、およびLED_PIN2を定義し、LEDを別のポートのピンに接続できるように変更しました。



メイン()関数で、GPIO_InitStructure構造体に入力し、PB5およびPB6ピンを最大周波数50MHzのPushPullモードで動作するように設定します。

次に、LED_PIN2の状態を反転させて、LEDが点滅し、わずかな遅延でサイクルを切り替えるようにします。



F7を押すと、プロジェクトがエラーなしで組み立てられたと確信します。

構築する

ST-Link / v2デバッガーをボードに接続し、PCがボードをUSBデバイスとして識別しようとするのではなく、単に電力を供給するように、P2ジャンパーを取り外して、たとえばUSB経由でボードに電力を供給します。 F6押してST-Link / V2を使用してフラッシュするか、「ツール-> Flash w ST-Link / V2」を選択し、数秒待ちます。すべてが正しく完了すると、LEDが交互に点滅します。





とても簡単ですね。



全体のプロセスには約1分かかります。 それでも成功しなかった場合は、プロジェクトダウンロードして、実際に起こったことと比較してください。

別のボードの場合、リストから選択したプロセッサーのみが変更され、別のポートに接続されている場合はLEDのマクロ定義が変更されます。

たとえば、STM32VLDiscoveryの場合:

 #define RCC_GPIO RCC_APB2Periph_GPIOC #define LED_PORT GPIOC #define LED1_PIN GPIO_Pin_8 #define LED2_PIN GPIO_Pin_9
      
      






All Articles