ARMマイコンSTM32F1シリーズのペリフェラルライブラリ

マイコンのペリフェラル

めかのとろ

仕様書にある周辺機能(ペリフェラル)の制御レジスタを簡単に設定できるようなドライバペリフェラルライブラリです。これ以降、実際に当サイトでとりあげるマイコンをもとに具体的な解説をすすめていきます。以後周辺機能はペリフェラルと呼びます

めかのとろ

ターゲットマイコンのモデルタイプはARM Cortex-M3マイコンのSTM32F103RBです。STM32F103RBマイコンの仕様表を示します。このマイコンはシリーズのミディアムパフォーマンスラインモデルです。

STM32F103RB仕様
めかのとろ

STM32F103RBマイコン内部は複雑ですが、簡略化すると下図のブロック図のようになります。

簡易ブロック図
めかのとろ

CPUとメモリ類はAHB(高速転送バス)で接続されており、一方ペリフェラルはAPB(高機能周辺回路バス)で接続されています。APB(Advanced Peripheral Bus)はAPB1とAPB2の2つに分けられており、APB1には低速なペリフェラルが接続されており、APB2には高速なペリフェラルが接続されています。

めかのとろ

ペリフェラルは使用する機能だけ選択してONにし、使用しない機能はOFFにすることで消費電力を押さえることができます

めかのとろ

ピン配置を下図に示します。図の見方ですが、左下PA1(15)のピンはGPIOのポートAの1番目、つまりGPIOA_1を意味します。PA1のピンには汎用入出力以外にも複数の機能を共有しています。設定の仕方は後ほど詳しく説明します。

ピン配置
複数の機能
めかのとろ

ARMマイコンが性能の割に消費電力が低いのは使っていない部分をきめ細かくOFFできるからです。
各ペリフェラルは個々にON/OFFの切り替え設定ができます。これは自動で行われるのでなくプログラム作成時に機能選択します。 

ポイント

各ペリフェラルの機能をON/OFFといってもスイッチで行うわけではなく、クロックの供給の有無により機能させるかさせないかを設定します。クロックが供給されなければほとんどのペリフェラル(周辺機能)は動作しません。 

SPL(Standard Peripheral Libraries)

めかのとろ

総合開発環境でライブラリは下図のように収められています。このうち「CMSIS」フォルダはARMマイコンコア用のライブラリです。基本的に操作することはないと思います。

めかのとろ

このフォルダツリーで「STM32F10x_StdPeriph_Driver」フォルダ以下のファイルが各ペリフェラルのライブラリ群でSPL(Standard Peripheral Libraries)です。内容を確認してみるとライブラリ内にはC言語で記述された関数が機能設定ごとに複数定義されています。この関数が制御レジスタを操作しており、関数に与えるパラメータがマイコンのもつ各ペリフェラルの設定値となるのです。

めかのとろ

名称がSTM32F10x_なのでこのライブラリはSTM10xシリーズマイコンが対象であることを意味しています。STM32F4シリーズなど仕様の異なるマイコンには使用できずその都度仕様にあったプロジェクトを新規作成して相当のライブラリを使用する必要があります。

ペリフェラルライブラリ
めかのとろ

ペリフェラルライブラリのファイルを以下の表に示しますがとりわけよく使われるものを太字で示しています。使用するペリフェラルのライブラリの本体はstm32f10x_xxxx.cとヘッダファイルstm32f10x_xxxx.hで関数が機能設定ごとに定義されています。

めかのとろ

ペリフェラルライブラリの各種関数を呼び出すためにはstm32f10x.hをアプリプログラム内にインクルードしておく必要があります

めかのとろ

ペリフェラルライブラリにはペリフェラルごとに多くのヘッダファイルがありますが、それらはstm32f10x.hから呼び出されるようになっているため、stm32f10x.hをインクルードしておくだけでペリフェラルライブラリの機能全体を使用できます

めかのとろ

ヘッダファイルstm32f10x.h自体は「CMSIS」フォルダ以下「Device」-「ST」-「STM32F10x」-「Include」にあります。

