0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

STM32L010でオーバークロックの為に48MHzにする。 MCO出力 HAL

Last updated at Posted at 2021-11-03

xMbed2リビジョン143
x自己責任と言う意味が分かる人向け

o_con77.jpg

o_con78.jpg

目的
暇つぶし(全てで約30分程度の作業)(32MHz->48MHz)
クロック出力のテスト(STM32L010F4P6)

いろいろ
まず、オーバークロックで問題になるのは、フラッシュROMのリードが
ハマると予想した。高速な、CPUには、フラッシュROMのアクセスへの
様々なオプションがあるから?
だいたい、似たような製造プロセスで作られているので結構いけると予想した。
で、48Mhzで動いた。(わざわざ変えているとは、思えない)
魔法のスペルは、「RCC_PLLMUL_6」
みんなで叫ぶんだー
そもそもPLLてなんだ?周波数を倍にする物
X4をX6にしただけ。

高度に発展した科学は、魔法と区別が出来ない。とネットに書いてあった気がする。




/* STM32L010F6P6  -> Mbed NUCLEO-L011K4 program by caa45040 */

# include "mbed.h"

DigitalOut myled(PA_4);

//メインプログラム
int main()
{
    //クロックの初期化
    HAL_RCC_DeInit();

    // 32mz
    RCC_OscInitTypeDef RCC_OscInitStruct = {0};
    RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
    RCC_OscInitStruct.HSIState = RCC_HSI_ON;
    RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
    RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
    RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
    RCC_OscInitStruct.PLL.PLLMUL = RCC_PLLMUL_6;
    RCC_OscInitStruct.PLL.PLLDIV = RCC_PLLDIV_2;
    HAL_RCC_OscConfig(&RCC_OscInitStruct);
    RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
    RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                                  |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
    RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
    RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
    RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
    RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
    HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1);

    //PA9にSYSCLKを出力
    __HAL_RCC_GPIOA_CLK_ENABLE();
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    GPIO_InitStruct.Pin = GPIO_PIN_9;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    GPIO_InitStruct.Alternate = GPIO_AF0_MCO;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    HAL_RCC_MCOConfig(RCC_MCO2, RCC_MCO1SOURCE_SYSCLK, RCC_MCODIV_1);

    //無限ループ
    while(1) {

        myled = 1;
        wait(0.2);
        myled = 0;
        wait(0.2);

    }//while

}//main



0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?