STM32时钟系统和时钟树

目录

STM32时钟系统

认识时钟树

什么是时钟

认识时钟树(F407)

配置系统时钟

系统时钟配置步骤

外设时钟使能和失能

sys_stm32_clock_init函数(F4)

 时钟配置一般步骤

System文件夹_时钟系统工作原理

System文件夹介绍

Sys文件介绍

Delay文件介绍

Systic工作原理

Syctic寄存器介绍

Usart文件介绍

printf()函数输出流程

printf的使用

printf函数支持


STM32时钟系统

认识时钟树

什么是时钟

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

认识时钟树(F407)

F4时钟树--正点原子

图中为一个简化的STM32F4时钟系统。A部分表示输入时钟源,可分为外部时钟源和内部时钟源;B为锁相环“PLL”;C为我们重点需要关注的系统时钟源选择器,此项决定了MCU的系统主时钟“SYSCLK”的大小;AHB预分频器将SYSCLK分频或不分频后分发给其它外设进行处理,包括到D部分的Cortex-M内核系统的时钟和使能单元。E为定时器以及其它外设的时钟源APB1/APB2。

HSE和HSI经过/M分频之后传递锁相环,锁相环会使晶振走过*N倍频器,之后如果再走过/P分频则可以直接作为系统时钟SYSCLC,如果走过/Q分频则可以作为其他外设的时钟。

系统时钟之后会去到AHB总线的时钟

AHB时钟经过总线桥会去到APB1和APB2(这俩实际上是由AHB1桥接过来的)

LSI可以为IWDG和RTC提供时钟

LSE专门为RTC提供时钟

说白了STM32时钟源就外部高速、外部低速、内部高速、内部低速四个时钟源,另外还有3个PLL锁相环

外设的时钟源大都是由这四个时钟源经过选择器和倍频等操作得到的

STM32F4时钟树简图

配置系统时钟

系统时钟配置步骤

外设时钟使能和失能

要使用某个外设,必须先使能该外设的时钟

sys_stm32_clock_init函数(F4)

HAL_RCC_OscConfig()函数

HAL_RCC_ClockConfig()函数

 

/P输出 8M/8*336/2=168        /Q输出 8M/8*336/7=48 

//RCC_OscInitTypeDef rcc_clk_init/* 选中PLL作为系统时钟源并且配置HCLK,PCLK1和PCLK2*/
/* 选择要配置的时钟为 SYSCLK、HCLK、PCLK1、PCLK2  系统时钟、AHB总线时钟、APB1、APB2总线时钟 */rcc_clk_init.ClockType = ( RCC_CLOCKTYPE_SYSCLK \| RCC_CLOCKTYPE_HCLK \| RCC_CLOCKTYPE_PCLK1 \| RCC_CLOCKTYPE_PCLK2);/* 设置系统时钟时钟源为PLL 根据时钟树简图系统时钟可供选择的时钟源还有HSE和HSI*/rcc_clk_init.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;      rcc_clk_init.AHBCLKDivider = RCC_SYSCLK_DIV1;                   /* AHB分频系数为1 */rcc_clk_init.APB1CLKDivider = RCC_HCLK_DIV4;                    /* APB1分频系数为4 */rcc_clk_init.APB2CLKDivider = RCC_HCLK_DIV2;                    /* APB2分频系数为2 *//* 同时设置FLASH延时周期为5WS,也就是6个CPU周期 根据手册上FLASH读接口的FLASH等待周期表得到 */ret = HAL_RCC_ClockConfig(&rcc_clk_init, FLASH_LATENCY_5);     

 时钟配置一般步骤

  • 使能PWR时钟:调用函数 _HAL_RCC_PWR_CLK_ENABLE()。
  • 设置调压器输出电压级别:调用函数 _HAL_PWR_VOLTAGESCALING_CONFIG()。
  • 选择是否开启Over-Driver功能:调用函数HAL_PWREx_EnableOverDrive()。
  • 配置时钟源相关参数:调用函数HAL_RCC_OscConfig()。
  • 配置系统时钟源以及AHB,APB1和APB2的分频系数:调用函数HAL_RCC_ClockConfig()。

