参考にしたのは以下の記事です。
「ガレスタさんのDIY日記」さんの「STM32のMCO機能を使ってGPIOからクロックを出してみる」
「Thomas Rix」さんの「Configuring & measuring the MCO on STM32」
STM32CubeMXとAtollic TrueSTUDIOは、以前「STM32CubeMX + Atollic TRUEStudioでLチカ」で動作させています。
STM32CubeMXでコードを生成
「Pinout & Configuration」で、「RCC」の「Master Clock Output1」と「Master Clock Output2」を有効化します。「Master Clock Output2」は「I2S_CKIN」とピンがかぶるらしく、アラートが出ますが今回はI2Sを使わないので無視しました。
「Pinout view」に
- PA8 RCC_MCO_1
- PC9 RCC_MCO_2
が現れます。
「Clock Configuration」で出力するクロック・ソースを指定します。
赤枠で囲ったところがMCOの設定です。SYSCLK(84MHz)をそのまま出力したかったのですが、オシロスコープの帯域外の様でクロック信号を測定できなかったので「/2」して42MHzを出力しました。
ch1:D9/PA8(MCO1) ch2:PC9(MCO2)
使っているオシロスコープはOWON SDS7102で、仕様では100MHz帯域となっていますが、84MHzの信号は測定できませんでした。
84MHzのSYSCLKをMCO2に出力
ch2:PC9(MCO2)
Nucleo-F446REは最大180MHzで動作しますが、分周して確認するしかないのかな(@@?
Atollic TrueSTUDIOでNucleoに書き込み
CubeMXで生成されたコードそのままでも動作しますが、動作確認のため一応メインループでLチカさせました。
/* Infinite loop */void SystemClock_Config(void)関数内で
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_Delay(100);
HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_SET);
HAL_Delay(100);
HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_RESET);
/* USER CODE END WHILE */
HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_PLLCLK, RCC_MCODIV_2);と、それらしいHALが呼ばれています。
HAL_RCC_MCOConfig(RCC_MCO2, RCC_MCO2SOURCE_SYSCLK, RCC_MCODIV_1);
メモ:
「Atollic TrueSTUDIO for STM32」と「System Workbench for STM32」を同じパソコンにインストールしているとSTM32CubeMXとの連携が怪しくなります。同じEclipseベースのIDEのためでしょうか?CubeMXやTrueSTUDIOを最新版にアップデートするなどしているうちにうまく動作するようになりました。
TrueSTUDIO上で「デバッグ(ツールバーの虫のアイコン)」を開始したあと、デバッグパースペクティブで「再開(ツールバーの|>みたいなアイコン)」を押さないとターゲットボード上のプログラムが実行されない。
0 件のコメント:
コメントを投稿