stm32 チュートリアル
stm32を使い始める
サーチ…
備考
このセクションでは、stm32の概要と、なぜ開発者がそれを使いたいのかを概説します。
また、stm32内の大きなテーマについても言及し、関連するトピックにリンクしてください。 stm32のドキュメントは新しいので、これらの関連トピックの初期バージョンを作成する必要があります。
STM32とは何ですか?
STM32は、STマイクロエレクトロニクスが開発した32ビット・フラッシュ・マイクロコントローラ・ファミリです。 ARM®Cortex®-Mプロセッサをベースとし、高性能、リアルタイム機能、デジタル信号処理、低電力、低電圧動作を兼ね備えた32ビット製品群を提供します。
各シリーズ、開発ツール、および部品番号のデコードに関する詳細な説明は、 Wikipediaにあります。
製品シリーズ
| Cortex-M0 / -M0 + | Cortex-M3 | Cortex-M4 | Cortex-M7 | |
|---|---|---|---|---|
| ハイパフォーマンス: | STM32F2 | STM32F4 | STM32F7 、 STM32H7 | |
| メインストリーム: | STM32F0 | STM32F1 | STM32F3 | |
| 超低消費電力: | STM32L0 | STM32L1 | STM32L4 |
開発ボード
| STM32 Nucleo ( mbed対応 ) | 発見キット | 評価ボード | |
|---|---|---|---|
| 典型的な使用例: | 柔軟なプロトタイプ作成、コミュニティ | プロトタイピング、創造的なデモ | フル機能評価 |
| 拡張の可能性: | +++ | ++ | ++ |
| 接続性: | Arduino™、ST、Morpho | ST | ST |
バージョン
| バージョン | 発売日 |
|---|---|
| 1.0.0 | 2016-11-01 |
SW4STM32とHALライブラリを使用した点滅LEDの例で初めてのセットアップ
( 注: STM32にはすぐに使えるIDE、ツールチェイン、ライブラリがたくさんありますが、以下の設定では動作させるために最小限の労力を要しますが、それは多くの人の中のひとりです。ここで使用されるツールを誰かに強制的に使用させるこの例の目的)。
IDEのインストール
STM32のためのシステムワークベンチ :無料のWindows、Linux上のIDEとOS Xのそれはによって構築されたAC6とから登録後にダウンロード可能OpenSTM32コミュニティのウェブサイト 。
IDE自体はEclipseに基づいていますが、次のようなSTM32開発用の追加機能が付属しています。
- Ac6 STM32 MCU GCCツールチェーン
- OpenOCDとGDB(arm-none-eabi-gdb)は、ターゲットボードに応じて自動的に生成されたデバッグ設定
- チップをプログラムまたは消去するためのオプションを内蔵
独自のボードを作成する前にSTM32から始めるには、ST-LinkというオンボードSWD(シリアルワイヤデバッグ)プログラマ/デバッガが付属しているDiscovery 、 Nucleo、またはEvalボードを試してみることをお勧めします。
プロジェクトの作成
この例では、STM32F407VGマイクロコントローラを搭載したSTM32F4 ディスカバリキットを使用します。 (他のボードも使用できます)
SW4STM32を開き、新しいCプロジェクトを作成します: ファイル→新規→Cプロジェクト
「STM32F4_Discovery-Blinky」のような名前を付け、 プロジェクトタイプリストからExecutable / Ac6 STM32 MCUプロジェクトを選択します。デフォルトで利用可能なツールチェーンは、 Ac6 STM32 MCU GCCのみです。次へをクリックします。
次のステップはデバッグ/リリースの設定で 、[次へ]をクリックしてスキップできます。
ボードの選択 。この例では、STM32F4検出または新しいカスタムボードを追加できるので、既存のボードを選択できます。
次のステップはProject Firmwareの設定です。 ファームウェアなし 、SPL( Standard Peripheral Library )、またはHAL( Hardware Abstraction Layer )のいずれかを選択します 。どちらが開発に適しているかは疑問ですが、この例ではこの質問は範囲外です。この例では、ST Microelectronicsが現在サポートしているHALライブラリを使用します。 HAL用の追加ソフトウェアツールは、初期化コードジェネレータであるSTM32CubeMXです。また、 STM32CubeFxまたはSTM32CubeLxソフトウェア・パッケージでは、いくつかのアプリケーション例が利用可能です。ターゲットファームウェアがダウンロードされていない場合はそれをダウンロードして、 「プロジェクトで低レベルのドライバを追加する」と「アプリケーションのソースとして」オプションを選択することをお勧めします。最後に、Finishをクリックします。
点滅LEDアプリケーション
このプロジェクトはSTM32F4ディスカバリーを使用して作成されているため、ディスカバリーキットの周辺機器(加速度センサー、オーディオなど)とのインターフェースに使用できる/ STM32F4_Discovery-Blinky / Utilities / STM32F4-Discovery /プロジェクトフォルダーには、 、LED、プッシュボタン)。この例ではvoid BSP_LED_Init(Led_TypeDef Led)及びvoid BSP_LED_Toggle(Led_TypeDef Led)の関数である緑色LED、点滅するstm32f4_discovery.cファイルから使用されるLED4 。 ディスカバリーキットの回路図を使用するLEDを決定する。
実際のピン名とポート名は既にいくつかの#defineとenumで隠されており、 Ctrl +クリックでそれらを追跡します。
-
main内部では、HAL_Init()関数を呼び出して、すべての周辺機器をリセットし、FlashインターフェイスとSystickを初期化します。 (Systickは、点滅の遅延を生成するために使用されます)。 - システムクロックを設定する必要があります。これは、 STM32CubeMXクロック構成機能またはリファレンス・マニュアルを使用して実行できます。この例では、システムクロックは、外部の8 MHz水晶発振器(HSE)によって供給される内部PLL(位相ロックループ)によって供給されます。プリスケーラは、F4ディスカバリの場合、最大利用可能周波数(168 MHz)を達成するように設定されています。
- 周辺機器の初期化(この場合はGPIOピン)。
- 無限ループ内で、LEDトグルと
HAL_Delay()関数を呼び出します。HAL_Delay()はSystickを使用し、ミリ秒Systickで遅延を生成します。
コード全体は次のとおりです。
#include "stm32f4xx.h"
#include "stm32f4_discovery.h"
void SystemClock_Config(void);
int main(void)
{
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
/* Initialize one of the LED GPIO pin */
BSP_LED_Init(LED4);
while(1)
{
BSP_LED_Toggle(LED4);
HAL_Delay(1000); // in miliseconds
}
}
/**
* @brief System Clock Configuration
* The system Clock is configured as follow :
* System Clock source = PLL (HSE)
* SYSCLK(Hz) = 168000000
* HCLK(Hz) = 168000000
* AHB Prescaler = 1
* APB1 Prescaler = 4
* APB2 Prescaler = 2
* HSE Frequency(Hz) = HSE_VALUE
* PLL_M = (HSE_VALUE/1000000u)
* PLL_N = 336
* PLL_P = 2
* PLL_Q = 7
* VDD(V) = 3.3
* Main regulator output voltage = Scale1 mode
* Flash Latency(WS) = 5
* @param None
* @retval None
*/
void SystemClock_Config(void)
{
RCC_ClkInitTypeDef RCC_ClkInitStruct;
RCC_OscInitTypeDef RCC_OscInitStruct;
// Enable Power Control clock
__PWR_CLK_ENABLE();
// The voltage scaling allows optimizing the power consumption when the
// device is clocked below the maximum system frequency, to update the
// voltage scaling value regarding system frequency refer to product
// datasheet.
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
// Enable HSE Oscillator and activate PLL with HSE as source
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
// This assumes the HSE_VALUE is a multiple of 1MHz. If this is not
// your case, you have to recompute these PLL constants.
RCC_OscInitStruct.PLL.PLLM = (HSE_VALUE/1000000u);
RCC_OscInitStruct.PLL.PLLN = 336;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 7;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
// Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2
// clocks dividers
RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK
| RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5);
}
ハンマーで構築する
プロジェクトフォルダを右クリックし、[ ターゲット]→[プログラムチップ... ]オプションを選択してアプリケーションをダウンロードします。
ダウンロードするもう一つの方法は、 debugを使うことです。そうするには、バグアイコンの横にある矢印をクリックしてください
ツールバーの[ Debug Configuration ... ]メニューを開きます。新しいAc6 STM32デバッグ設定を作成し、 C / C ++アプリケーションフィールドが空の場合は、次の情報を入力します。
デバッグ\ STM32F4_Discovery-Blinky.elf
OpenOCD設定ファイルや使用されているTelnetやGDBポートなどのその他のデバッグパラメータは、自動的に生成され、フレームワークによって埋められます。最後に、[デバッグ]ボタンをクリックします。



