0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【有那么点详细的CW32学习笔记】看手册配置时钟树

jf_08851166 来源:jf_08851166 作者:jf_08851166 2023-08-17 14:54 次阅读

本章针对CW32F030C8T6的时钟树进行详细解析,续第一章启动文件的相关讲解。

上一章讲到,单片机的启动文件会使用单片机内部的RC振荡器作为单片机的启动时钟,并且该时钟频率被设置为48MHz。但讲解有疏漏,根据编程手册的描述,该48MHz仅为HSI频率,而非输送到时钟总线上的频率,在进入时钟总线之前,该时钟会被分频(也就是降低频率),在不进行任何配置的情况下,这个48M的信号会被6分频。

wKgaomTdwDyAKxhFAAK8fsm0RSI617.png

这个图包含很多信息,但是图中的彩色字信息并非全部来自此图,更多的信息需要结合代码和寄存器描述来获得:

1.HSI被配置为48M是通过启动文件中的SystemInit函数得知的。

2.系统选择HSI作为启动时钟是通过编程手册“时钟与复位”一章得知的。

3.HSI之后的预分频器被设置为6分频,是通过查看指示该分频器的寄存器得知的。

下面以信息3为例,讲解如何查看此图中的相关寄存器:

在经过SYSCTRL_CR0.SYSCLK寄存器选择之后,系统时钟SysClk会在经过分频后送入内核与各个外设,这一信息流程图与粉色箭头已经清晰展示。

在手写箭头指向的方框中,有1、...、16的字样,表示该预分频器可以进行这些倍数的分频。所谓分频比如48M,6分频,其分频结果就是48M/6 = 8M,2分频就是24M,简单的除法。

方框下方是该分频器对应的控制寄存器,寄存器的名字并不一定完全叫这个,但是这个名字可以很容易就被理解为预分频器控制相关的寄存器,该寄存器名字拆解版本是:SYS(系统)CTRL(控制)HSI.DIV(分频),这套命名系统是通用的,即使使用的是别的单片机,也可以根据这套命名规则快速确认寄存器的功能。

通过查看编程手册时钟与复位章节的寄存器描述,此寄存器DIV位的值默认为6。而HSI频率的设置则是该寄存[10:0]位的TRIM位决定的。

wKgaomTdwO-ARVEbAANsG5JIU9c938.png

只需要沿着紫色箭头的方向配置相关的寄存器,单片机就能够正常启动,但这一步并不需要开发者亲自去做,芯片厂家提供的启动文件和库可以自动完成这一步。但不论怎么说RC振荡器的精度有限,且8M的速度放在48MHz主频的内核上也确实不够看,因此大部分时候,都需要使用外部晶振提供的时钟,通过锁相环倍频之后达到48M,最后通过时钟线送入内核和外设。下面讲解怎么配置才能得到48MHz的高精度高速时钟信号:

wKgZomTdwPeABsC_AAHbKWwcGyk219.png

首先,电路板上需要有一个在范围内的晶体,晶体的两个引脚需要在外围电路的配合下连接到单片机的晶体输入引脚,同时IO需要工作在正确的工作模式。

wKgaomTdwP6ABx8DAAV6t55immg802.png

硬件部分准备完成了,接下来就是配置HSE和PLL相关的寄存器了。下面是相关的配置代码:

wKgZomTdwQaAW00-AAQIv59yul8789.png

首先需要打开HSE功能,允许单片机接收HSE提供的震荡信号。

然后配置PLL的分频系数,这将决定锁相环的输出频率,此处设置为1分频,也就是不分频。

使能PLL功能,并告知用到的时钟源、时钟频率、倍频系数,这对应三个入口参数

将flash的等待周期设置为3个时钟周期,部分单片机需要进行这一步操作,原因会在后面细说。

进行时钟切换,按照注释完成准备工作之后即可切换。

先查看HSE使能函数:

wKgZomTdwRuAfNh8AAT8ZHB2ruM247.png

仅展示主体部分,函数注释未列出,但CW32的时钟配置库函数注释相对来说很详细,推荐配置都写在函数注释里面,不懂得寄存器配置的小伙伴可以直接根据推荐进行配置,如果有更深入的需求,直接查看芯片手册对应的寄存器描述即可。后续的参数配置直接根据注释进行推荐配置即可,在PLL与HSE相关的寄存器配置完成之后,48M的时钟信号就已经产生了,只不过系统的时钟源还不是这个(记得那个梯形的选择器吗?),下一步就是切换时钟源,让系统工作在48M的频率下。切换时钟?我知道你很急,但是先别急,虽然一般情况下确实可以直接切换了,但是CW32有个需要注意的地方,那就是flash的配置。

