目次

はじめに

この本を読むとこれができるようになります
本書のサンプルコードについて
表記関係について
免責事項

第1章 ボードの購入方法

1.1 秋月電機
1.2 共立電子
1.3 Chip1Stop
1.4 Nucleo-F401RE

第2章 開発環境のインストール

2.1 Javaのインストール
2.2 CubeIDEのインストール
2.3 STM32CubeIDEの起動

第3章 Lチカ

3.1 STM32CubeIDEの起動
3.2 デバイスの選択
3.3 ピン配置
3.4 クロック設定
3.5 機能設定
3.6 テストビルド
3.7 コードの追加&ビルド
3.8 STM32CubeIDEでソースコードレベルデバッグ
3.9 プロジェクトの終了

第4章 HALの勉強方法

4.1 HALってなに?
4.2 サンプルプロジェクトについて

第5章 ゆっくり光るLチカ(TIM PWM)

5.1 TIM(タイマ)
5.2 STM32CubeIDEでテンプレート作成
5.3 コードの変更
5.4 CMSIS-DSPを使ったプロジェクトのビルド
5.5 ボードの設定
5.6 実行
5.7 TIMの詳細
5.8 CC(カウンタコンペア)によるDutyの作成
5.9 PWM周波数の選び方

第6章 UART

6.1 信号線
6.2 Nucleo-F401REでのUART
6.3 STM32CubeIDEでテンプレート作成
6.4 コードの変更
6.5 シリアルターミナル
6.6 実行
6.7 信号フォーマット

第7章 SPI

7.1 信号線
7.2 STM32CubeIDEでテンプレート作成
7.3 NucleoでSPI接続
7.4 コードの変更
7.5 実行

第8章 割り込み

8.1 割り込みとは
8.2 ハードウェア割り込み
8.3 __IO
8.4 深掘り

第9章 I2C

9.1 信号線
9.2 STM32CubeIDEでテンプレート作成
9.3 NucleoでI2C接続
9.4 コードの変更
9.5 実行
9.6 EEPROMを読み出し、書き込みする場合
9.7 I2Cで可変長のslaveができない

第10章 ADC

10.1 STM32CubeIDEでテンプレート作成
10.2 NucleoでADC接続
10.3 コードの変更
10.4 実行
10.5 ADCの説明
10.6 Cadcへの充電
10.7 Cadcをコンパレータ(比較器)に
10.8 DACを動作させてコンパレータで比較
10.9 注意点

第11章 ADCのキャリブレーション

11.1 STM32CubeIDEでテンプレート作成
11.2 コードの変更
11.3 実行

第12章 DMA

12.1 概念
12.2 HALでのDMA
12.3 DMAハードウェアブロックについて
12.4 深掘り

第13章 RTCを使った低消費電力からの復帰

13.1 低消費電力モード
13.2 STM32CubeIDEでテンプレート作成
13.3 コードの変更
13.4 実行
13.5 Standbyモード
13.6 standbyモードの実行

第14章 HALの勉強方法(実践編)

14.1 サンプルコードチェック
14.2 MX perspectiveでの設定
14.3 コード作成
14.4 まとめ

第15章 電力計算ツール

第16章 USBを使ったワンボタンキーボード

16.1 信号線
16.2 必要になるハードウェア
16.3 STM32CubeIDEでテンプレート作成
16.4 NucleoでUSB接続
16.5 コードの書き込み
16.6 コードの変更
16.7 実行
16.8 HID Class
16.9 USB HAL概略

第17章 FreeRTOS

17.1 プログラムの仕様
17.2 STM32CubeIDEでベアメタルプログラムのテンプレート作成
17.3 NucleoでADC接続
17.4 ベアメタルプログラムのコードの変更
17.5 ベアメタルプログラムの実行
17.6 STM32CubeIDEでRTOSプログラムのテンプレート作成
17.7 RTOSプログラムのコードの変更
17.8 RTOSプログラムの実行
17.9 違い
17.10 RTOSのプログラムの解説
17.11 マルチタスクOSとリアルタイムOS(RTOS)の違い
17.12 タスク分割

第18章 リンカファイル

18.1 Entryポイント
18.2 Stack位置
18.3 heapサイズとstackサイズ
18.4 メモリ定義
18.5 SECTION
18.6 C言語以外のSECTION
18.7 SECTIONの並び
18.8 SECTIONを追加(FLASHの特定位置に置きたい場合)
18.9 SECTIONを追加(関数をRAMで実行したい場合)

第19章 ブートローダー

第20章 IAP(In Application Program)によるデュアルブート

