STM32F103 HSE时钟倍频以及设置频率函数(新手向,本人也是新手)

HSE_SetSysCLK是野火教程里的,不懂的去这 16-RCC(第3节)使用HSE配置系统时钟并使用MCO输出监控系统时钟_哔哩哔哩_bilibili

HSE_AutoSetHSE的算法部分是自己写的,用了一个转接数组。C语言不支持bool所以自己定义了一个boolK代替bool。

AutoHSE.h:

cpp 复制代码
/**
*@file AutoHSE.h
*@version 自定
*/

#ifndef __AUTOSETHSE_H
#define __AUTOSETHSE_H

typedef enum Bool_
{
	False = 0,
	True = !False
}boolK;

void HSE_SetSysCLK(uint32_t RCC_PLLMul_x);
boolK HSE_AutoSetHSE(uint32_t Soften);

#endif /*! __AUTOSETHSE_H */

AutoHSE.c:

cpp 复制代码
#include "AutoHSE.h"

uint32_t RCC_PLLMul_X[15] = {
RCC_PLLMul_2,
RCC_PLLMul_3,
RCC_PLLMul_4,
RCC_PLLMul_5,
RCC_PLLMul_6,
RCC_PLLMul_7,
RCC_PLLMul_8,
RCC_PLLMul_9,
RCC_PLLMul_10,
RCC_PLLMul_11,
RCC_PLLMul_12,
RCC_PLLMul_13,
RCC_PLLMul_14,
RCC_PLLMul_15,
RCC_PLLMul_16
};

void HSE_SetSysCLK(uint32_t RCC_PLLMul_x)
{
	ErrorStatus HSEStatus;  //typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrorStatus;??????????
	
	RCC_DeInit();                           //??
	RCC_HSEConfig(RCC_HSE_ON);              //??HSE
  HSEStatus=RCC_WaitForHSEStartUp();      // ??HSE??
	
	if(HSEStatus==SUCCESS)
	{
	   FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);      //?????
		 FLASH_SetLatency(FLASH_Latency_2);                         // 72M???2???
		
		 RCC_HCLKConfig(RCC_SYSCLK_Div1);   //HCLK???
     RCC_PCLK1Config(RCC_HCLK_Div2);    //PCLK1???
     RCC_PCLK2Config(RCC_HCLK_Div1);    //PCLK2???
		
		 RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_x);   //?????
     RCC_PLLCmd(ENABLE);                                   //??
		
		while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET){};      //??PLL??
		
	  RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);             //??????
		
		while(RCC_GetSYSCLKSource()!=0x08);
	}
	
	else
	{
	}	
}

boolK HSE_AutoSetHSE(uint32_t Soften)
{
	if(Soften > 128 || Soften < 2)
	{
		return False;
	}
	else
	{
		HSE_SetSysCLK(RCC_PLLMul_X[(Soften-(Soften%8))/8-2]);
		return True;
	}
	
	return False;
}

// _____END_________

亲测,有用:D,喜欢就点个赞,支持一下我这个新手吧qwq.

相关推荐
晶振厂家-晶发电子2 天前
晶振在5G时代的角色:高精度时钟的核心支撑
单片机·嵌入式硬件·5g·晶振·电子元器件·晶振知识
F137298015572 天前
WD5030A 芯片,12V降5V,输出电流12A,电路设计
stm32·单片机·嵌入式硬件·汽车·51单片机
小莞尔2 天前
【51单片机】【protues仿真】基于51单片机的篮球计时计分器系统
c语言·stm32·单片机·嵌入式硬件·51单片机
三佛科技-187366133972 天前
分享机械键盘MCU解决方案
单片机·嵌入式硬件·计算机外设
李永奉2 天前
51单片机-使用IIC通信协议实现EEPROM模块教程
单片机·嵌入式硬件·51单片机
工大一只猿2 天前
51单片机学习
嵌入式硬件·学习·51单片机
小莞尔2 天前
【51单片机】【protues仿真】 基于51单片机八路抢答器系统
c语言·开发语言·单片机·嵌入式硬件·51单片机
风_峰2 天前
Ubuntu Linux SD卡分区操作
嵌入式硬件·ubuntu·fpga开发
liujing102329292 天前
Day03_刷题niuke20250915
c语言
bing_feilong2 天前
STM32精准控制水流
单片机·嵌入式硬件