107 lines
3.1 KiB
C
107 lines
3.1 KiB
C
#include "mcu_init.h"
|
||
|
||
static void GPIO_CLK_Init(void);
|
||
|
||
void board_init(void)
|
||
{
|
||
HAL_Init();
|
||
GPIO_CLK_Init();
|
||
/* 配置系统时钟为180 MHz */
|
||
SystemClock_Config();
|
||
/* 初始化RGB彩灯 */
|
||
LED_GPIO_Config();
|
||
/*初始化USART 配置模式为 115200 8-N-1,中断接收*/
|
||
DEBUG_USART_Config();
|
||
}
|
||
|
||
/**
|
||
* @brief 系统时钟配置
|
||
* System Clock source = PLL (HSE)
|
||
* SYSCLK(Hz) = 180000000
|
||
* HCLK(Hz) = 180000000
|
||
* AHB Prescaler = 1
|
||
* APB1 Prescaler = 4
|
||
* APB2 Prescaler = 2
|
||
* HSE Frequency(Hz) = 25000000
|
||
* PLL_M = 25
|
||
* PLL_N = 360
|
||
* PLL_P = 2
|
||
* PLL_Q = 7
|
||
* VDD(V) = 3.3
|
||
* Main regulator output voltage = Scale1 mode
|
||
* Flash Latency(WS) = 5
|
||
* @param 无
|
||
* @retval 无
|
||
*/
|
||
void SystemClock_Config(void)
|
||
{
|
||
RCC_ClkInitTypeDef RCC_ClkInitStruct;
|
||
RCC_OscInitTypeDef RCC_OscInitStruct;
|
||
|
||
/* Enable Power Control clock */
|
||
__HAL_RCC_PWR_CLK_ENABLE();
|
||
|
||
/* 使能HSE,配置HSE为PLL的时钟源,配置PLL的各种分频因子M N P Q
|
||
* PLLCLK = HSE/M*N/P = 25M / 25 *432 / 2 = 216M
|
||
*/
|
||
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
|
||
|
||
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
|
||
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
|
||
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
||
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
|
||
RCC_OscInitStruct.PLL.PLLM = 25;
|
||
RCC_OscInitStruct.PLL.PLLN = 360;
|
||
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
|
||
RCC_OscInitStruct.PLL.PLLQ = 7;
|
||
if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
|
||
{
|
||
while(1) {}
|
||
}
|
||
|
||
/* 激活 OverDrive 模式 */
|
||
HAL_PWREx_EnableOverDrive();
|
||
|
||
/* 选择PLLCLK作为SYSCLK,并配置 HCLK, PCLK1 and PCLK2 的时钟分频因子
|
||
* SYSCLK = PLLCLK = 180M
|
||
* HCLK = SYSCLK / 1 = 180M
|
||
* PCLK2 = SYSCLK / 2 = 90M
|
||
* PCLK1 = SYSCLK / 4 = 45M
|
||
*/
|
||
RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
|
||
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
|
||
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
|
||
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
|
||
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
|
||
if(HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
|
||
{
|
||
while(1) {}
|
||
}
|
||
|
||
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
|
||
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
|
||
/* SysTick_IRQn interrupt configuration */
|
||
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
|
||
}
|
||
|
||
|
||
/**
|
||
* @brief GPIO Initialization Function
|
||
* @param None
|
||
* @retval None
|
||
*/
|
||
static void GPIO_CLK_Init(void)
|
||
{
|
||
|
||
/* GPIO Ports Clock Enable */
|
||
__HAL_RCC_GPIOH_CLK_ENABLE();
|
||
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||
__HAL_RCC_GPIOG_CLK_ENABLE();
|
||
__HAL_RCC_GPIOI_CLK_ENABLE();
|
||
}
|
||
|
||
|
||
|