20.1 概要
20.2 iapプログラムのビルド
20.3 実稼働プログラムのビルド
20.4 動作確認
20.5 iapプログラムの説明
20.6 実稼働プログラムの説明
20.7 実際の使用例

第21章 バグ

21.1 arm_math.hやCMSIS DSPをコピーしない
21.2 FreeRTOSのタスク内でprintfの"%f"を使うとハングアップ

第22章 STM32シリーズ紹介

22.1 歴史。全てはF1から始まった
22.2 STM32F1シリーズ
22.3 STM32L1シリーズ
22.4 STM32F2シリーズ
22.5 STM32F3シリーズ
22.6 STM32F4シリーズ
22.7 STM32F0シリーズ
22.8 STM32L0シリーズ
22.9 STM32L4シリーズ
22.10 STM32L4+シリーズ
22.11 STM32F7シリーズ
22.12 STM32H7シリーズ
22.13 STM32G0シリーズ
22.14 STM32G4シリーズ
22.15 STM32L5シリーズ
22.16 STM32U5シリーズ
22.17 たくさんあるSTM32から適切なものを探し出す

第23章 Tips

23.1 ハードウェアを設計する前に
23.2 NRSTについて
23.3 クリスタルマッチング
23.4 外部水晶振動子が必要な場合
23.5 STM32でSWDピンをGPIOにしてしまった場合
23.6 NucleoでSTLINKを切り取ることなくSTM32のVdd電圧を変える方法
23.7 ADCから現在の電源電圧を知る方法
23.8 一定時間外部割り込みを停止する方法
23.9 STM32CubeIDEでプロジェクトのコピー
23.10 STM32内蔵の温度計について
23.11 SDIO
23.12 gccとIARとKEIL
23.13 量産用FLASH書き込み機
23.14 ハードフォルト時の解析
23.15 オプションバイト
23.16 ブロッキング関数とノンブロッキング関数の違い
23.17 サポート
23.18 ST公式日本語解説およびアプリケーションノート

まとめ

謝辞

はじめに

 この本は、WindowsでSTM32マイコンの環境設定を行う本です。技術書展11で頒布した「WindowsではじめるSTM32 2021版」を底本にしています。

 ターゲット読者は「WindowsでSTM32をはじめてみたい」という初心者から、「ペリフェラルの使い方を知りたい」「RTOSも使ってみたい」という中級者、「実務でSTM32を使用している」というプロユースの方まで、幅広く対応しています。

 この本では

 ・ボードの購入方法

 ・CubeIDEのインストール

 ・Lチカ

 ・HALの勉強方法

 ・技術書典6でデモしたゆっくり光るLチカ(TIM PWM)

 ・UART

 ・SPI

 ・割り込み

 ・I2C

 ・ADC

 ・ADCキャリブレーション

 ・DMA

 ・低消費電力モード

 ・HALの勉強方法(実践編)

 ・電力計算ツール

 ・USB

 ・FreeRTOS

 ・リンカファイル

 ・IAPによるデュアルブート

 ・バグ

 ・STM32シリーズ紹介

 ・Tips

 という順番で進めていきます。

 初心者の方は、最初から読み進めてください。

 ひととおり動かしたことのある方、プロユースの方は、全編を拾い読みするといいと思います。あなたの知らなかった情報もあると思います。

この本を読むとこれができるようになります

 ・WindowsでSTM32の環境設定ができます

 ・HALの勉強方法がわかります

 ・STM32の各ペリフェラルのHALを実践的に試せます

 ・STM32のハードウェア設計のきっかけがわかります

 ・その他、STM32のさまざまなノウハウがわかります

 最終的には、熟練したSTM32プログラマー相当になれます(たぶん)。

本書のサンプルコードについて

 以下のURLからダウンロードできます。タグはv1.7.0です。

 https://github.com/kotetsuy/STM32forWindowsDemos

表記関係について

 本書に記載されている会社名、製品名などは、一般に各社の登録商標または商標、商品名です。会社名、製品名については、本文中では©、®、™マークなどは表示していません。

免責事項

 本書に記載された内容は、情報の提供のみを目的としています。したがって、本書を用いた開発、製作、運用は、必ずご自身の責任と判断によって行ってください。これらの情報による開発、製作、運用の結果について、著者はいかなる責任も負いません。

第1章 ボードの購入方法

 まずはボードがないと始まりません。いまは気軽に秋葉原や日本橋に買いに行けませんので、インターネット通販で買いましょう。この本ではNucleo-F401REを使用します。