PWR时钟名是“Power Control时钟”。Power Control模块负责管理微控制器的电源管理功能,包括进入低功耗模式、唤醒控制、备份寄存器等。通过配置和控制PWR时钟,可以有效地管理STM32微控制器的电源消耗

  • STM32有4个时钟源:HSI、HSE、LSI、LSE和3个PLL

  • HSI是高速内部时钟,RC振荡器,频率为16MHz,精度不高。可以直接作为系统时钟或者用作PLL时钟输入。

  • HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~26MHz。

  • LSI是低速内部时钟,RC振荡器,频率为32kHz,提供低功耗时钟。主要供独立看门狗和自动唤醒单元使用。

  • LSE是低速外部时钟,接频率为32.768kHz的石英晶体。RTC

  • PLL为锁相环倍频输出。 STM32F4有三个PLL:

  • 主PLL(PLL)由HSE或者HSI提供时钟信号,并具有两个不同的输出时钟。

①第一个输出PLLP用于生成高速的系统时钟(最高180MHz)

②第二个输出PLLQ为48M时钟,用于USB OTG FS时钟,随机数发生器的时钟和SDIO时钟。

  • 第一个专用PLL(PLLI2S)生成精确时钟,在I2S和SAI1上实现高品质音频

    N是用于PLLI2S vco的倍频系数,其取值范围是:192~432;

    R是I2S时钟的分频系数,其取值范围是:2~7;

    Q是SAI时钟分频系数,其取值范围是:2~15;P没用到。

  • 第二个专用PLL(PLLSAI)同样用于生成精确时钟,用于SAI1输入时钟,同时还为LCD_TFT接口提供精确时钟。

    N是用于PLLSAI vco的倍频系数,其取值范围是:192~432;

    Q是SAI时钟分频系数,其取值范围是:2~15;

    R是LTDC时钟的分频系数,其取值范围是:2~7;P没用到。

  • PLLCLK=HSE*N/(M * P),可以通过改变N、M、P改变PLLCLK的频率

  • 系统时钟SYSCLK可来源于三个时钟源:

​ ①、HSI振荡器时钟

​ ②、HSE振荡器时钟

​ ③、PLL时钟

  • 任何外设在使用之前,必须使能相应的时钟

  • STM32F4时钟信号输出MCO1(PA8)和MCO2(PC9),MCO1:用户可以配置预分频器(1~ 5)向MCO1引脚PA8输出4个不同的时钟源:HIS、LSE、HSE、PLL。MCO2:用户可以配置预分频器(1~ 5)向MCO2引脚PC9输出4个不同的时钟源:HSE、PLL、SYSCLK、PLLI2S 。MCO最大输出时钟不超过100MHz。

  • RCC时钟控制相关寄存器定义在stm32f429xx.h中。结构体: RCC_TypeDef;RCC时钟相关定义和函数在文件stm32f4xx_hal_rcc.h、stm32f4xx_hal_rcc.c 。

System文件夹_时钟系统工作原理

System文件夹介绍

 正点原子提供的System文件夹包含常用的函数和驱动

Sys文件介绍

Delay文件介绍

Systic工作原理

Systic即系统滴答定时器,包含在M3/4/7内核里面,核心是一个24位的递减计数器

F1/F4/F7的Systic定时器的时钟来源于HCLK,也就是AHB总线上的时钟

H7的Systic定时器的时钟来源于SYS_d1cpre_ck(H7),也就是系统的d1分频器

Syctic寄存器介绍

Systic重装载数值寄存器(Load)  和  Systic当前数值寄存器(Val)

Systic控制及状态寄存器(CTRL)

由于滴答定时器是处于芯片内核中的,ST公司使用之后将CLKSOURCE位固定了,因此并不是起到选择时钟源的作用,而是被ST公司设置后起到分频的作用

TICKINT其实就是起到一个倒数计时完成后触不触发中断的作用

Usart文件介绍

printf()函数输出流程

printf的使用

printf函数支持

