皆さま こんにちは。
今回は水晶とクロックとRTCについて簡単に説明をしていきます。
雑談っぽい話かも知れませんが、マイコン動作の肝になる部分ですからご存じない方には目を通しておいて欲しい内容です。
ローパワーでない STM32マイコンにも通じる話になっています。
私自身で得た知識で話をしていますので、誤りなどがあればご意見を頂ければと思います。
投稿時の開発環境を記しておきます。
PC:Windows10 OS
IDE: STM32CubeIDE Version1.3.0
Configurator: STM32CubeMX Version5.6.0
マイコン: STM32L010F4P6
Board: 自作のボード
RTC
まずRTCからです。
RTCはリアルタイムクロックの略称で時計の機能です。
ピン数の少ないSTM32マイコンでRTCを使う場合には気をつけなければならない点があります。
それは VBAT端子がマイコンにあるかどうか? です。
STM32L010F4P6(20ピン)には VBAT端子 がありません。
VBAT端子がない、ということは電源が切れるとRTCに電源が供給されず時刻情報を保持することができません。
ですから、もしこのマイコンを使ってRTC機能を使うのであればマイコンごと電池で動かすシステムを検討すべきだと思います。
そうしないと電源が切れた場合、再起動するたびに時刻合わせを行わなければならなくなります。
「それは仕様的にあり得ないでしょう」と思うのがその理由です。
STM32マイコンには VBAT端子があるものとないものが存在するので、RTCを使う場合には気をつけて選択しましょう。
水晶
次に水晶の話です。
今回、手づくりのボードを動かしていますが外部に水晶発振回路がありません。
それでは、なぜ外部に水晶発振回路がなくてもマイコンが動くのでしょうか?
STM32は高速と低速のクロックが存在します。
そして高速用のクロック源として外部と内部を選択することができるようになっています。
同様に低速用のクロック源として外部と内部を選択することができるようになっています。
どちらも外部を選択する場合に、外付けの水晶発振回路を用意する必要があります。
水晶がなくても動くのだから必要ないのでは? と思われる方がいらっしゃると思います。
ごもっともですね。
マイコンの内部にはRC発振回路があるので、コストを下げるために使われることが多いでしょう。
ただし、これは少し精度が悪いので精度を気にしなくて良い場合に使うことができます。
例えばUSBの機能がついているマイコンでUSBを使う場合には、それなりに精度が必要です。
それから温度変化によって発振周波数は変化するので、使う環境によっては外部の発振回路を検討する必要が出てくるでしょう。
その他にシリアル通信する相手の機器との周波数の誤差が大きいと通信エラーになる可能性が出てきますので、そのあたりも考慮する必要がありそうです。
外部発振子なしで、UART通信は可能ですか? の記事は参考になると思いますので、ぜひご覧になってください。
STマイクロからも UARTの誤差の計算方法 の資料が提供されています。
こちらもUARTの誤差の考え方についてわかりやすく解説されています。
話を少し戻しまして、、
STM32L010F4P6 マイコンの場合には、更に中速用のクロック源が存在します。
ご存じのように高速で動かすと電気を喰うわけですからローパワーマイコンの選択肢として中速用のクロックも用意した と私は理解しました。
クロックと系統図
IDEではクロックの系統図を見ることができ、ペリフェラルに与えるクロックの値を変更することができます。
以下はIDEで見たSTM32L010F4P6マイコンの Clock Configuration の図です。
台形のかっこうをした部分がセレクターで、左側のクロック源のどれを使うのか、ラジオボタン ◎ で選択できるようになっています。
もし選択できない場合には、それ以前の設定を見直す必要があります。
例えばこれまでの設定では、各端子を GPIO_Output に設定しているために、外部水晶を選択できないようになっています。
その他、 Pin & Configuration タブ – Categories – RCC のところで
High Speed Clock (HSE) にチェックを入れるとか、Low Speed Clock (LSE)のコンボボックスから対象を選ぶ必要があります。
このコンボボックスのリストには以下の項目があります。
それぞれ以下の場合に選択しなおす必要がありますので参考にしてください。
Disable : 使わない
BYPASS Clock Source : 水晶発振器を接続する場合
Crystal/Ceramic Resonator : 水晶振動子とコンデンザによる発振回路を接続する場合
図より、このマイコンの場合、初期値では MSI が選択されていて クロック周波数は 2.097MHz で動作していることがわかりました。
初期値が2MHzというのもローパワーを意識しての選択なのでしょう。
その他に低い周波数から高い周波数をつくる PLL があります。
STM32L010F4ではどんな周波数がつくれるのか、いろいろ触って試してみてください。
2Mでは少し遅いから、もう少し速い周波数を使いたい場合には HSI (16MHz) を使うことができます。
ローパワーである必要がない場合には、こちらを使っても良さそうです。
STM32L010F4P6の HSI および MSI の周波数誤差はそれぞれ データシートの Table36, 38 に載っています。
内部クロックを使うのであれば、これらを眺めながらどちらを使うのか選択するのも良いでしょう。
クロックの略称についてまとめておきます。Mはマルチなのですね。。
PLL以外はわかりやすいので覚えなくても理解できそうです^^
HSE : ハイスピード・エクスターナル
HSI : ハイスピード・インターナル
LSE : ロースピード・エクスターナル
LSI : ロースピード・インターナル
MSI : マルチスピード・インターナル
PLL : フェーズ・ロックド・ループ
今回は、やや雑談に近い内容でしたけれどお勉強になりましたでしょうか?
それでは次回はタイマー割り込みを使って Lチカ の動作を確認してみます。
お疲れさまでした。
コメントを書く