늘 동영상을 검색하다가 168MHz 짜리 STM32F4 를 250MHz 로 오버클락킹해서 사용하는 것을 보았다.
또, 어떤 미친놈은 STM32F0xx 48MHz 를 100MHz로 ..!!
그래서 저도 해봤습니다.
STM32F411 100MHz 를 160MHz로 오버했는데, 됩니다.
아.. 혹시나해서 좀 더 올려 봤는데, 162MHz 까지도 되네요. 168MHz는 안되구요.
제가 오버한 방법은, 클럭을 올리기 좋게 CUBEMX에서 일단 셋팅합니다.
그런데, CUBEMX 에서 부터 오버를 하면 동작이 안되더군요. Warning 무시하고 컴파일러로 넘겼는데, 동작이 안되더라고요.
그래서 CUBEMX 에서는 오버하지 않고, 컴파일러로 넘겨서 소스코드의 설정을 고쳐야 합니다.
클럭이 변하는지 알기위해서 APB2 Timer Clock(=SYS CLK) 을 소스로 하는 TIM1 의 PWM 출력을 핀맵에서 Enable 시키고,
PWM 주기는 128MHz 에서 1ms 가 나오리라는 예상을 하고,
다음과 같이 설정합니다.
그리고 소스코드를 생성해서 컴파일러에서 코드를 수정합니다.
클럭 쪽을 100MHz 에서 160MHz 로 수정합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct; RCC_ClkInitTypeDef RCC_ClkInitStruct; /**Configure the main internal regulator output voltage */ __HAL_RCC_PWR_CLK_ENABLE(); __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); /**Initializes the CPU, AHB and APB busses clocks */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLM = 4; //RCC_OscInitStruct.PLL.PLLN = 100; //RCC_OscInitStruct.PLL.PLLN = 128; RCC_OscInitStruct.PLL.PLLN = 162; RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; RCC_OscInitStruct.PLL.PLLQ = 4; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } /**Initializes the CPU, AHB and APB busses clocks */ 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_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK) { Error_Handler(); } /**Configure the Systick interrupt time */ HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); /**Configure the Systick */ HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); /* SysTick_IRQn interrupt configuration */ HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); } | cs |
main() 소스 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration----------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* Configure the system clock */ SystemClock_Config(); /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_TIM1_Init(); MX_USART2_UART_Init(); /* USER CODE BEGIN 2 */ HAL_TIM_Base_Start(&htim1); HAL_TIM_OC_Start(&htim1,TIM_CHANNEL_1); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ } | cs |
다음은 100MHz 일 때와 160MHz 일때의 PWM 출력 파형 비교입니다. 확실히 빨라졌네요 ^^
다음은 클럭 차이에 따른 속도 변화 동영상입니다. 퍼왔습니다. ^^
[ 125, 168 ]
[ 200 , 250 ] Mhz
'STM32F4' 카테고리의 다른 글
[STM32F4xx] CAN 통신 테스트(ID_LIST) (4) | 2018.09.06 |
---|---|
[STM32F4xx] DAC DMA SINE Wave generator (참고 사이트) (0) | 2018.09.06 |
[STM32F4x9] DMA2D(Chrom-Art Accelerator) 는 어떻게/어디에 쓰는가? (0) | 2018.09.06 |
[STM32F4] U(S)ART RX DMA Receive (링크) (0) | 2018.09.06 |
[STM32F4xx] USB MSC 에서 파일 깨짐 현상 (0) | 2018.09.06 |