半主机模式 :用于ARM目标的一种机制,可以将来自应用程序代码的输入输出请求传递至运行调试器的主机

简单说,就是通过仿真器实现开发板在电脑上的输入和输出

一般不使用半主机模式,而是使用串口模式

要提供printf()函数支持,首先要避免半主机模式

可使用微库法

和代码法

如果要使用串口,就需要根据串口这个硬件重新实现fputc(int ch,FILE *f)这个函数

当串口的状态寄存器USART_UX->SR的0x40位,也就是第6位==0,代表上一个字符还没有发送完成,就循环等待。上一个字符发送完成后,将字符写入串口的数据寄存器USART_UX->SR。

如果不等待fputc上一个字符发送完成就往usart->DR写下一个字符会导致乱码

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue2人力资源项目9权限管理

页面搭建 <template><div class"container"><div class"app-container"><el-button size"mini" type"primary">添加权限</el-button><el-table-column label"名称" /><el-table-co…

基于Pytorch深度学习神经网络MNIST手写数字识别系统源码(带界面和手写画板)

第一步&#xff1a;准备数据 mnist开源数据集 第二步&#xff1a;搭建模型 我们这里搭建了一个LeNet5网络 参考代码如下&#xff1a; import torch from torch import nnclass Reshape(nn.Module):def forward(self, x):return x.view(-1, 1, 28, 28)class LeNet5(nn.Modul…

二.使用PgAdmin连接Postgresql

二.使用PgAdmin连接Postgresql PostgreSQL是一种开源的对象关系型数据库管理系统(ORDBMS),它支持大部分SQL标准并提供了许多高级功能,例如事务、外键、视图、触发器等。PostgreSQL由PostgreSQL全球开发组维护和开发,它是一种高度可扩展的数据库系统,可以在各种操作系统…

finallyshell激活-支持所有版本(老版 + 最新版) + 所有平台(mac + windows)

一&#xff1a;打开finally shell的激活页面 二&#xff1a;点击离线激活 三&#xff1a;复制机器码&#xff0c;然后执行一下代码 原文&#xff1a;大哥原文&#xff0c;但是这个大佬是用java实现的&#xff0c;执行因为依赖的问题一直报错 基于以上问题&#xff0c;所以使…

linux Docker在线/离线服务安装并支持centos7和centos8系统

注&#xff1a;以下内容都是经过测试;能在生产环境使用. 一、centos7版本的docker在线安装 1&#xff1a;运行以下命令&#xff0c;下载docker-ce的yum源。 sudo wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo…

Electron学习笔记(五)

文章目录 相关笔记笔记说明 七、系统1、系统对话框2、自定义窗口菜单3、系统右键菜单4、快捷键(1)、监听网页按键事件 &#xff08;窗口需处于激活状态&#xff09;(2)、监听全局按键事件 &#xff08;窗口无需处于激活状态&#xff09;(3)、补充&#xff1a;自定义窗口菜单快捷…

ModuleNotFoundError: No module named ‘sklearn‘

ModuleNotFoundError: No module named sklearn 解决办法&#xff1a; pip install scikit-learn

Qt---信号和槽

一、信号和槽机制 所谓信号槽&#xff0c;实际就是观察者模式。当某个事件发生之后&#xff0c;比如&#xff0c;按钮检测到自己被点击了一下&#xff0c;它就会发出一个信号&#xff08;signal&#xff09;。这种发出是没有目的的&#xff0c;类似广播。如果有对象对这个信号…

Python爬虫从入门到精通:一篇涵盖所有细节的高质量教程

目录 第一部分&#xff1a;Python爬虫基础 1.1 爬虫原理 1.2 Python爬虫常用库 1.3 爬虫实战案例 1.4 注意事项 第二部分&#xff1a;爬虫进阶技巧 2.1 处理动态加载的内容 2.2 登录认证 2.3 分布式爬取 2.4 反爬虫策略 第三部分&#xff1a;爬虫实战项目 3.1 豆瓣…

党务政务服务热线|基于SSM的党务政务服务热线平台(源码+数据库+文档)