为什么CW32需要进行flash配置之后才能切换时钟源?

我们都知道,写的程序都存储在flash中,等到需要执行程序的时候,CPU会和flash进行通信,取出flash中的指令然后执行。问题来了,既然程序需要通过某种通信方式传输到CPU,那这个通信传输的速度一定有个上限,这个上限就是flash的读写速度上限,当flash的实际读写速度与其允许的读写速度不匹配时,flash与CPU之间的通信就会出现问题,之后就可以理解为CPU有高速取指令需求,但是flash无法在这个速度下跟上CPU的请求速度,这个通信就断了,程序就不动了。因此我们需要设置flash,让他多等几个时钟周期再响应,这样flash就能适应更高频率的读取请求,并且在此程序的配置中,需要使能预取指令和缓存功能,这两个功能可以让flash与CPU更好地配合以实现单片机的高速运行。障碍都解决了,接下来真的只需要切换时钟即可。对比部分:这一部分会列出stm32f103c8t6单片机的标准库上电时钟设置代码进行对比。

wKgaomTdwSKAVcsnAAVZ3G6pRfk885.png

wKgZomTdwSqAJd-OAAQvDxFWOBE389.png

这里的条件编译,我选择最后一条,如果需要上电设置为别的频率,只需要在同一个文件中把宏定义注释取消即可。

wKgaomTdwTWAa7gKAAIBK-i6-iw725.png

下面列出设置时钟到72M函数的一部分,此函数与CW32的时钟初始化顺序几乎是一模一样,首先需要将HSE使能并等待时钟稳定,之后设置PLL的参数,配置flash为2个等待周期,再使能PLL输出,等待PLL时钟稳定再切换时钟。

wKgaomTdwTyAOC16AAJrDj8SmeE820.png

wKgaomTdwZmAHJLWAAGl2rHjPlY591.png

wKgaomTdwaSAXCQkAAIYa0uMiC4308.png

可以看出,即使是不同的芯片,他们在大部分地方的操作也是一样的,只是一些细节上有些许不同。

总结:

1.本章简单展示了如何查找手册来配置寄存器,且再次强调库函数的本质就是操作寄存器。

2.单片机都会有一个时钟树,时钟树的图可以在编程手册(不是数据表和内核手册)中找到。

3.部分单片机想要工作在高工作频率下,需要设置flash等待时间并打开缓存和预取指令使能。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5336

    浏览量

    120261
  • 时钟源
    +关注

    关注

    0

    文章

    93

    浏览量

    15958
  • CW32
    +关注

    关注

    1

    文章

    203

    浏览量

    629
