💡 この連載は「なんとなく動く」から卒業し、「なぜ動くか」を理解するための連載です。
この連載について
なぜ「ポインタの先」なのか?
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)
目的: 空間感覚を植える
- Flash と RAM の役割
- Stack と Heap の正体
- なぜスタックは怖いか(前振り)
実践: スタックポインタ観察、ローカル変数の配置を見る
予定公開日: 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 …