CIU32_L051_M307R/drivers/src/drv_common.c

107 lines
2.9 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* @Author: mbw
* @Date: 2024-08-20 15:51:16
* @LastEditors: mbw && 1600520629@qq.com
* @LastEditTime: 2024-09-12 17:14:01
* @FilePath: \USART1_Interrupt - RT-Thread\drivers\src\drv_common.c
* @Description:
*
* Copyright (c) 2024 by ${git_name_email}, All Rights Reserved.
*/
/************************************************************************************************/
/**
* @file common.c
* @author MCU Ecosystem Development Team
* @brief 通用函数或本外设相关的配置实现函数。
*
*
**************************************************************************************************
* @attention
* Copyright (c) CEC Huada Electronic Design Co.,Ltd. All rights reserved.
*
**************************************************************************************************
*/
/*------------------------------------------includes--------------------------------------------*/
#include "drv_common.h"
/*-------------------------------------------functions------------------------------------------*/
/**
* @brief 配置HXTAL时钟参数包含模式及驱动能力
* @param mode HXTAL模式选择
* @arg RCC_HXTAL_ON 使能晶体模式
* @arg RCC_HXTAL_BYPASS使能外部时钟模式
* @param hxtal_drv HXTAL驱动能力配置
* @arg RCC_HXTAL_DRIVE_LEVEL0
* @arg RCC_HXTAL_DRIVE_LEVEL1
* @arg RCC_HXTAL_DRIVE_LEVEL2
* @arg RCC_HXTAL_DRIVE_LEVEL3
* @note 当HXTAL已使能则不能配置HXTAL时钟相关参数需将该时钟禁止后再进行配置。
* @retval 无
*/
void bsp_rcc_hxtal_config(uint32_t mode, uint32_t hxtal_drv)
{
if (mode == RCC_HXTAL_ON)
{
/* 配置HXTAL驱动能力 */
std_rcc_hxtal_drive_config(hxtal_drv);
}
/* 使能HXTAL */
std_rcc_hxtal_enable(mode);
/* 等待HXTAL时钟稳定 */
while(!std_rcc_get_hxtal_ready());
}
/**
* @brief NMI中断服务函数
* @retval 无
*/
void NMI_Handler(void)
{
/* 清除HXTAL CSS标志 */
std_rcc_clear_flag(RCC_CLEAR_HXTALCSS);
/* 切换系统时钟为RCH 2分频(8MHz) */
/* 用户可根据实际应用实现HXTAL CSS中断处理函数 */
}
/**
* @brief 系统时钟配置
* @retval 无
*/
void system_clock_config(void)
{
/* 设置Flash读访问等待时间 */
std_flash_set_latency(FLASH_LATENCY_2CLK);
/* 配置HXTAL为晶体模式 */
bsp_rcc_hxtal_config(RCC_HXTAL_ON, RCC_HXTAL_DRIVE_LEVEL1);
/* 配置PLL相关参数并使能 */
std_rcc_pll_config(RCC_PLLSRC_HXTAL, RCC_PLLM_MUL4, RCC_PLLN_DIV1, RCC_PLL_DIV1);//32MHZ
std_rcc_pll_enable();
while(!std_rcc_get_pll_ready());
std_rcc_pll_output_enable();
/* 设置系统时钟源为PLL */
std_rcc_set_sysclk_source(RCC_SYSCLK_SRC_PLLCLK);
while(std_rcc_get_sysclk_source() != RCC_SYSCLK_SRC_STATUS_PLLCLK);
/* 设置AHB分频因子 */
std_rcc_set_ahbdiv(RCC_HCLK_DIV1);
/* 设置APB1、APB2分频因子 */
std_rcc_set_apb1div(RCC_PCLK1_DIV1);
std_rcc_set_apb2div(RCC_PCLK2_DIV1);
SystemCoreClockUpdate();
}