💡 この連載は「なんとなく動く」から卒業し、「なぜ動くか」を理解するための連載です。

この連載について

なぜ「ポインタの先」なのか?

Arduinoで電子工作を楽しんできたあなたは、きっとこんな疑問を感じたことがあるはずです:

  • 「digitalWriteは内部で何をしているのか?」
  • 「なぜdelayを使うと他の処理が止まるのか?」
  • 「メモリってどこにあるの?」

その答えは、「ポインタの先」——すなわち、メモリアドレスの向こう側にあります。

組み込みシステムは 「空間・時間・電気」を相手にする世界 です。OSが守ってくれる世界とは違い、すべてを自分で制御しなければなりません。

この連載は、「アドレスだけが現実」 という組み込みの本質を、段階的に、確実に理解するための道筋です。

この連載で得られるもの

🎯 世界観の転換

  • マイコンは状態機械:CPUはメモリから命令を読み、レジスタに書く
  • アドレスこそが現実:変数もレジスタもすべて「場所」
  • 時間を支配する技術:割り込み、DMA、計測の思想
  • 壊れ方を知る強さ:スタック、ポインタ事故、最適化の罠

💡 実践スキル

  • レジスタ直接操作:GPIOをBSRRで叩く
  • ポインタ=型付きアドレス:怖くない、武器になる
  • 割り込み設計:アンチパターンを知り、正しく実装
  • DMA活用:CPUを暇にする発想
  • 計測文化:DWT CYCCNT で実行時間を測る
  • mapファイル解読:メモリ配置を支配する

📚 つよつよエンジニアへの思考回路

  • データシートは地図:リファレンスマニュアルを武器に
  • 計測しないと議論できない:実測ベースの設計
  • 壊すコードで学ぶ:事故から強くなる
  • 生成コードを見る習慣:C と機械語の対応を知る

連載記事一覧

Phase 0: 導入

タイトル 公開日 リンク
第0回 なぜ組み込みは難しく見えるのか ― 空間と時間の世界 ― 2026/02/13 📖 記事を読む

Phase 1: 空間の世界

タイトル 公開日 リンク
第1回 マイコンは"アドレスの世界" 2026/02/20 準備中
第2回 メモリ地図を読む(Flash/RAM/Stack/Heap) 2026/02/27 準備中
第3回 Cはメモリをどう表現するか 2026/03/06 準備中
第4回 ビットの世界(レジスタ操作の作法) 2026/03/13 準備中
第5回 ポインタ=住所(型付きアドレス) 2026/03/20 準備中
第6回 ポインタ事故大全(なぜ壊れる?) 2026/03/27 準備中

Phase 2: 時間の世界

タイトル 公開日 リンク
第7回 時間の世界(計測文化の入り口) 2026/04/03 準備中
第8回 割り込みとは何か(NVIC/ベクタ/怖さ) 2026/04/10 準備中
第9回 割り込み設計アンチパターン集【超重要】 2026/04/17 準備中

Phase 3: システムを支配する技術

タイトル 公開日 リンク
第10回 DMAという発想(CPUを暇にする) 2026/04/24 準備中
第11回 リンカスクリプトとmapファイル(裏側を見る) 2026/05/01 準備中
第12回 最適化とアセンブラ(そしてつよつよへ) 2026/05/08 準備中

📌 更新情報
新しい記事が公開されたら、このページも随時更新します。ブックマーク推奨!


対象読者

✅ こんな方におすすめ

  • Arduino経験者 で「内部動作を知りたい」と思っている
  • C言語の基礎 は学んだが、ポインタで挫折した
  • 「Lチカはできるけど、なぜ動くか分からない」 と感じている
  • 組み込みの"思想" を理解したい
  • データシートを読めるようになりたい
  • 壊れ方を知って強くなりたい

前提知識

以下の知識があると、よりスムーズに学習できます:

項目 必要レベル 補足
C言語 ⭐⭐☆☆☆ 変数・関数・if文が書ければ十分
Arduino ⭐⭐☆☆☆ Lチカ経験があれば可(なくても大丈夫)
電子回路 ⭐☆☆☆☆ LEDが光る理由が何となく分かるレベル
ポインタ ❌ 不要 この連載で腹落ちさせます

