STM32HAL库1:认识时钟树(STM32F407)

news2024/11/26 18:33:11

目录

1.认识时钟树

1.1什么时钟

 1.2认识时钟树

2.配置系统时钟

2.1系统适中的配置过程

2.2外设时钟使能和失能

2.3sys_stm32_clock_init函数(F407)

2.4SystemClock_Config函数(F407)


[F1]

 [F4]

1.认识时钟树

1.1什么时钟

简单来说,时钟就是具有周期性的脉冲信号,最常用的是占空比为50%的方波。

时钟是单片机的脉搏,搞懂时钟走向及其关系,对单片机使用至关重要。

 1.2认识时钟树

[F103]

[F407]

 

2.配置系统时钟

2.1系统适中的配置过程

  1. 配置HSE_VALUE,告诉HAL库外部晶振频率,stm32xxxx_hal_conf.h
  2. 调用SystemInit()函数(可选),在启动文件中调用,在system_stm32xxxx.c定义
  3. 选择时钟源,配置PLL,通过HAL_RCC_OscConfig()函数设置 
  4. 选择系统时钟源,配置总线分频器,通过HAL_RCC_ClockConfig()函数设置
  5. 配置扩展外设时钟(可选),通过HAL_RCCx_PeriphCLKConfig()函数

3 + 4 + 5 = sys_stm32_clock_init()

2.2外设时钟使能和失能

我们要使用某个外设时,必须先要使能该外设时钟!!!!

 HAL库使能某个外设时钟的方法,如:

__HAL_RCC_GPIOA_CLK_ENABLE(); //使能GPIOA时钟
__HAL_RCC_GPIOA_CLK_DISABLE(); //禁止GPIOA时钟

2.3sys_stm32_clock_init函数(F4)

1.HAL_RCC_OscConfig()函数

HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct);
typedef struct
{
  uint32_t OscillatorType;       //选择需要配置的振荡器
  uint32_t HSEState;             //HSE状态
  uint32_t LSEState;             //HSE预分频值     
  uint32_t HSIState;             //LSE状态  
  uint32_t HSICalibrationValue;  //LSE校准微调值,范围0x0~0x1F
  uint32_t LSIState;             //LSI状态
  RCC_PLLInitTypeDef PLL;        //PLL结构体

}RCC_OscInitTypeDef;

typedef struct
{
  uint32_t PLLState;   //PLL状态
  uint32_t PLLSource;  //PLL时钟源
  uint32_t PLLM;       //PLL倍频系数
  uint32_t PLLN;       //PLL倍频系数N
  uint32_t PLLP;       //PLL分频系数P
  uint32_t PLLQ;       //PLL分频系数系数
       
}RCC_PLLInitTypeDef;

2.HAL_RCC_ClockConfig函数

HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t FLatency);
typedef struct
{
  uint32_t ClockType;            //要配置时钟(SYSCLK / HCLK / PCLK1 / PCLK2)
  uint32_t SYSCLKSource;         //系统时钟源
  uint32_t AHBCLKDivider;        //AHB时钟分频系数
  uint32_t APB1CLKDivider;       //APB1时钟分频系数
  uint32_t APB2CLKDivider;       //APB2时钟分频系数

}RCC_ClkInitTypeDef;

uint32_t FLatency 

#define  FLASH_LATENCY_0   FLASH_ACR_LATENCY_0WS 	/* FLASH 0个等待周期 */ 
#define  FLASH_LATENCY_1   FLASH_ACR_LATENCY_1WS 	/* FLASH 1个等待周期 */ 
#define  FLASH_LATENCY_2   FLASH_ACR_LATENCY_2WS 	/* FLASH 2个等待周期 */ 
... 
#define  FLASH_LATENCY_15   FLASH_ACR_LATENCY_15WS 	/* FLASH 15个等待周期 */ 

2.3SystemClock_Config函数(F407)

void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  /** Configure the main internal regulator output voltage
  */
  __HAL_RCC_PWR_CLK_ENABLE();
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
  /** Initializes the RCC Oscillators according to the specified parameters
  * in the RCC_OscInitTypeDef structure.
  */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLM = 4;
  RCC_OscInitStruct.PLL.PLLN = 168;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  RCC_OscInitStruct.PLL.PLLQ = 4;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }
  /** Initializes the CPU, AHB and APB buses clocks
  */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
  {
    Error_Handler();
  }
}

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

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

相关文章

【禅道测试环境搭建及安装】Linux上的禅道安装教程,从环境搭建开始

目录 一、操作环境 二、安装VMware 三、安装FinalShell 四、在VMware里安装CentOS 1.前置:CentOS的下载 2.CentOS的安装 3.查看网络 五、用宿主机连接远程的虚拟机 六、禅道包的下载与CentOS配置的修改 七、上传项目包并安装禅道 一、操作环境 Windows 10…

Substrate 基础教程(Tutorials) -- 授权特定节点

