H743应用笔记——系统初始配置:时钟配置,串口打印映射

  • 使用HAL库配置系统主频为480MHz
void Stm32_Clock_Init(int plln,int pllm,int pllp,int pllq)
{
    HAL_StatusTypeDef ret=HAL_OK;
    RCC_ClkInitTypeDef RCC_ClkInitStruct;
    RCC_OscInitTypeDef RCC_OscInitStruct;

    MODIFY_REG(PWR->CR3,PWR_CR3_SCUEN, 0);
    __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

    while ((PWR->D3CR & (PWR_D3CR_VOSRDY)) != PWR_D3CR_VOSRDY) {}

    //使能HSI48MHz给USB使用
    RCC_OscInitStruct.OscillatorType=RCC_OSCILLATORTYPE_HSI48|RCC_OSCILLATORTYPE_HSE;
    RCC_OscInitStruct.HSEState=RCC_HSE_ON;
    RCC_OscInitStruct.HSI48State=RCC_HSI48_ON;
    RCC_OscInitStruct.HSIState=RCC_HSI_OFF;
    RCC_OscInitStruct.CSIState=RCC_CSI_OFF;
    RCC_OscInitStruct.PLL.PLLState=RCC_PLL_ON;
    RCC_OscInitStruct.PLL.PLLSource=RCC_PLLSOURCE_HSE;

    RCC_OscInitStruct.PLL.PLLN=plln;
    RCC_OscInitStruct.PLL.PLLM=pllm;
    RCC_OscInitStruct.PLL.PLLP=pllp;
    RCC_OscInitStruct.PLL.PLLQ=pllq;

    RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE;
    RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_2;
    RCC_OscInitStruct.PLL.PLLFRACN = 0;
    ret=HAL_RCC_OscConfig(&RCC_OscInitStruct);
    if(ret!=HAL_OK) while(1);

    RCC_ClkInitStruct.ClockType=(RCC_CLOCKTYPE_SYSCLK|\
                                RCC_CLOCKTYPE_HCLK |\
                                RCC_CLOCKTYPE_D1PCLK1 |\
                                RCC_CLOCKTYPE_PCLK1 |\
                                RCC_CLOCKTYPE_PCLK2 |\
                                RCC_CLOCKTYPE_D3PCLK1);

    RCC_ClkInitStruct.SYSCLKSource= RCC_SYSCLKSOURCE_PLLCLK;
    RCC_ClkInitStruct.SYSCLKDivider=RCC_SYSCLK_DIV1;
    RCC_ClkInitStruct.AHBCLKDivider=RCC_HCLK_DIV2;
    RCC_ClkInitStruct.APB1CLKDivider=RCC_APB1_DIV2;
    RCC_ClkInitStruct.APB2CLKDivider=RCC_APB2_DIV2;
    RCC_ClkInitStruct.APB3CLKDivider=RCC_APB3_DIV2;
    RCC_ClkInitStruct.APB4CLKDivider=RCC_APB4_DIV4;
    ret=HAL_RCC_ClockConfig(&RCC_ClkInitStruct,FLASH_LATENCY_2);
    if(ret!=HAL_OK) while(1);

    __HAL_RCC_CSI_ENABLE() ;
    __HAL_RCC_SYSCFG_CLK_ENABLE() ;
    HAL_EnableCompensationCell();
} 

这个代码来自正点原子。当外部晶体是25兆,目标频率是480MHz时,传入参数为(192,5,2,2);

  • 打印内容从串口输出的映射,基于GCC环境下
// 重写 _write 函数
int _write(int file, char *ptr, int len)
{
    HAL_UART_Transmit(&huart1, (uint8_t *)ptr, len, HAL_MAX_DELAY);
    return len;
}

也是基于HAL库下面的,需要的话可以把中间的串口输出函数做自定义修改。

posted @ 2025-02-05 10:28  北纬三十度夏至  阅读(149)  评论(0)    收藏  举报