【铁头山羊STM32】HAL库 4.时钟系统部分

目录

一、基础配置

单片机的系统结构:

时钟树

树根

树干

树枝和树叶

二、时钟配置实验

[点开Clock Configuration,](#点开Clock Configuration,)

通过板载LED来间接显示代码的执行速度。

我们先试试8MHz时的闪灯频率:

试试达到最大时,72MHZ的闪灯频率:

设置树根

设置树干


一、基础配置

在CubeMX种Clock Configuration界面可以看到:

打开数据手册,翻到第11页:

这就是芯片内部的结构框图,

单片机的系统结构:

跟电脑的组成类似,甚至可以说是一一对应。

这三条总线我们要记住:

数字电路可以分为两类:

图里可以看到,单片机内部有许许多多模块(红框),每个模块都包含记忆性的元件,它们都属于时序组合电路,单片机需要给每一个模块提供时钟信号:

而这些模块所需要时钟的频率也不同,如何产生和分配这些时钟信号?

时钟树

时钟信号从树根产生,经过树干处理,通过树枝分配给树叶。

树根

(时钟源)

在我们的开发板上,LSE和HSE就是指芯片外接的两颗晶振:

树干

锁相环是做乘法。

树枝和树叶

树枝就是指AHB、APB1、APB2三根总线,

而树叶就是总线上的各个模块:

分频器是做除法。


二、时钟配置实验

创建工程------选芯片------选调试------

点开Clock Configuration,

可以知道,这就是上节课介绍的两颗树:

而这些模块比较特殊,等用到再学:

其中,有一个极其特殊的树叶,我们所写的所有代码,都是由Cortex-M3内核执行的(上图右上角的红框):

所以这里HCLK的频率就决定着代码的执行速度。

我们可以,

通过板载LED来间接显示代码的执行速度。

Cortex-M3的默认频率为8MHz(800万次/秒),原理如下:

我们先试试8MHz时的闪灯频率:

(for循环每次执行8个指令周期)

在CubeMX上配置PC13引脚上的板载LED(输出、开漏、初始高)、配置名称、地址、工具链。

在keil上补齐代码:

为了更精确,我们关闭调试模式:

烧录完发现板载LED每秒钟1次,比想象中稍快一点,因为单片机内核指令流水线的存在让代码执行的速度稍快。

试试达到最大时,72MHZ的闪灯频率:

打开CubeMX中的刚才文件,

设置树根

用单片机上最大频率为8MHz的白色HSE晶振:

点击System Core------RCC

可以发现,PD0和PD1引脚已经被分配为晶振的输入、输出引脚。

设置树干

依次改动,如图红线所示:

这样就让时钟树上的所有结点都达到了它的最高频率。

直接点击生成代码,

会发现提示"代码被修改,让你重新加载代码",

点击确认,

代码不用改动,

烧录代码后,

会发现板载LED的闪烁频率比之前快了不少。

相关推荐
JNX_SEMI34 分钟前
AT2401C 2.4GHz 全集成射频前端单芯片技术解析
前端·单片机·嵌入式硬件·物联网·硬件工程
电子工程师成长日记-C512 小时前
51单片机智能灯光控制系统
单片机·嵌入式硬件·51单片机
狂奔蜗牛(bradley)3 小时前
嵌入式软件编程思想之事件驱动+表驱动状态机+事件参数+优先级FIFO
单片机·mcu
secondyoung3 小时前
Cortex-R52学习:存储系统
arm开发·单片机·学习·arm
C路在脚下4 小时前
HSMS 连接总失败?排查这 5 个配置点
c++·嵌入式硬件
开发笔记-阿牛5 小时前
CK6159A 语音主控 USB 恒温热敷控制器硬件设计(原理图 + PCB + 温控安全方案)
单片机·嵌入式硬件
Kuakewei8886 小时前
USB OVP过压保护IC 6.1V关闭输出,SOT23封装1A~3A全覆盖
嵌入式硬件
sramdram7 小时前
低功耗串口通信蓝牙模块应用原理
单片机·嵌入式硬件·蓝牙模块·通信蓝牙模块·串口蓝牙模块
__Rhaast丶8 小时前
set_data_check用法解析(一) lib库中的data check解析
单片机·嵌入式硬件
wuyk5559 小时前
21. 嵌入式面试避坑指南:sizeof 是关键字,不是函数!
c语言·开发语言·stm32·单片机·嵌入式硬件