ℹ️ ポインタに自信がない方へ
むしろそれが理想的なスタート地点です。第5回で「ポインタ=住所(型付きアドレス)」という本質を理解すれば、すべてが繋がります。


必要な機材

全連載で使用する機材は以下の通りです:

🔌 必須機材

機材 型番/仕様 予算 購入先
STM32開発ボード NUCLEO-F401RE 約1,500〜2,000円 秋月電子, Digi-Key, Mouser
USBケーブル Micro-USB Type-B 〜500円 家にあるもので可
ブレッドボード 標準サイズ 〜500円 秋月電子
ジャンパ線 オス-オス、オス-メス 〜300円 秋月電子
LED・抵抗 各種(赤・緑LED、330Ω抵抗) 〜300円 手持ちで可

合計:約3,000円

💡 なぜNUCLEO-F401REなのか?

  • ST-Link/V2-1内蔵:USB接続だけで開発可能
  • Arduinoコネクタ互換:既存のシールドも使える
  • 84MHz Cortex-M4:高速で実行時間の計測に最適
  • 公式サポート:STマイクロの完全サポート
  • 拡張性:Morphoコネクタで全ピンアクセス可能

Blue Pillより若干高価ですが、配線ミス・偽物・書き込み失敗のリスクがゼロ です。

🛠️ 開発環境(無料)

  • STM32CubeIDE(STマイクロエレクトロニクス公式)
    • Eclipse ベースの統合開発環境
    • デバッガ・ビルド・書き込みがすべて完結
    • Windows/Mac/Linux 対応
  • STM32CubeMX(CubeIDEに統合済み)
    • ピン配置・クロック設定のGUIツール
    • 初期化コード自動生成(本連載では最小限のみ使用)

インストール方法は第1回で詳しく解説します。

HALライブラリの扱い方針

この連載では、HAL(Hardware Abstraction Layer)は最小限 にします:

  • CubeMX/CubeIDEで"土台だけ作る"(クロック設定、ピン初期化のみ)
  • 操作は原則レジスタ直接(CMSISレベル)
  • HALでやる場合は「比較枠」 として各回末尾で簡単に紹介

理由:レジスタを直接触ることで、アドレス・ビット・時間の感覚が身につく からです。


連載スケジュール(全13回:第0回+第1〜12回)

第0回:この連載で何を手に入れるか【思想回】

目的: 読者の"構え"を作る

  • 組み込みは 「空間・時間・電気」 を相手にする世界
  • OSが守ってくれない 世界での戦い方
  • この連載のゴール:つよつよになるための思考回路
  • 使用環境の紹介:NUCLEO-F401 + CubeIDE + HAL最小 + GitHub公開

実践: なし(思想回)

予定公開日: 2026年2月13日


Phase 1: 空間の世界(第1〜6回)

組み込みは 「アドレス」という座標系 で世界を見ます。変数もレジスタも、すべて「場所」です。

📘 第1回:マイコンは"アドレスの世界"

目的: 世界観の核心を最速で渡す

  • CPUは 状態機械、メモリから命令を読む
  • アドレスだけが現実
  • 周辺機器もメモリ空間にいる(メモリマップI/Oの前振り)

実践: デバッガでメモリ/レジスタを覗く

予定公開日: 2026年2月20日


📘 第2回:メモリ地図を読む(Flash/RAM/Stack/Heap)

目的: 空間感覚を植える

  • FlashRAM の役割
  • StackHeap の正体
  • なぜスタックは怖いか(前振り)

実践: スタックポインタ観察、ローカル変数の配置を見る

予定公開日: 2026年2月27日


📘 第3回:Cはメモリをどう表現するか

目的: Cが"組み込みに向く理由"を腑に落とす

  • 変数=メモリ
  • 配列=連続
  • 構造体=レイアウト
  • volatile の意味(伏線)

実践: アドレスを表示して確認(printf or watch)

予定公開日: 2026年3月6日


📘 第4回:ビットの世界(レジスタ操作の作法)

