STM32——关于时钟源的实际使用及解释

news2024/10/6 12:24:09

1、STM32内部有5个时钟源,分别为HSI、HSE、LSE、LSI、PLL。

HSE:高速外部时钟,可接石英谐振器、陶瓷谐振器,或者接外部时钟源,其频率范围为4MHZ~16MHZ。

LSE: 低速外部时钟,接频率为32.768KHZ的石英晶体。

HSI:高速内部时钟,RC振荡器,频率为8MHZ。

LSI:低速内部时钟,RC振荡器,频率为40KHZ。

PLL:锁相环倍频输出。其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频选择2~16倍,但是其输出频率最大不得超过72MHZ。

6688f0e17cb344ada371ba0fd1537cca.png

2、根据STM32F103的参考手册,我们能够看到LSE和LSI未通向AHB预分频器,即未参与挂载在AHB总线上的各种外设。

LSE是用来个RTC(实时时钟)来提供准确的时钟信号。

LSI是一种低功耗,高精度的时钟信号,是一种以内部电源为驱动的振荡器,适用于一些应用场景,尤其是对功耗要求较高的场合,用于供给独立看门狗和自动唤醒单元使用。

3、在程序中如何使用HSE和HSI?

1、LED.C
 
#include "stm32f10x.h"                  // Device header
#include "Delay.h"
 
void LED_Init(void)
{
	/*当我们直接在程序中使用RCC_APB2PeriphClockCmd时,
        其是由内部时钟控制的。它用于使能或禁用外设的时
        钟,通过控制内部时钟的分频器来控制外设的时钟。*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);	//开启APB2外设时钟
	
	GPIO_DeInit(GPIOC);	//对整个GPIOC引脚进行复位操作
	GPIO_InitTypeDef GPIO_InitStructure;	//声明结构体GPIO_InitStructure
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;	
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;		//推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOC,&GPIO_InitStructure);
 
}
 
 
void LED(void)
{
	GPIO_WriteBit(GPIOB,GPIO_Pin_7,(BitAction)0);	//BitAction为强制类型转换符
	Delay_ms(500);
	GPIO_WriteBit(GPIOB,GPIO_Pin_7,Bit_SET);
	Delay_ms(500);
}
 
void PC13_ON(void)
{
		GPIO_ResetBits(GPIOC,GPIO_Pin_13);		//低电平点亮PC13LED灯
		Delay_ms(500);
}
 
void PC13_OFF(void)
{
		GPIO_SetBits(GPIOC,GPIO_Pin_13);		//高电平点亮PC13LED灯
		Delay_ms(500);
}
 
uint8_t LED_GetNum(void)
{
	return GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13 ); //读取PC13号端口的输入值
}

feb16ef87a234f31a76cd7bf5875ced8.png

 


void HSE_Init(uint16_t PLL)
{
	ErrorStatus HSEStart_UpStatus;
	//将RCC寄存器重新设置为默认值
	RCC_DeInit();
	//打开外部高速时钟晶振HSE
	RCC_HSEConfig(RCC_HSE_ON);
	//等待外部高速时钟晶振工作
	HSEStart_UpStatus = RCC_WaitForHSEStartUp();
	
	if(HSEStart_UpStatus == SUCCESS) 	//SUCCESS:HSE晶振稳定且就绪
	{
		//设置AHB时钟
		RCC_HCLKConfig(RCC_SYSCLK_Div1);
		
		//设置高速AHB时钟
		RCC_PCLK2Config(RCC_HCLK_Div1);
		
		//设置低速AHB时钟
		RCC_PCLK1Config(RCC_HCLK_Div2);
		
		//设置FLASH存储器延时时钟周期数
		FLASH_SetLatency(FLASH_ACR_LATENCY_2);
		//选择FLASH预取指缓存的模式
		FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
		
		//设置PLL时钟源及倍频系数
		switch(PLL)
		{
			case 2:RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_2);
							break;
			case 3:RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_3);
							break;
			case 4:RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_4);
							break;
			case 5:RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_5);
							break;
			case 6:RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_6);
							break;
			case 7:RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_7);
							break;
			case 8:RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_8);
							break;
			case 9:RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);
							break;
			default:RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_2);
							break;
		}
		//使能PLL
		RCC_PLLCmd(ENABLE);
		//检查指定的RCC标志位
		while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET){}
			
		//设置系统时钟(SYSCLK)
		RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//RCC_SYSCLKSource_PLLCLK选择PLL作为系统时钟
		
		//PLL返回用作系统时钟的时钟源
	/**
  * @brief  Returns the clock source used as system clock.
  * @param  None
  * @retval The clock source used as system clock. The returned value can
  *   be one of the following:
  *     - 0x00: HSI used as system clock
  *     - 0x04: HSE used as system clock
  *     - 0x08: PLL used as system clock
  */
		while(RCC_GetSYSCLKSource()!= 0X08)
		{
			
		}
	}
}

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/725392.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ATFX国际:小非农ADP数据来袭,加息预期或再度升温