めかのとろ

例えば、ライブラリの中でGPIOのヘッダファイルはstm32f10x_gpio.hでライブラリ本体はstm32f10x_gpio.cです。

搭載マイコンSTM32F1xxで使えるペリフェラルライブラリ

フローチャート

めかのとろ

ここで、ペリフェラルを使えるようにするためのフローチャートをGPIOAのPin1プッシュプル出力に設定する例で示します。ここでは設定の内容は理解できなくてもよいので流れを掴んでください。

めかのとろ

初期状態ではペリフェラルはOFF(クロックが供給されていない状態)なのでONにするためにクロックを供給します①。次に初期化変数に初期値を設定してから②、初期化を実行します③。ペリフェラルによっては、別途起動④やキャリブレーション⑤が必要となります。
こうして、ペリフェラルは初期化を終えた段階になってアプリケーションプログラム内で任意に使用できるようになります。

めかのとろ

初期化を設定してからクロックを供給しても設定は反映されません。
ペリフェラルの初期化変数はGPIOの場合はGPIO_InitTypeDef型の構造体変数で初期化を実行するGPIO_Init関数にパラメータを渡しています(②の部分)。GPIO_InitTypeDef型の構造体変数はライブラリstm32f10x_gpioのヘッダファイルstm32f10x_gpio.hの中で定義されています。

めかのとろ

他のペリフェラルも同様にライブラリの中で定義されています。ペリフェラルの中でもタイマなどは高機能のために、初期化変数は機能ごとのグループ数種類に分かれた構造体変数となっています。設定するパラメータも多種類にわたります。詳細は各ペリフェラルで解説します。

ペリフェラルを使えるようにするためのフローチャート
めかのとろ

ペリフェラルをONさせるにはクロックを供給することは前述しました。低速なペリフェラルにはバスAPB1が接続されて、高速なペリフェラルにはバスAPB2が接続されているため、ペリフェラルのクロック供給も対象のバスのもので行います。バスAPB1とAPB2に接続されているペリフェラルの定義されたマクロ名をそれぞれ下表にまとめました。

めかのとろ

各ペリフェラルはAPB1に属するものはRCC_APB1PeriphClockCmd関数APB2に属するものはRCC_APB1PeriphClockCmd関数を実行し、クロックを供給しON/OFFを設定します。”ENABLE”でON”DISABLE”でOFFとなります。

ペリフェラルAPB1
ペリフェラルAPB2

ペリフェラルライブラリまとめ

めかのとろ

各ペリフェラルの制御レジスタにはたくさんの機能が割り当てられています。例えば、GPIOでは入力と出力の仕様選択、入力の場合は扱う信号によりアナログ、プルアップ、プルダウン、デジタル電圧入力の4種類の信号仕様選択などがあります。

めかのとろ

制御レジスタはメモリの一種ですので各々設定するレジスタにはアドレスがあります。STM32マイコンでは32ビットのアドレスで、例えば、具体的にはGPIOAのピン1の入出力仕様を選択するレジスタはGPIOA_CRLでアドレスは0x40010800です。この特定されたアドレスのレジスタに上記の仕様機能が割り当てられていて、デジタル値の0(OFF)と1(ON)の組み合わせで指定するのです。

めかのとろ

マイコンはデジタルシステムで多数のスイッチを組み合わせて機能するものですので制御レジスタに0と1を書き込むことで仕様を選択できるのです。

ポイント

ペリフェラルライブラリ各制御レジスタに設定する一連の動作を「マクロ」としてコード化し関数としてブロック化したものですのでレファレンスマニュアルに記述されているレジスタのアドレスや機能詳細を意識することなく使うことができるとても便利なものです。

めかのとろ

必要な知識は各ペリフェラルライブラリの使い方だけですので入門者でも簡単にマイコンを使いはじめることができます。

めかのとろ

次章では実際にペリフェラルライブラリの中で行われている部分を解説しています。結構難解ですがマイコンの理解が深まりますので慣れてきたらチャレンジしてください。