目的: レジスタは"ビット集合"だと腹落ちさせる

  • マスク/シフト
  • RMW(Read-Modify-Write)問題
  • BSRR の思想(STM32の美しい設計)

実践: GPIOをレジスタ直叩きでLチカ(BSRR推奨)

予定公開日: 2026年3月13日


📘 第5回:ポインタ=住所(型付きアドレス)

目的: ポインタを怖がらせず、武器にする

  • 型付きアドレス という本質
  • キャストの意味
  • メモリマップI/Oに繋がる瞬間

実践: GPIOレジスタをポインタで触る(CMSIS寄りで)

予定公開日: 2026年3月20日


📘 第6回:ポインタ事故大全(なぜ壊れる?)

目的: “壊れ方"を知って強くなる

  • NULL デリファレンス
  • ダングリングポインタ
  • スタック寿命(ローカル変数のアドレスを返す)
  • 配列外アクセス
  • UB(未定義動作)
  • 最適化で悪化する例(伏線)

実践: 壊すコード+デバッガで観察

予定公開日: 2026年3月27日


Phase 2: 時間の世界(第7〜9回)

組み込みは 「時間を支配する技術」 です。クロック・周期・割り込み・計測――すべてが時間軸上の戦いです。

📗 第7回:時間の世界(計測文化の入り口)

目的: 組み込みを"リアルタイム"として理解する

  • クロック/周期
  • 実行時間
  • 計測しないと議論できない

実践: GPIOトグルで時間測定/DWT CYCCNT 導入

予定公開日: 2026年4月3日


📗 第8回:割り込みとは何か(NVIC/ベクタ/怖さ)

目的: 時間支配の鍵を渡す

  • ベクタテーブル
  • NVIC(Nested Vectored Interrupt Controller)
  • コンテキスト保存
  • 共有変数問題(伏線)

実践: TIM割り込みで周期イベント生成

予定公開日: 2026年4月10日


📗 第9回:割り込み設計アンチパターン集【超重要】

目的: つよつよの分水嶺

  • ISRで重い処理をする
  • printfする(致命的)
  • 共有変数を雑に触る
  • 優先度地獄
  • クリティカルセクションの誤用
  • volatile 乱用/不足

実践: アンチパターンを"わざと"やって壊す

予定公開日: 2026年4月17日


Phase 3: システムを支配する技術(第10〜12回)

空間と時間を理解したら、最後は 「システム全体を支配する技術」 です。

📙 第10回:DMAという発想(CPUを暇にする)

目的: 時間支配の上位概念へ

  • CPUがやらなくていい仕事
  • スループット vs レイテンシ
  • バス競合の直感

実践: UART送信をDMA化(リングバッファと合わせる)

予定公開日: 2026年4月24日


📙 第11回:リンカスクリプトとmapファイル(裏側を見る)

目的: メモリの"配置"を支配する

  • .text / .data / .bss
  • 初期化処理の正体
  • mapファイルの読み方
  • スタック/ヒープの置き方

実践: mapでRAM消費を追う/サイズ削減の例

予定公開日: 2026年5月1日


📙 第12回:最適化とアセンブラ(そしてつよつよへ)

目的: Cが"どう機械語になるか"を知る

  • -O0 / -O2 で何が変わる
  • volatile 再確認
  • 生成コードを見る習慣
  • つよつよの条件まとめ

実践: objdumpで比較、想定外の最適化例

予定公開日: 2026年5月8日


学習の進め方

週1回のペースで無理なく

各回の想定学習時間は 2〜3時間。週末に1回ずつ進めれば、3ヶ月で完走できます。

2月 |████░░░░░░░░| Phase 0-1 開始(思想+空間)
3月 |████████░░░░| Phase 1 完了
4月 |████████████| Phase 2 完了(時間の世界)
5月 |██░░░░░░░░░░| Phase 3 完了(システム支配)

「壊すコード」で強くなる

「動くコード」より「壊れるコード」 を重視します。

  • 第6回:ポインタ事故を"わざと"起こす
  • 第9回:割り込みアンチパターンを実装して壊す

壊れ方を知ることが、最強の学習法 です。

実機での動作確認が最優先