ATFX国际:每月发布一次的ADP数据是国际金融市场的大事件,它能够对周五发布的非农就业报告起到相对准确的前瞻作用。今日晚间20:15,美国6月ADP就业人数将发布,前值为增加27.8万人,预期值增加22.8万人,市场预…

【Quartus FPGA】EMIF DDR3 IP 仿真记录

EMIF (External Memory Interface) 是 Quartus 平台提供的 IP,用于实现高速存储器件接口与控制器。通过 Intel Quartus Prime 软件,可以很方便地实现 EMIF IP 电路。本文记录了使用 EMIF 实现 DDR3 控制器的仿真过程,软件平台为 Quartus Prim…

软件测试体系方案

目录 前言: 1. 引言 1.1 目标 1.2 背景 1.3 术语和定义 2. 测试体系完善 2.1 项目启动 2.2 测试计划 2.3 需求分析 2.4 测试设计 2.5 测试执行 2.6 测试记录 2.7 缺陷跟踪 2.8 测试结束 2.9 测试总结 3. 测试管理规划 3.1 测试人员 3.2 测试环境 …

骑行,怎么样高效而省力的摇车?

大家好,今天我们来聊一聊自行车运动中的摇车技巧。我们知道,摇车是自行车运动中一种非常高效的发力方式,那么如何做到高效而省力的摇车呢? 首先,我们要了解摇车的原理。摇车,其实就是通过腿部蹬踏的方式&am…

(02)Cartographer源码无死角解析-(78) ROS数据发布→2D点云数据、tf、机器人tracking frame轨迹发布

讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解(02)Cartographer源码无死角解析-链接如下: (02)Cartographer源码无死角解析- (00)目录_最新无死角讲解:https://blog.csdn.net/weixin_43013761/article/details/127350885 文…

【MTK】ES7210、ES7243E Driver调试

文章目录 1.概要2.整体架构流程3. ES7210、ES7243E Driver4. 调试过程中的问题点小结1.概要 由于项目需要实现 4 路MIC 以及 2 路Speaker回采输入android系统,硬件是一个ES7210用来采集4路MIC,一个ES7243E用来采集2路Speaker回采,组成类似6路麦克风输入系统。系统SoC无法支持…

“前端刘德华”Pink老师送签名图书啦

就算成功的概率为1%又如何呢,如太阳系般波澜壮阔,也只有0.14%产生了生命,平凡的我们绝大多数也终将如整个太阳系的99.86%一般化作死寂。 但这不重要朋友,今天是黑马疯狂星期四,Pink老师开讲了!&#xff01…

跑马灯实验(stm32)