1.1 秋月電機

 秋葉原の有名な電子工作ショップです。最近はRaspberry Piなどにも力を入れています。STM32はNucleoボードの購入ができます。店舗だけでなく通販1でも購入可能です。

1.2 共立電子

 日本橋の有名な電子工作ショップです。個人的には「東の秋月、西の共立」と思っています。店舗だけでなく通販2でも購入可能です。

1.3 Chip1Stop

 インターネット通販3のお店です。STのSTM32日本語ページでの公式販売を行っているようです。

1.4 Nucleo-F401RE

 NucleoボードはUSBがmini USBです。最近はmini USBケーブルもあまり見なくなってきたので、一緒に入手しておきましょう。

 実物はこんな風になっています。

図1.1: Nucleo-F401RE

STってどこの国の会社?

 公式サイトをみると、1987年に、イタリアのSGS MicroelettronicaとフランスのThomson Semiconducteursが合併して、SGS-THOMSON Microelectronicsという名前で発足しました。その後、1998年にSTMicroelectronicsという名前に改名しました。「じゃあ、イタリアとフランスの会社?」かと思うと、本社はスイスのジュネーブにあります。想像ですが、どちらかの国に本社を置くと、そっちを重視してしまうので、あえて第三国に置いたのでないでしょうか。面白いことに、会社の登記はオランダです。これはオランダの法人税が安いからのようで、ヨーロッパの多国籍企業はオランダに登記することが多いです。フィリップスなんかもオランダ登記です。

2021年の半導体不足について

 2020年、新型コロナの拡大とともに自動車産業が減産したのをきっかけに、世界中で半導体不足が起きています。原因としては、材料の供給不足、半導体会社が高利益のスマホ向けチップに移行して、古いプロセスのチップの生産量を絞っている、自動車産業が増産を始めたので、急激に需要が拡大し、生産が追いつかない、などの理由が挙げられています。現在(2021年7月25日)では、STM32のリードタイムも52週を超える、ブラックマーケットで10倍の値段で販売されるなど、色々な影響を受けています。この本も、書いたのはいいけど、部品が少なくなっているので、買う人がいないんじゃないかと心配です。

1. http://akizukidenshi.com/catalog/g/gM-07723/

2. http://eleshop.jp/shop/g/gE47412/

3. https://www.chip1stop.com/product/detail?mpn=NUCLEO-F401RE&partId=STMI-0082067

第2章 開発環境のインストール

2.1 Javaのインストール

 STM32CubeIDEはJavaのアプリケーションなので、WindowsにJavaをインストールする必要があります。しかも、Java81です。OracleはJava8の一般向け公開をやめているので、代わりにOpenJDK8をインストールします。OpenJDK8はいくつもバージョンがあるのですが、私はAmazon Corretto 82を使っています。

2.2 CubeIDEのインストール

 Windowsでの開発環境は、STの配布しているSTM32CubeIDEと、VisualStudioCode上で動作するPlatformioのふたつがあります。この本ではSTM32CubeIDE(2021年7月25日現在 v1.7.0)を使います。

 ここのURL3よりダウンロードします。

図2.1: STM32CubeIDEダウンロード
図2.2: STM32CubeIDEダウンロード

 ダウンロード後zipファイルを展開し、インストーラを起動すると、次の画面が表示されます。

図2.3: STM32CubeIDEインストーラ

 Nextを押して、インストールを続けます。stlinkのドライバーもstlink debuggerもインストールされます。

2.3 STM32CubeIDEの起動

 デスクトップのアイコンから起動します。スプラッシュ画面が出て、workspaceを設定する画面になります。

図2.4: workspace

 注意:workspaceを設定する画面で「use this as the default and do not ask again」にチェックしてはいけません。ここをチェックしてしまうと、後々面倒です。

 Windowsのファイアウォールの画面が出てくるので、Privateに設定して、OKを押します。

図2.5: ファイアウォール

 次の画面が出ると、インストール成功です。

図2.6: CubeIDE起動

 この章で、次の目標を達成しました。

 ・WindowsでSTM32の環境設定ができます

Javaはいつまで使える?

 OracleがGoogleと裁判したり、Jave JREのライセンスを変えたりして、Javaが非常に使いにくくなっています。STも「Windows、Mac、Linuxのマルチプラットフォームで動かすならJavaだ!」と思って、Javaを選んだのは想像つくのですが、まさかここまでの逆風になるとは思っていなかったでしょう。CubeIDEも、いずれJavaベースではなくなるのではと想像しています。

試し読みはここまでです。
この続きは、製品版でお楽しみください。