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.

相关推荐
恒锐丰小瑞8 小时前
率能SS8841T 40V/2.5A/双通道H桥驱动芯片,PWM控制接口与低导通电阻(350mΩ),用于POS打印机/安防相机/机器人
单片机·嵌入式硬件·机器人
zcmodeltech9 小时前
钢铁冶金沙盘模型控制系统设计与实现:高炉-连铸-热轧多工序联动方案
分布式·stm32·单片机·嵌入式硬件·交互
wuminyu9 小时前
JDK21中虚拟线程和FFM协同实现高并发源码剖析
java·linux·c语言·jvm·c++
徽京人10 小时前
VS Code 接入Esp 32步骤
vscode·单片机·嵌入式硬件
kkkkkkkkkk_Z10 小时前
学嵌入式和C语言编程数据结构|学习日记Day21:内核链表与队列学习
c语言·数据结构·学习
不正经学生11 小时前
C语言结构体:自定义数据类型,让变量打包出行
java·c语言·开发语言·数据结构·算法
老一岁11 小时前
c问题总结(1)
c语言·开发语言
QH1392923188011 小时前
Keysight N5183B N5183B 微波模拟信号发生器
网络·单片机·嵌入式硬件·集成测试·信息与通信
一木 之林11 小时前
三、内存管理、指针与堆栈
c语言·jvm·c++
笨笨饿12 小时前
#110_SCH3000 平台图传系统配置指南:从 DVP 摄像头到 UVC/WiFi 双通道传输
c语言·stm32·单片机·嵌入式硬件·物联网·vim