收藏 人收藏

    评论

    相关推荐

    那么点详细CW32学习笔记】单片机启动\库函数构成

    此篇文章是CW32F030C8T6的参考资料,很详细,适合初学者。
    的头像 发表于 08-10 11:13 1116次阅读
    【<b class='flag-5'>有</b><b class='flag-5'>那么点</b><b class='flag-5'>详细</b>的<b class='flag-5'>CW32</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>】单片机启动\库函数构成

    那么点详细CW32学习笔记】通用定时器——输出比较

    本章以CW32通用定时器为例介绍单片机定时器的用法。 定时器是单片机中一个非常传统且重要的外设,定时器的 本质其实就是一个计数器 ,只不过被计数的对象是定时器的时钟源。定时器要正常工作,需要这几
    的头像 发表于 12-28 11:24 1314次阅读
    【<b class='flag-5'>有</b><b class='flag-5'>那么点</b><b class='flag-5'>详细</b>的<b class='flag-5'>CW32</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>】通用定时器——输出比较

    CW32移植Free-RTOS】CW32开发者扶持计划

    CW32配置Free-RTOS全过程,CW32开发者扶持计划
    的头像 发表于 04-18 09:38 6142次阅读
    【<b class='flag-5'>CW32</b>移植Free-RTOS】<b class='flag-5'>CW32</b>开发者扶持计划

    那么点详细CW32学习笔记】模数转换器

    来说,想要判断大小就需要有对比,因此该数字指示的电压大小实际上是一个比较的结果。 ADC将需要测量的电压信号Ut与已知电压的信号U作比较,并最终输出一个数字表示Ut相当于多少比例的U。 接下来就可以看看CW32的ADC外设结构框图了,
    的头像 发表于 02-29 09:41 769次阅读
    【<b class='flag-5'>有</b><b class='flag-5'>那么点</b><b class='flag-5'>详细</b>的<b class='flag-5'>CW32</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>】模数转换器

    【应用笔记CW32 自举程序中使用的 ISP 协议

    提供的 ISP 模式,通过 UART 串口方便地实现对 CW32 微控制器片上 FLASH主存储器的擦除和烧写。本应用笔记将介绍如何进入 CW32 微控制器 ISP 模式,以及所使用的 ISP 协议,并
    发表于 06-06 13:26

    CW32 MCU开发资料汇总(手册、工具、固件库)

    1、CW32 MCU数据手册:*附件:CW32L083数据手册.pdf*附件:CW32F030数据手册
    发表于 07-27 14:47

    STM32Cube学习教程之时钟配置详细资料概述

    本文档的主要内容详细介绍的是STM32Cube学习教程之时钟配置详细资料概述。
    发表于 08-14 08:00 3次下载
    STM32Cube<b class='flag-5'>学习</b>教程之<b class='flag-5'>时钟</b><b class='flag-5'>树</b><b class='flag-5'>配置</b>的<b class='flag-5'>详细</b>资料概述

    应用笔记(二)| 武汉芯源CW32自举程序中使用的ISP协议

    CW32微控制器片上FLASH主存储器的擦除和烧写。本应用笔记将介绍如何进入CW32微控制器ISP模式,以及所使用的ISP协议,并详细介绍支持的每个命令。01目标芯片进入ISP模式的
    的头像 发表于 07-11 16:08 1448次阅读
    应用<b class='flag-5'>笔记</b>(二)| 武汉芯源<b class='flag-5'>CW32</b>自举程序中使用的ISP协议

    cw32和gd32的区别

    cw32和gd32的区别 CW32和GD32是两种不同的芯片系列,分别由WCH和GigaDevice公司推出,两者很多不同之处,下面我们来详细介绍。 首先从
    的头像 发表于 08-16 11:15 1966次阅读

    CW32实时时钟(RTC)介绍

    CW32实时时钟(RTC)介绍
    的头像 发表于 10-24 15:36 1142次阅读
    <b class='flag-5'>CW32</b>实时<b class='flag-5'>时钟</b>(RTC)介绍

    应用笔记-CW32 自举程序中使用的 ISP 协议

    ,通过UART串口方便地实现对CW32微控制器片上FLASH主存储器的擦除和烧写。本应用笔记将介绍如何进入CW32微控制器ISP模式,以及所使用的ISP协议,并详细介绍支持的每个命令。
    发表于 06-06 13:37 7次下载

    基于CW32的物联网应用

    CW32】基于CW32的物联网应用
    的头像 发表于 11-02 15:55 791次阅读
    基于<b class='flag-5'>CW32</b>的物联网应用

    那么点详细CW32学习笔记】通用异步收发器—发送篇

    本章介绍CW32通用异步收发器的使用。 虽然大部分时候会被简单称为“串口”,但实际上 用“串口”来指代UART并不正确 。串口对应并口的概念,在串口通信中,数据被以二进制形式发送,并且每次发送都只
    的头像 发表于 11-17 17:30 764次阅读
    【<b class='flag-5'>有</b><b class='flag-5'>那么点</b><b class='flag-5'>详细</b>的<b class='flag-5'>CW32</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>】通用异步收发器—发送篇

    那么点详细CW32学习笔记】IIC接口-主机发送

    例程链接 : https://pan.baidu.com/s/1s1XwqDFkO8fK4SRSTKsNhA?pwd=mshk 提取码 :mshk 本章将介绍CW32的IIC接口,并最终点亮一块
    的头像 发表于 01-11 09:53 622次阅读
    【<b class='flag-5'>有</b><b class='flag-5'>那么点</b><b class='flag-5'>详细</b>的<b class='flag-5'>CW32</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>】IIC接口-主机发送

    那么点详细CW32学习笔记】IIC接口-OLED驱动

    ,实际上就是密集LED点阵,所以必定有用于控制大量LED灯的驱动器,本教学使用的OLED驱动是SSD1306,该驱动器多种通信接口,这里使用IIC接口(具体使用什么接口,数据手册上会有详细介绍) 根据SSD1306数据
    的头像 发表于 01-11 09:49 758次阅读
    【<b class='flag-5'>有</b><b class='flag-5'>那么点</b><b class='flag-5'>详细</b>的<b class='flag-5'>CW32</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>】IIC接口-OLED驱动