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.

相关推荐
c7_ln1 小时前
STM32 低功耗设计全攻略:PWR 模块原理 + 睡眠 / 停止 / 待机模式实战(串口 + 红外 + RTC 应用全解析)
stm32·单片机·实时音视频·江协科技
乖乖是干饭王1 小时前
Linux系统编程中的_GNU_SOURCE宏
linux·运维·c语言·学习·gnu
weixin_478689761 小时前
C++ 对 C 的兼容性
java·c语言·c++
待什么青丝2 小时前
【TMS570LC4357】之相关驱动开发学习记录2
c语言·arm开发·驱动开发·单片机·学习
小柯博客2 小时前
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
c语言·stm32·单片机·嵌入式硬件·物联网
云山工作室3 小时前
一种停车场自动停车导航器的设计(论文+源码)
单片机·嵌入式硬件·毕业设计·毕设
CodeWithMe4 小时前
【C/C++】namespace + macro混用场景
c语言·开发语言·c++
平凡灵感码头4 小时前
单片机 传感器知识讲解 (一)红外避障模块,声控模块,人体红外模块
单片机·嵌入式硬件
wind_one15 小时前
STM32[笔记]--1.前置准备
笔记·stm32·单片机
SY师弟6 小时前
台湾TEMI协会竞赛——0、竞赛介绍及开发板介绍
c语言·单片机·嵌入式硬件·嵌入式·台湾temi协会