STM32 F407 Discovery LLライブラリを使ってLチカ

STM32の開発には、STマイクロエレクトロニクス提供のライブラリを使うのが効率的とされており、現在は LL API（Low-Layer Application Programming Interface）ソフトウェアが無償提供されています。
さらに STM32CubeIDE という開発環境 (IDE) も同様に無償で使えるため、STM32CubeIDE と LL を使って開発します。

使用するハードウェアは STM32F4DISCOVERY です。
秋月電子やRSコンポーネンツで 3000円程度 で購入できます。

# 解説内容

Lチカを行います。

# 用意するもの

* [STM32F4DISCOVERY](https://www.st.com/ja/evaluation-tools/stm32f4discovery.html)
* USB mini-B ケーブル

# 開発環境

* MacBook Pro (13-inch, 2019, Four Thunderbolt 3 ports)  
* macOS Catalina バージョン 10.15.6
* [STM32CubeIDE](https://www.st.com/ja/development-tools/stm32cubeide.html) Version: 1.4.0

STM32CubeIDE のインストールには、STマイクロエレクトロニクスへのアカウント登録（無料）が必要です。  
インストーラを実行するだけで簡単にインストールできます。

# ソフトウェア開発手順

## コーディング前の準備

STM32CubeIDE を起動すると以下の画面が開きます。
画面左の C/C++ Projects で右クリックし、 [New] → [STM32 Project] を選択します。

![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14077/9a71b41c-2c79-2256-e834-724b553499ef.png)

マイコンの種類を選択する画面が開きます。  
上バーから Board Selector を選び、 Commercial Part Number で STM32F407G-DISC1 を選択します。  
画面右にボードの写真が出てくるので選択し、右下の Next を押します。

![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14077/c4e6cd86-1179-1741-7f46-cd98643bc947.png)

Project Name を入力し、 Finish を押します。

![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14077/63fc7a7a-a37e-5e23-55b0-c1e7a17d95bd.png)

今回は No を選択します。
（Yes を選択した方が楽なこともありますが勉強のため。）

![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14077/faa9b93f-c6ef-d9f3-8fbc-f0738797f9ac.png)

マイコンのピンアサイン画面が開きます。

![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14077/33e27b60-0f91-83d6-dc33-e61b57cc108e.png)

左蘭の [System Core] → [RCC] を選択します。
High Speed Clock (HSE) を Crystal/Ceramic Resonator にします。
F4Discoveryには 8MHz のオシレーターが付いているので、これを使うための設定です。  

![06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14077/6e9ca2de-f551-4b9b-8cc0-bf6426c78802.png)

上タブの Clock Configuration を選択します。

本マイコンは 最大168MHz で動作します。
また前述したとおり 8MHz のオシレーターが付いていますので、これを入力として逓倍と分周をして 168MHz を作り出すように設定します。

以下画像のように設定してください。

![07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14077/7a6b42f1-8767-873e-d5b7-60081f354009.png)

上タブの Project Maneger を選択します。
次に左タブの Advanced Settings を選択します。

GPIO、RCC がデフォルトだと HAL となっていますが、 本記事は LL の使い方解説なので LL を選択します。

![08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14077/2be9a7f2-9a5b-e72a-ecc3-adfe6a38759a.png)

以上が設定できたら、 ioc ファイルを保存してください。
保存すると自動的に C言語のファイル等必要なものが生成されます。

以上でコーディング前の準備は完了です。

## コーディング

Core/Src/main.c を開き main関数 に以下を追記してください。

```main.c
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
    /* USER CODE END WHILE */
    // 【追記開始】
    LL_mDelay(100);
    LL_GPIO_TogglePin(LD3_GPIO_Port, LD3_Pin);
    LL_GPIO_TogglePin(LD4_GPIO_Port, LD4_Pin);
    LL_GPIO_TogglePin(LD5_GPIO_Port, LD5_Pin);
    LL_GPIO_TogglePin(LD6_GPIO_Port, LD6_Pin);
    // 【追記終了】
    /* USER CODE BEGIN 3 */
}
```

以上でコーディングは完了です。（すごく短いですね）

## 実行する

STM32F4Discovery を USBケーブル で PC に繋いでください。

メニューバーから [Run] → [Debug] を選択します。

![09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14077/4f23eea1-a1c2-35e0-3e7c-ea83087b6b80.png)

右下の OK を押します。

![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14077/cdde74bd-4d0b-7a9e-5ba4-00d77271d563.png)

STM32F4Discovery に搭載されている ST-Link（JTAG）のバージョンが古いと以下画面が出るので最新にアップデートしてください。
アップデート完了したら上記手順に戻り再度実行します。

![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14077/f08d6ff1-74f6-008f-3da8-2ad67c217afe.png)

main関数の先頭で止まるので、左上の三角ボタンを押して続きを実行してください。
（一行ずつのステップ実行なども可能です）

![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14077/9f29f37d-e048-be01-6b57-5afeccacdfed.png)

うまくいけば、以下のように4つのLEDが点滅します。

![board_led.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14077/2e456b76-49dc-f352-ab20-802cf691e45a.jpeg)

以上で実行完了です。

# ソースコード一式

https://github.com/hiroshi-mikuriya/f407_LED_Blinking

# 参考

STマイクロエレクトロニクスのサンプルコード、および STM32CubeIDE が自動生成するコードを元に本記事を作成しています。