1 STM32 基礎知識の概要#
1.1 STM32 の紹介#
STM32 は ST 社が ARM Cortex-M コアを基に開発した 32 ビットマイクロコントローラです
MはMicrocontrollerの意味です
STM32 は組み込み分野でよく使用され、例えばスマートカー、ドローン、ロボット、無線通信、IoT、産業制御、エンターテインメント電子製品などに利用されます
STM32 は機能が強力で、性能が優れており、オンチップリソースが豊富で、消費電力が低く、クラシックな組み込みマイクロコントローラです

1.2 ARM の紹介#
ARM は ARM 社を指すだけでなく、ARM プロセッサコアも指します
ARM 社は世界をリードする半導体知的財産(IP)プロバイダーであり、全世界の 95% 以上のスマートフォンとタブレットが ARM アーキテクチャを採用しています
ARM 社は ARM コアを設計し、半導体メーカーがコア周辺回路を完成させ、チップを生産します


1.3 STM32F103C8T6 の紹介#
シリーズ:主流シリーズ STM32F1
コア:ARM Cortex-M3
主周波数:72MHz
RAM:20K(SRAM)
ROM:64K(Flash)
供給電圧:2.0~3.6V(標準 3.3V)
パッケージ:LQFP48

1.4 オンチップリソース / 周辺機器(Peripheral)#
STM32 は FreeRTOS、UCOS などのオペレーティングシステムを追加できます。これらのオペレーティングシステムを使用する場合、SysTickがタスク切り替え機能のためのタイミングを提供する必要があります。
UARTは非同期シリアルポートを意味し、STM32のUSARTは非同期シリアルポートと同期シリアルポートの両方をサポートしていますが、非同期シリアルポートが比較的多く使用されます
| 英語略語 | 名称 | 英語略語 | 名称 |
|---|---|---|---|
| NVIC | ネストベクタ割り込みコントローラ | CAN | CAN 通信 |
| SysTick | システムティックタイマー | USB | USB 通信 |
| RCC | リセットとクロック制御 | RTC | リアルタイムクロック |
| GPIO | 汎用 IO ポート | CRC | CRC チェック |
| AFIO | マルチファンクション IO ポート | PWR | 電源制御 |
| EXTI | 外部割り込み | BKP | バックアップレジスタ |
| TIM | タイマー | IWDG | 独立ウォッチドッグ |
| ADC | アナログ - デジタルコンバータ | WWDG | ウィンドウウォッチドッグ |
| DMA | ダイレクトメモリアクセス | DAC | デジタル - アナログコンバータ |
| USART | 同期 / 非同期シリアル通信 | SDIO | SD カードインターフェース |
| I2C | I2C 通信 | FSMC | フレキシブル静的メモリコントローラ |
| SPI | SPI 通信 | USB OTG | USB ホストインターフェース |
1.5 チップ命名規則#

1.6 システム構造#
Cortex-M3コアは 3 つのバスを引き出します。ICode命令バス、DCodeデータバス、Systemシステムバス
ICodeバスとDCodeバスは主にFlashフラッシュメモリを接続するために使用されます
Flashには私たちが書いたプログラムが保存されています
ICode命令バスはプログラム命令をロードするために使用されます
DCodeデータバスはデータをロードするために使用されます。例えば、定数やデバッグデータなどです
SystemシステムバスはSRAM、FSMCに接続されています
SRAMはプログラム実行時の変数データを保存するために使用されます
AHBシステムバスは主要な周辺機器を接続するために使用されます。AHB はアドバンストハイパフォーマンスバスの略で、接続されるのは一般的に最も基本的または性能が高い周辺機器です。例えば、リセットとクロック制御などの最も基本的な回路、またSDIOもAHBに接続されています
APB1とAPB2の 2 つの周辺バスがあります。APBはアドバンスト周辺バスの略で、一般的な周辺機器を接続するために使用されます。
AHBとAPBのバスプロトコル、バス速度、データ転送形式の違いにより、中間に 2 つのブリッジを追加してデータの変換とキャッシュを行う必要があります。AHBの全体的な性能はAPBよりも高く、APB2の性能はAPB1の性能よりも高いです。APB2は一般的にAHBと同じ周波数で、どちらも 72MHz です。APB1は一般的に 36MHz です。したがって、APB2に接続されるのは一般的に周辺機器の中でやや重要な部分です。例えば、GPIOポートやいくつかの周辺機器の 1 号選手(USART1、SPI1、TIM1、TIM8など)、TIM8とTIM1は同様に高級タイマーであり、重要な周辺機器です。ADC、EXTI、AFIOもAPB2に接続されています。他の 2、3、4、5 号周辺機器、DAC、PWR、BKP などのやや重要度が低い周辺機器はAPB1に割り当てられます。もちろん、使用時には個人は一般的にAPB2とAPB1の性能差を感じることはなく、どの周辺機器がどのバスに接続されているかを知っていれば十分です
DMAは CPU の小さな秘書のように機能します。例えば、大量のデータを移動させる作業は、CPU にやらせるのは時間の無駄です。DMAは主にこれらの単純で繰り返し行う必要がある作業を行います。DMAはDMAバスを介してバスマトリックスに接続され、CPU と同じバス制御権を持ち、これらの周辺機器にアクセスします。データをDMAで移動する必要があるとき、周辺機器はリクエストラインを介してDMAリクエストを送信し、DMAはバス制御権を取得し、データにアクセスして転送します。このプロセス全体に CPU の参加は必要なく、CPU の時間を他の作業に使うことができます

