スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

NucleoのClock (2)

 前回に引き続きSTM32 Nucleo F401REのクロックについて調べてみました。F401のクロックツリーを見てください。
STM32F401_Clock_Tree.png
この図からわかるようにSTM32ではMCO (Microcontroller Clock Output)としてピンからクロックを出力することが出来ます。実際にはMCO1はPA8からMCO2はPC9ピンから出力されます。
 ちなみNucleoの場合はST-LINKとして使用されているマイコン (STM32F103CBT6) から出力されているこのMCO出力をターゲットマイコンのクロックとして使用しています。

そしてこれが実際にMCOからクロックを出力させるコードです。

/*
Copyright (c) 2014 DenshiKousakuSenka
This software is released under the MIT License.
http://opensource.org/licenses/mit-license.php
*/

#include "mbed.h"

int main()
{
HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSI, RCC_MCODIV_1);
HAL_RCC_MCOConfig(RCC_MCO2, RCC_MCO2SOURCE_HSE, RCC_MCODIV_1);

GPIO_InitTypeDef GPIO_InitStruct;

/*Configure GPIO pin : PA8 MCO1 */
__GPIOA_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_8;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
GPIO_InitStruct.Alternate = GPIO_AF0_MCO;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

/*Configure GPIO pin : PC9 MCO2*/
__GPIOC_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_9;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
GPIO_InitStruct.Alternate = GPIO_AF0_MCO;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

while(1) { }
}

はっきり言ってmbedである理由はまったくありません。
STM32CubeMXで雛形を作って必要な部分だけmbedのIDEにコピペして作成しました。11、12行目の引数を変更することで出力するクロックを変更することが出来ます。まだmbedのよさが伝わってこない・・・

次にこれが実際にピンからクロックを出力したときの波形です。
140917_SysClk_div4_HSE.png

測定しているオシロはこの中華オシロ

なのですが、100MHzまでしか測れません。F401REの場合、SystemClockは84MHzなので正確に測るためにはクロックを分周して出力する必要があります。ここでは1/4に落として出力しました。写真の左下に周波数が表示されています。

結局このオシロの波形から F401 Nucleo基板は
・HSEとして8MHzのクロックが入力されている。
・SystemCoreClockは84MHzで動作している。

ことがわかりました。バッチリです。

せっかくなので内蔵RC発信のクロック(HSI)も測ってみました。
140917_HSE_HSI.png
HSIは16.1MHzなので微妙に16MHzからずれています。仕様書によると±4%なので、こんなものでしょう。必要ならユーザーが校正も出来るので問題ないと思います。

というわけで無事入手した F401 Nucleoが84MHzで動作していることが確認できました。

よかったよかった。

コメントの投稿

非公開コメント

84MHz?

はじめまして、
stm32f401reを使って制御を考えています。
記事、拝見しております。

いくら、やってみてもMCO1は16MHz・・・・・84MHzになりません。
MCO2は8MHz出ます。
教えてください。

使用のボードはMB1136C-02です。

メールアドレス間違いました。

すみませんでした。先ほどのメールアドレス
間違ってしまいました。

こちらが正しいです。
よろしくお願いします。

Re: メールアドレス間違いました。

ご連絡ありがとうございます。

mbedとして使っているのでしょうか?
状況がよく分からないですが、HSIになっていないか確認されたでしょうか?

参考URLにあるはんとさんのコメントではHSIがデフォルトのときがあったようです。

管理人もあまり詳しくない素人なもので、もう少しヒントがほしいです・・・

よろしくお願いします。
検索フォーム
RSSリンクの表示
リンク
スポンサードリンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。