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 クリスタルです