1.7 ピン定義#
赤色は電源関連のピンです
青色は最小システム関連のピンです
緑色は IO ポート、機能ポートなどのピンです
Sタイプは電源を表します
Iタイプは入力を表します
Oタイプは出力を表します
IOタイプは入力出力を表します
FTはこのピンが5Vの電圧に耐えられることを示し、FTがないものは3.3Vの電圧にしか耐えられません
STM32内部は分割電源方式を採用しており、電源ピンが多く、使用時にはVSSはすべてGNDに接続し、VDDはすべて3.3Vに接続します
STM32はSWDとJTAGの 2 つのデバッグ方式をサポートしています
SWDは 2 本の線が必要で、それぞれSWDIOとSWCLKです
JTAGは 5 本の線が必要で、それぞれJTMS、JTCK、JTDI、JTDO、NJTRSTです
STLINKはSWD方式を使用してデバッグプログラムをダウンロードするため、PA13とPA14の 2 つのIOポートのみを占有します
SWD方式でダウンロードする際、PA15、PB3、PB4は通常のIOポートとして使用するために切り替えることができますが、プログラム内で設定する必要があります。設定しない場合、デフォルトでは IO ポートとして使用されません


| ピン番号 | ピン名 | ピン定義 | 主機能 |
|---|---|---|---|
| 1 | VBAT | 予備バッテリー供給ピン。このピンには 3V バッテリーを外付けでき、システム電源が切れたとき、予備バッテリーが内部の RTC クロックとバックアップレジスタに電源を供給します | VBAT |
| 2 | PC13-TAMPER-RTC | I/O ポートまたは侵入検知または RTC。IO ポートはプログラムに応じて高低レベルを出力または読み取ることができ、侵入検知はセキュリティ機能に使用でき、RTC は RTC キャリブレーションクロック、RTC アラームパルスまたは秒パルスを出力するために使用できます | PC13 |
| 3、4 | PC14-OSC32_IN/PC15-OSC32_OUT | IO ポートまたは 32.768KHz の RTC クリスタルを接続 | PC14/PC15 |
| 5、6 | OSC_IN/OSC_OUT | システムの主クリスタルを接続します。一般的には 8MHz で、チップ内部には位相同期回路があり、この 8MHz の周波数を倍増して最終的に 72MHz の周波数を生成し、システムの主クロックとして使用します | OSC_IN/OSC_OUT |
| 7 | NRST | システムリセットピン。N は低レベルリセットを示します | NRST |
| 8,9 | VSSA/VDDA | 内部アナログ部分の電源。例えば ADC、RC オシレータなど。VSS は負極が GND に接続され、VDD は正極が 3.3V に接続されます | VSSA/VDDA |
| 10 | PA0-WKUP | IO ポート兼 WKUP 機能。待機モードの STM32 をウェイクアップできます | PA0 |
| 11-19 | PA1、PA2、PA3、PA4、PA5、PA6、PA7、PB0、PB1 | IO ポート | PA1-PB1 |
| 20 | PB2 | IO ポートまたは BOOT1 ピン。BOOT ピンは起動モードを設定するために使用されます | PB2/BOOT1 |
| 21,22 | PB10、PB11 | IO ポート | PB10,PB11 |
| 23,24 | VSS_1/VDD_1 | システム主電源口。VSS は負極、VDD は正極 | VSS_1/VDD_1 |
| 25-33 | PB12、PB13、PB14、PB15、PA8、PA9、PA10、PA11、PA12 | IO ポート | PB12、PB13、PB14、PB15、PA8、PA9、PA10、PA11、PA12 |
| 34 | PA13 | IO ポートまたはデバッグポート | JTMS/SWDIO |
| 35,36 | VSS_2/VDD_2 | システム主電源口。VSS は負極、VDD は正極 | VSS_2/VDD_2 |
| 37-40 | PA14/PA15/PB3/PB4 | IO ポートまたはデバッグポート(デバッグとプログラムダウンロード用) | JTCK_SWCLK/JTDI/JTDO/NJTRST |
| 41-43 | PB5/PB6/PB7 | IO ポート | PB5/PB6/PB7 |
| 44 | BOOT0 | BOOT1 と同様に起動設定に使用されます | BOOT0 |
| 45,46 | PB8/PB9 | IO ポート | PB8/PB9 |
| 47,48 | VSS_3/VDD_3 | システム主電源口。VSS は負極、VDD は正極 | VSS_3/VDD_3 |
1.8 起動設定#
起動設定の目的はプログラムの実行開始位置を指定することです。一般的にプログラムはフラッシュプログラムストレージから実行されますが、特定の状況下ではプログラムを他の場所から実行させて特別な機能を達成することもできます
BOOT1=0 BOOT0=1 モードはシリアルポートダウンロード用で、システムメモリにはSTM32内の一部のBootLoaderプログラムが保存されています。BootLoaderプログラムの役割はシリアルポートからデータを受信し、それを主フラッシュメモリに書き込むことです。これにより、シリアルポートを使用してプログラムをダウンロードできるようになります。一般的に、シリアルポートでプログラムをダウンロードする必要があるときは、このモードに設定します
BOOT0=0 の起動モードは主フラッシュストレージモードで、主フラッシュストレージが起動領域として選択され、この時フラッシュメモリ内のプログラムが正常に実行されます。このモードは最も一般的なモードで、通常はこの設定が使用されます
BOOT1=1 BOOT0=1 の設定はSRAM起動で、このモードは主にプログラムデバッグに使用され、現段階ではあまり使用されていません
BOOTピンの値は電源投入リセットの瞬間に有効で、その後は自由に設定できます

1.9 最小システム回路#
OSC32は 32.768KHz クリスタルを意味し、32768 は 2 の 15 乗です。内部 RTC 回路は 2 の 15 乗で分周することで 1 秒の時間信号を生成できます。

RTCクリスタルは 32.768KHz クリスタルです
