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.

相关推荐
R6bandito_几秒前
Qt几何数据类型:QLine类型详解(基础向)
c语言·开发语言·c++·经验分享·qt
禊月初三6 分钟前
C++面试突破---C/C++基础
c语言·c++·面试
就爱学编程8 分钟前
重生之我在异世界学编程之C语言:选择结构与循环结构篇
c语言·数据结构·算法
橘子真甜~22 分钟前
Linux操作系统3-文件与IO操作1(从C语言IO操作到系统调用)
linux·运维·服务器·c语言·io·文件操作·文件fd
憧憬一下25 分钟前
Linux内核早期打印机制与RS485通信技术
arm开发·嵌入式硬件·嵌入式·linux驱动开发
电子工程师UP学堂1 小时前
电子应用设计方案-37:智能鼠标系统方案设计
人工智能·单片机·嵌入式硬件·计算机外设
Q23553688721 小时前
100V降压恒流芯片SL2516D 内置MOS管 支持15W功率输出 电动车照明
单片机·嵌入式硬件
石板小湫1 小时前
46 基于单片机的烧水壶系统设计
单片机·嵌入式硬件
Lbs_gemini06037 小时前
C++研发笔记14——C语言程序设计初阶学习笔记12
c语言·开发语言·c++·笔记·学习
lucy1530275107911 小时前
【青牛科技】BISS0001高性能的传感信号处理集成电路芯片,广泛用于安防、自控等领域能
科技·单片机·智能家居·信号处理·安防·工控主板