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.

相关推荐
深圳老胡36 分钟前
STM32CubeMX 2 与 STM32CubeMX 的主要区别
笔记·stm32·单片机·代码规范
BSD_CGQ43 分钟前
FSR 压力传感器 I2C 接口实战:地址规划与 MCU 软件滤波的工程取舍
嵌入式硬件·机器人·压力传感器·柔性薄膜压力传感器
゛凌乱的记忆づ2 小时前
50元从零到成品:一套AI辅助的嵌入式实战入门教程——IIC篇
人工智能·stm32·单片机·嵌入式硬件
创界工坊工作室3 小时前
54-基于STC89C52控制的智能运输小车设计
stm32·单片机·嵌入式硬件·51单片机·proteus
iCxhust3 小时前
NTC温度测量计算
单片机·嵌入式硬件·51单片机·热力计算
沐欣工作室_lvyiyi3 小时前
基于单片机的汽车智能座舱控制系统的设计与实现(论文+源码)
单片机·嵌入式硬件·汽车·智能座舱
Alinket4 小时前
资源受限 MCU 的 OTA 升级怎么做:差分、签名校验与断点续传
单片机·嵌入式硬件
dtq04244 小时前
嵌入式3 - 外设和GPIO基本概念
单片机·嵌入式硬件
cu1436 小时前
细谈IT65631的具体功能与其应用
c++·单片机·嵌入式硬件
是大强6 小时前
keil mdk 缺少版本5编译器
stm32