理論よりも 「手を動かして確認する」 ことを最重視します。

  • デバッガでメモリを覗く
  • DWT CYCCNTで実行時間を測る
  • mapファイルでRAM消費を追う
  • objdumpで生成コードを見る

計測しないと議論できない――これが組み込みエンジニアの鉄則です。

GitHub で全コード公開

各回のサンプルコードは、GitHubリポジトリで公開予定です:

📁 リポジトリ: https://github.com/ramtuc/stm32-embedded-series
(第0回公開時にリンク有効化)

各回のフォルダに、完動するプロジェクトファイル一式と 「壊すコード」 を格納します。


よくある質問

Q1: Arduinoより難しいですか?

A: 最初は「覚えることが多い」と感じます。でも本質は 「Arduinoが隠していたことを見るだけ」 です。第4回以降は、レジスタを直接叩く爽快感が味わえます。

Q2: ポインタが苦手ですが大丈夫ですか?

A: むしろ歓迎します。 この連載のゴールの一つは、「ポインタ=住所(型付きアドレス)」という本質を理解することです。第5回で完全に腹落ちします。

Q3: Blue PillやSTM32F103でも大丈夫ですか?

A: 基本的には可能ですが、NUCLEO-F401RE を強く推奨 します。理由:

  • ST-Link内蔵(配線不要)
  • 84MHz(実行時間計測に最適)
  • 公式サポート(偽物なし)

Blue Pillは偽物が多く、デバッグで苦労します。

Q4: HALライブラリは使わないのですか?

A: 最小限のみ使います。 CubeMXでクロック設定・ピン初期化だけ行い、あとは レジスタ直接操作 が基本です。理由:

  • アドレス・ビット・時間の感覚が身につく
  • データシートを読む力がつく
  • 他のマイコンにも応用できる

各回の末尾で「HAL版の実装例」を簡単に紹介します。

Q5: 仕事で使えるレベルになりますか?

A: この連載で 「つよつよエンジニアの思考回路」 は身につきますが、プロとして通用するには 実務経験が不可欠 です。ただし、以下の壁は越えられます:

  • データシートが読めない → 読める
  • レジスタが怖い → 武器になる
  • ポインタで挫折 → 本質を理解
  • 割り込みが分からない → 設計できる

「未経験者」から「経験者」への壁 を超えるには十分な内容です。

Q6: 英語が苦手ですが大丈夫ですか?

A: データシートは英語ですが、必要な箇所を 図解+日本語で徹底解説 します。ページ番号も明記するので、「どこを読めばいいか」が明確です。


著者について

RAM / ElectroRam Studio

  • 専門: 組み込みシステム開発、IoTデバイス設計
  • 経験: 産業機器・医療機器の組み込みソフトウェア開発
  • 活動: 電子工作記事執筆、技術同人誌、Booth での基板販売

🌐 公式サイト: https://electwork.net
🛒 Boothショップ: ElectroRam Studio
📧 お問い合わせ: Contact Form


サポート・コミュニティ

質問・フィードバック

連載に関する質問や改善要望は、以下で受け付けています:

  • GitHubのIssue:技術的な質問・バグ報告
  • Twitterメンション@RamTuckey
  • お問い合わせフォームContact Page

ハッシュタグ

SNSでの投稿には #STM32組み込み連載 をつけて共有してください!みんなの進捗や作品を見るのを楽しみにしています。


さあ、始めよう

「Arduinoの先」 には、無限の可能性が広がっています。

  • 製品レベルの性能を持つデバイス
  • 1年以上動作するバッテリー駆動システム
  • リアルタイム制御が求められるロボット

これらを自分の手で作れるようになる――それが、この連載のゴールです。

第1回は2月20日公開予定。 ぜひブックマークして、一緒に学びましょう!

📚 次回予告

第0回「この連載で何を手に入れるか【思想回】」
組み込みは「空間・時間・電気」を相手にする世界。
OSが守ってくれない世界で、どう戦うか?
つよつよになるための"構え"を作ります。

📅 公開予定: 2026年2月13日(木)


それでは、ポインタの先にある組み込みの世界 でお会いしましょう!

See You in the Embedded World …