107 lines
2.9 KiB
C
107 lines
2.9 KiB
C
/*
|
||
* @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();
|
||
}
|
||
|