目录 基于SprinBootvue的党务政务服务热线平台 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2后台功能模块 5.2.1管理员功能模块 5.2.2部门功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; …

开源的图形化Windows软件安装升级方案:WingetUI

WingetUI&#xff1a;简化数字生活&#xff0c;WingetUI让软件管理轻松便捷- 精选真开源&#xff0c;释放新价值。 概览 WingetUI是在GitHub上开发的一个实用工具&#xff0c;专为Windows用户设计&#xff0c;旨在为常见的命令行包管理工具&#xff08;如Winget、Scoop、Pip、…

爬虫入门经典(七) | 采集淘宝电场相关信息

大家好&#xff0c;我是不温卜火&#xff0c;昵称来源于成语—不温不火&#xff0c;本意是希望自己性情温和。 PS&#xff1a;由于现在越来越多的人未经本人同意直接爬取博主本人文章&#xff0c;博主在此特别声明&#xff1a;未经本人允许&#xff0c;禁止转载&#xff01;&a…

【Leetcode每日一题】 动态规划 - 简单多状态 dp 问题 - 删除并获得点数(难度⭐⭐)(76)

1. 题目解析 题目链接&#xff1a;LCR 091. 粉刷房子 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 1. 状态定义 在解决这类问题时&#xff0c;我们首先需要根据题目的具体要求来定义状态。针对房屋粉刷问题&#…

C语言 | Leetcode C语言题解之第85题最大矩形

题目&#xff1a; 题解&#xff1a; int maximalRectangle(char** matrix, int matrixSize, int* matrixColSize) {int m matrixSize;if (m 0) {return 0;}int n matrixColSize[0];int left[m][n];memset(left, 0, sizeof(left));for (int i 0; i < m; i) {for (int j …

AI图书推荐:ChatGPT 和Power BI驱动未来金融投资变革

《ChatGPT 和Power BI驱动未来金融变革》&#xff08;The Future of Finance with ChatGPT and Power BI&#xff09;由James Bryant和Aloke Mukherjee撰写&#xff0c;探讨了ChatGPT和Power BI在金融领域的应用。 主要特点&#xff1a; - 使用ChatGPT自动化Power BI&#xff…

01 | 为什么需要消息队列?

哪些问题适合使用消息队列来解决&#xff1f; 1. 异步处理 2. 流量控制 使用消息队列隔离网关和后端服务&#xff0c;以达到流量控制和保护后端服务的目的。 3. 服务解耦 无论增加、减少下游系统或是下游系统需求如何变化&#xff0c;订单服务都无需做任何更改&#xff0c…

Linux上编译安装和卸载软件

在maven官网下载maven时候&#xff0c;看到maven-3.9.5这个版本有2份安装包&#xff0c;一个是binaries&#xff0c;一个是source binaries是已编译好的文件&#xff0c;可以直接使用的版本&#xff1b;source是源代码版本&#xff0c;需要自己编译 源码的安装一般由这三个步…

Python函数之旅专栏(导航)

Python内置函数(参考版本:3.11.8)AELRabs( )enumerate( )len( )range( )aiter( )eval( )list( )repr( )all( )exec( )locals( )reversed( )anext( )round( )any( ) ascii( )FM  filter( )map( )S float( )max( )set( )Bformat( )memoryview( )setattr( )bin( )frozenset( )…

Foxmail使用经验总结

目录 1.概述 2.版本历史 3.使用方法 3.1.安装和设置账户 3.2.收取和阅读邮件 ​​​​​​​3.3.发送邮件 ​​​​​​​3.4.管理联系人 ​​​​​​​3.5.日程安排和任务管理 ​​​​​​​3.6.定制设置和插件 ​​​​​​​3.7.跨平台同步 4.小结 1.概述 Fox…

QT:QML制作线形图

目录 一.介绍 二.引入库 三.自定义属性 四.悬停处理函数 五.设置X轴 六.设置Y轴 七.画线 八.测试点坐标 九.设置值 十.效果演示 十一.代码演示 1.LineGraph.qml 2.main.qml 一.介绍 线形图&#xff08;也称为折线图&#xff09;是一种常用的数据可视化工具&#…