目录 LED的功能代码led.cled.h硬件相关说明 main.c代码的一些介绍BSRR和BRR 实验结果 说明:以下内容参考正点原子的相关资料 LED的功能代码 led.c void LED_Init(void) {GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_A…

单月涨粉30w,小红书涨粉秘诀是什么?

6月,小红书平台又涌现出哪些优质博主?品牌在投放种草方面有何亮眼表现? 为洞察小红书平台的内容创作趋势及品牌营销策略,新红推出6月月度榜单,从创作者、品牌、品类多方面入手,解析月榜数据,为从…

耗时半月,终于把牛客网上的软件测试面试八股文整理成PDF合集!

大家好,最近收到不少小伙伴的留言,反映现在的面试难度越来越高,要背的八股文越来越多了,考察的知识点也越来越细致,明摆着就是想让我们“徒手造航母”嘛!对程序员们来说确实是一大挑战。 因此,…

Win10快捷方式添加到开始菜单或磁贴

打开Windows文件夹,进入该目录(用户名替换为当前用户):C:\Users\[你的用户名]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs 将应用的快捷方式复制到此目录下,即可展示在开始菜单中可以右键在将快捷方式固定到磁贴

【UnityDOTS 小知识】在DOTS中实例化Prefab的方法

在DOTS中实例化Prefab的方法 前言 实例化Prefab的方法常规方法: 1.利用Baker的方式,以及getEntity方法,将prefab转化为一个对应的Entity原型,再利用EntityManager或ECB的Instantiate方法实例化这个Entity原型得到对应Prefab的实…

LSTD: A Low-Shot Transfer Detector for Object Detection论文阅读笔记

LSTD: A Low-Shot Transfer Detector for Object Detection论文阅读笔记 提出low-shot Transfer detector,来解决标注样本数据不足的情况。利用source domain知识,来构建高效的target-domain检测器,仅需要很少的训练样本。 提出了一个高效的…

第一课:Figma 软件安装与汉化

Figma软件基本介绍 Figma 是一款可在线协作的UI设计软件,最大的亮点在于它基于 WEB 平台研发,能支撑全平台操作系统的运行,适合各种场景下的使用。Figma软件特色功能: 在线编辑,适配全平台:使用软件 Figma…

Python 利用opencv实现识别最大面积验证码

此篇文章解决的是某象的最大验证码,这个最大面积验证码,就是识别图中划线区域中最大面积的验证码,我一开始打算用深度学习去做,但是结合了网上的资料以及自己的想法来看,还是用opencv处理又快又较为准确,而且还不用准备深度学习的一些环境 我准备了大概几十张验证码,经过…

Linux运维-修改密码报错提示:authentication token manipulation error

背景 今天在Linux Centos7环境的使用中,突然遇到了这个问题,为了以后再次遇到后可以快速的解决问题,特此记录。 首先是无法进入系统,然后通过单用户进入系统后修改密码,然后遇到该问题。 单用户进入系统 在如下位置添加init/bin/bash 后按Ctrl X 重启系统 进入b…

联想凌拓数据管理平台—— MagnaScale 分布式存储软件

MagnaScale 分布式存储软件 MagnaScale 数据管理平台是联想凌拓自研 ThinkSystem DXN 非结构化存储的核心软件,具有高性能、高可用性、横向扩展的特点。 MagnaScale 解决方案 是 DXN 非结构化存储的核心软件,能够真正实现软硬件解耦,为客户提…

在 VS Code 的 User Snippets 中使用美元符号 $ 失败的问题

在 VS Code 的 User Snippets 中使用美元符号 $ 失败的问题 在日常工作里经常会用到一些常用的代码片段, 比如创建一个 .vue 文件的初始结构, 所以我会选择在 VS Code 的 User Snippet 中创建一个代码片段, 如下 {"Print to console": {"scope": "v…

异常处理在开源SpringBoot/SpringCloud微服务框架的最佳实践

目录导读 异常处理在开源SpringBoot/SpringCloud微服务框架的最佳实践1. Java为什么要有异常2 Java异常分类3. JDK异常处理4. 模块化异常处理5. 服务化异常处理5.1 web服务化异常处理5.1.1 web参数校验服务化异常最佳实践5.1.1.1 web参数校验服务化异常分析5.1.1.2 web参数校验…

七、html表格

1、表格 表格 组织内容:推荐 布局:不推荐,嵌套非常复杂,影响SEO,采用列表代替布局 2、表格的结构 标题 头部 列标题 主体 行、列、单元格 脚部 在JavaScript默认提供主体 3、表格的使用 4、列与行合并&#xff1…