五、授权特定节点 在添加可信节点中,您看到了如何使用一组已知的验证器节点构建一个简单的网络。该教程演示了一个简化版的许可网络(permissioned network)。在一个被许可的网络中,只有被授权的节点(authorized nodes…

STM32CubexMX与FreeRTOS学习

FreeRTOS结合MX软件开发,基础配置直接生成,我们只需要会操作即可,操作一些API函数,注意事项就是:头文件、二值信号量一开始就有、定时器需要打开并且配置周期 1-LED-EXTI 上下拉模式和触发模式不要选择错误 void HAL_…

Elasticsearch:如何在 Elastic 中实现图片相似度搜索

作者:Radovan Ondas 在本文章,我们将了解如何通过几个步骤在 Elastic 中实施相似图像搜索。 开始设置应用程序环境,然后导入 NLP 模型,最后完成为你的图像集生成嵌入。 Elastic 图像相似性搜索概览 >> 如何设置环境 第一步…

【11】linux命令每日分享——useradd添加用户

大家好,这里是sdust-vrlab,Linux是一种免费使用和自由传播的类UNIX操作系统,Linux的基本思想有两点:一切都是文件;每个文件都有确定的用途;linux涉及到IT行业的方方面面,在我们日常的学习中&…

网页全屏截图、在线截图API

在我们的数字时代,网页截图已经成为了一个非常常见的需求,无论是为了记录网页信息、保存重要信息或是与他人分享自己看到的内容,截图工具都是必不可少的。今天,我想向大家推荐一个非常好用的在线网页全屏截图工具,它的…

获取html元素相对屏幕的位置

1. 写在前面 Javascript 由三部分构成,ECMAScript,DOM和BOM。 ECMAScript(核心)   描述了JS的语法和基本对象 Bom:(browser object model);浏览器对象模型,提供一些属性和方法可以操作浏览器,浏览器可…

【spring】Spring Data --Spring Data JPA

Spring Data 的委托是为数据访问提供熟悉且符合 Spring 的编程模型,同时仍保留着相关数据存储的特​​殊特征。 它使使用数据访问技术、关系和非关系数据库、map-reduce 框架和基于云的数据服务变得容易。这是一个伞形项目,其中包含许多特定于给定数据库…

详述java的设计模式(二)

1.工厂模式 简单工厂模式(Simple Factory Pattern)属于创建型模式,是指由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类的对象,而被创建的对象通常都具有共同的父类或接口,这种模式又叫做静态工…

数据结构和算法学习

文章目录精通一个领域切题四件套算法算法的五个条件流程图数据结构数据与信息数据信息数据结构和算法数据结构算法时间复杂度空间复杂度数组 Array优点缺点数组和链表的区别时间复杂度链表 Linked List优点缺点时间复杂度单向链表双向链表循环链表双向循环链表堆栈 Stack队列 Q…

涂鸦开发资源中心硬核上线!支持产物包可视化、自由裁剪开发框架等功能

开发过程对于程序猿们来说,就像建碉堡,碉堡的建成速度、创造力,以及精致和牢固程度,取决于工具称不称手。不称手的开发工具,不仅能让人心力交瘁,还会多掉几根头发。 为了帮助开发者获得更好的开发体验&…

【搞透C语言指针】那年我双手插兜, 不知道指针是我的对手

☃️内容专栏:【C语言】进阶部分 ☃️本文概括: 征服C语言指针!一篇文章搞清楚指针的全部要点。 ☃️本文作者:花香碟自来_ ☃️发布时间:2023.3.3 目录 一、字符指针 二、指针数组 三、数组指针 1.数组指针的定义…

UML常见图的总结

一、概述 UML:Unified Modeling Language,统一建模语言,支持从需求分析开始的软件开发的全过程。是一个支持模型化和软件系统开发的图形化语言、为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到…

ESP32设备驱动-SHT11温度湿度传感器驱动

SHT11温度湿度传感器驱动 SHT1x 数字湿度传感器是一种可回流焊接的传感器。 SHT1x 系列包括带有 SHT10 湿度传感器的低成本版本、带有 SHT11 湿度传感器的标准版本和带有 SHT15 湿度传感器的高端版本。 与 SHTxx 湿度传感器系列中的所有其他 Sensirion 传感器类型一样,它们经…

H2数据库连接时用户密码错误:Wrong user name or password [28000-214] 28000/28000 (Help)

H2数据库连接时用户密码错误: 2023-03-03 08:25:07 database: wrong user or password; user: "SA" org.h2.message.DbException: Wrong user name or password [28000-214]出现的问题配置信息原因解决办法org.h2.message.DbException: Wrong user name or password …

Python从入门到转行,看完这一篇就够了

Python零基础入门 零基础入门就得从最基本的变量,语法格式,数据类型,函数,作用域,模块等基本知识入手(有编程基础基础也得这么来) 和篮球一样,先来三步上篮: Python基…

Spring Boot 分片上传、断点续传、大文件上传、秒传

文件上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好的办法,毕竟很少有人会忍受,…

MySQL面试题-基础篇

目录 前言 数据库基础 1.什么是关系型数据库和非关系型数据库? 2.什么是 SQL? 3.MySQL 有什么优点? 4.MySQL 的基础架构? 存储引擎 1.MySQL 支持哪些存储引擎?默认使用哪个? 2.MySQL 存储引擎架构了解吗&…

C# IoC控制反转学习笔记

一、什么是IOC IoC-Invertion of Control,即控制反转,是一种程序设计思想。 先初步了解几个概念: 依赖(Dependency):就是有联系,表示一个类依赖于另一个类。 依赖倒置原则(DIP&a…

苹果ipa软件下载网站和软件的汇总

随着时间的流逝,做苹果版软件安装包下载网站和软件的渐渐多了起来。 当然,已经关站、停运、下架、倒闭的苹果软件下载网站和软件我就不说了,也不必多说那些关站停运下架倒闭的网站和软件了。 下面我统计介绍的就是苹果软件安装包下载网站和软…