MSP432学习笔记12:MSP432时钟源与定时器A时钟源配置

news2024/10/7 20:27:39

今日深入学习一下MSP432的时钟源与配置,

可以结合之前的滴答计时器相关文章:

MSP432学习笔记4:时钟与滴答计时器_NULL指向我的博客-CSDN博客

 

目录

MSP432有关时钟源系统的性能:

七种时钟源:

五种时钟:

 主函数时钟源初始化:

 定时器A初始化选择时钟源:

ACLK的时钟源频率默认是REFO超低功耗的32768Hz频率:

实验验证:

 下回预告:

 杂毛笔记记录:


MSP432有关时钟源系统的性能:

 首先看到商家产品训练手册的吹股环节:

整个时钟系统可分为两个部分:
一个部分适用于高速和高性能的操作,另一个部分则专门 针对超低功耗应用进行了优化。
如此一来,通过组合,这两组时钟便可涵盖从 10KHz 48MHz 的较大工作频率范围,和各种应用场合。

 

 七种时钟源:

MSP432P4xx 系列共计提供了七种时钟源:
DCO 是高频的数控振荡器。这是一种最为常用的高频内部时钟源,它可在任意环
境下生成 1 48 MHz 的高频率时钟。
HFXT 是通过外接高频晶体实现的高频时钟源,同样可以实现 1 48 MHz 的任意高
频率时钟源。
MODOSC 是一种可运行于 24MHz 的内部振荡器。 MODOSC 适用于内部模拟模块
(仅 ADC 或闪存),特别面向于需要 24MHz 时钟源方可运行的 1MHz ADC
SYSOSC 是内部的低频率振荡器,运行于 5MHz ,对于一些较低频率的操作和应用,
可使用 SYSOSC
LFXT 是通过外接低频晶体实现的低频时钟,此类晶体为典型 32KHz 晶体。它可用
于运行精确的 RTC 时钟。
 REFO 是低频的内部振荡器,可生成 128KHz 的时钟信号,同时它还可被分频为
32KHz 用于 RTC
最后则是超低频振荡器 VLO ,它是另一种可生成 10KHz 时钟信号的内部振荡器。

 

        DCO数控时钟源,默认频率为3MHz,可通过程序改变频率,使用内部电阻时精度不高,

        可外接精密电阻使用,通过DCO可以时钟超频至64MHz。(超频有风险,试玩需谨慎)

        VLO超低功耗低频时钟源,典型频率为9.4KHz。

        REFO低频时钟源,典型频率为32768Hz和128KHz。

        MODOSC模块振荡器,典型频率为25MHz。可做ADC时钟源,采样频率1M。

        SYSOSC系统震荡器,典型频率为5MHz。可做ADC时钟源,采样频率200K。

五种时钟:

MCLK ,它是用于驱动 CPU 以及潜在 DMA 运算的主时钟。
SMCLK 高速 SMCLK(也称为 HSMCLK) 。这两种时钟可用于驱动不同外设,例如
ADC 、高速计时器和通信模块。
ACLK BCLK 是专为超低功耗模式而优化的低频时钟,适用于低频和低功耗模式。
需特别提出的是, ACLK BCLK 均可在从 128KHz 10KHz 范围内的任意环境下运 行。

 

 

 主函数时钟源初始化:

以下为空项目工程对时钟的配置情况:

外部高速晶振、MCLK、SMCLK都被配置为48MHz

外部低速晶振配置为 32768Hz


#include "sysinit.h"

//外部时钟 High:48MHz  Low:32768Hz
// MCLK=48MHz  SMCLK=48MHz
void SysInit(void)
{
    WDTCTL = WDTPW | WDTHOLD; // 停用看门狗

    /* 第一步需要配置我们的时钟引脚,这里的高速时钟使用的是外部晶振*/
    //低速时钟初始化比较慢
    MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_PJ, GPIO_PIN3 | GPIO_PIN2, GPIO_PRIMARY_MODULE_FUNCTION); //High
    MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_PJ, GPIO_PIN0 | GPIO_PIN1, GPIO_PRIMARY_MODULE_FUNCTION); //Low
    CS_setExternalClockSourceFrequency(32768, 48000000);

    /* Starting HFXT in non-bypass mode without a timeout. Before we start
     * we have to change VCORE to 1 to support the 48MHz frequency */
    MAP_PCM_setCoreVoltageLevel(PCM_VCORE1);

    /* 更改闪存控制器使用的等待状态数用于读取操作。
    当改变时钟的频率范围时,必须使用此函数以允许可读闪存
    通俗来讲就是CPU跑太快了,Flash跟不上,让CPU等等它 */
    MAP_FlashCtl_setWaitState(FLASH_BANK0, 1);
    MAP_FlashCtl_setWaitState(FLASH_BANK1, 1);

    CS_startHFXT(false);          //这是晶体 需要驱动
    CS_startLFXT(CS_LFXT_DRIVE3); //驱动等级3

    MAP_CS_initClockSignal(CS_MCLK, CS_HFXTCLK_SELECT, CS_CLOCK_DIVIDER_1);  //48MHz   16分频时,滴答延时可达到最长
    MAP_CS_initClockSignal(CS_SMCLK, CS_HFXTCLK_SELECT, CS_CLOCK_DIVIDER_1); //48MHz
}


/*
这个函数是针对MSP432微控制器的系统初始化函数。下面是对函数每个步骤的详细解释:

1. 停用看门狗:
   通过将WDTCTL寄存器设置为WDTPW | WDTHOLD,将看门狗定时器停用。

2. 配置时钟引脚:
   使用GPIO端口 PJ(引脚 2、3和0、1)将引脚配置为带有主要模块功能的外设输出引脚。在这里,引脚2和3用作高速时钟引脚,引脚0和1用作低速时钟引脚。

3. 设置外部晶振频率:
   使用CS_setExternalClockSourceFrequency函数设置外部晶振的频率。在这里,外部晶振的频率被设置为32768Hz,并且主时钟被设置为48000000Hz。

4. 启动48MHz高速外部晶振(HFXT):
   在非旁路模式下启动HFXT,并设置VCORE电压级别为1以支持48MHz频率。

5. 设置闪存控制器的等待状态:
   使用FlashCtl_setWaitState函数设置引导加载程序等待状态,以满足增加时钟频率的要求。在这里,设置FLASH_BANK0和FLASH_BANK1的等待状态为1。

6. 启动低速外部晶振(LFXT):
   使用CS_startLFXT函数启动LFXT,并设置驱动等级为3。

7. 初始化主时钟(MCLK)和子系统时钟(SMCLK):
   使用CS_initClockSignal函数将MCLK和SMCLK时钟源设置为HFXTCLK,并设置时钟分频器为1,从而将主时钟和子系统时钟设置为48MHz。


*/

 

 定时器A初始化选择时钟源:

 在主时钟配置结束后,例如定时器A的初始化,一般也会要求我们选择时钟,

定时器A有四种时钟可以选择,不同频率任务的定时器选择的时钟源也应该不同:

//*****************************************************************************
//
// The following are values that can be passed to the clockSource parameter
//
//*****************************************************************************
#define TIMER_A_CLOCKSOURCE_EXTERNAL_TXCLK                        TIMER_A_CTL_SSEL__TACLK
#define TIMER_A_CLOCKSOURCE_ACLK                                  TIMER_A_CTL_SSEL__ACLK
#define TIMER_A_CLOCKSOURCE_SMCLK                                 TIMER_A_CTL_SSEL__SMCLK
#define TIMER_A_CLOCKSOURCE_INVERTED_EXTERNAL_TXCLK               TIMER_A_CTL_SSEL__INCLK

根据MSP432上的默认时钟频率设置,这些地址表示的时钟源的频率如下:

TIMER_A_CLOCKSOURCE_EXTERNAL_TXCLK:

外部时钟(TXCLK)的频率。

TIMER_A_CLOCKSOURCE_ACLK:

ACLK(Auxiliary Clock)的频率。

TIMER_A_CLOCKSOURCE_SMCLK:

SMCLK(Sub-main Clock)的频率。

TIMER_A_CLOCKSOURCE_INVERTED_EXTERNAL_TXCLK:

反转后的外部时钟(TXCLK)的频率。

 

ACLK的时钟源频率默认是REFO超低功耗的32768Hz频率:

MSP432微控制器的ACLK默认时钟源是内部低功耗晶振(LFXT1CLK)。

如果不进行ACLK的时钟源配置,MSP432会默认使用LFXT1CLK作为ACLK的时钟源。这个时钟源可以在外部连接一个低功耗晶振(通常是32.768kHz的晶振),也可以使用MSP432内部提供的内部晶振。

注意,如果需要正确配置ACLK的时钟源,需要使用相应的时钟初始化函数进行配置,例如`CS_initClockSignal()`函数。

经过对时钟框图的研究,发现ACLK的时钟源频率默认是REFO超低功耗的32768Hz频率:

 

实验验证:

此部分仅为个人验证过程,就不贴出代码了!

 定时器中断控制串口每隔一秒发送测试字符串

 

定时器配置:

主函数相应标志:

 测试结果:

 

 

 下回预告:

定时器A的这俩默认时钟源配置将在下节文章做研究

 

 杂毛笔记记录:

 

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

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

相关文章

创新实践,复合机器人采摘运输教育沙盘案例研究

引言 在之前我们已经介绍了水果采摘和分拣机器人的应用场景,今天我们来介绍复合机器人水果采摘运输的场景。 作为最热门的技术领域,机器人技术正在彻底改变各行各业,推动全球创新。为了满足这一快速发展领域对专业技术人才日益增长的需求&a…

【Matlab】智能优化算法_广义正态分布优化算法GNDO

【Matlab】智能优化算法_广义正态分布优化算法GNDO 1.背景介绍2.数学模型2.1 局部开采2.2 全局勘探 3.文件结构4.伪代码5.参考文献 1.背景介绍 GNDO受到正态分布理论的启发。正态分布也称为高斯分布,是描述自然现象的一个非常重要的工具。正态分布可以定义如下。假设…

NLP Transformer的Decoder的输入输出都是什么?能解释一下每个部分都是什么?

要弄清楚Decoder的输入输出,关键在于图示三个箭头的位置: 以翻译为例: 输入:我爱中国输出: I Love China 因为输入(“我爱中国”)在Encoder中进行了编码,这里我们具体讨论Decoder的…

【工具推荐】企业微信、企业飞书接口调用工具

github地址: GitHub - fasnow/idebug: 企业微信、企业飞书接口调用工具。 简介 企业微信、企业飞书接口调用工具。 使用方法 wechat模块 使用use wechat 选择模块。 首先设置corpid和corpsecret,如有需要可以设置代理,之后再执行run命令。 导出通信…

飞行动力学 - 第6节-part3-风对航程的影响 之 基础点摘要

飞行动力学 - 第6节-part3-风对航程的影响 之 基础点摘要 1. 风对航程的影响2. 典型飞机航程3. 世界上最长航线4. 参考资料 1. 风对航程的影响 可以认为风移动的距离相当于飞机在静止空间移动的距离加上风移动的距离。 在物理上可以简单的理解为两个矢量叠加和。 回顾喷气式&…

WebGPU实战3D电商

在过去的几年里,我们一直在为 WebGPU 编写新版本的 Babylon.js 引擎。 随着下一代 Web 3D 即将在Chrome 102~103版本上公开WebGPU 1.0 ,人们的兴奋情绪与日俱增。 在这篇博文中,我将快速概述这个新的 Babylon.js WebGPU 引擎,并将…

100种思维模型之安全边际思维模型-92

安全边际, 简而言之即距离某一件糟糕的事件发生,还有多大的空间,安全边际越高,我们就越安全! 安全边际思维模型一个 让生活变得更从容 的 思维模型。 01、何谓安全边际思维模型 一、安全边际思维 安全边际 源于…

千云探探监测到7月4日法国Facebook社交网络异常

针对法国近期出现的骚乱游行,法国司法部长莫雷蒂7月1日时候表示,法国检察官要求互联网运营商提供在社交平台Snapchat上号召骚乱年轻人的IP地址。 法国总统马克龙7月4日表示:“如果事态失控,我们可能需要监管或关闭它们&#xff0…

idea 添加类库

打开项目中的独立环境文件夹,右键打开终端输入安装类库的命令: pip install requests pip3 install BeautifulSoup4 检查这里是否把类库加进来了,加进来就完成!

第十二章 kafka

Producer:Producer即生产者,消息的产生者,是消息的入口。 kafka cluster: Broker:Broker是kafka实例,每个服务器上有一个或多个kafka的实例,我们姑且认为每个broker对应一台服务器。每个kafka集群内的broker都有一个不重复的编号,如图中的broker-0、broker-1等…… 主…

Windows如何恢复已删除的Word文档?

案例:可以恢复已删除的Word文档吗? “大家好,我遇到了一个问题,需要大家的帮助。昨天我编辑了一个Word文档并保存到了桌面上,但当我今天再次打开电脑时,它就不见了!昨天工作完成后&#xff…

mysql数据库以及管理流程

目录 1.基本概念 2.DBMS工作模式 3.关系型数据库和非关系型数据库 4.数据库管理 sql语句 5.一些命令 6.增删改查命令 DDL DML 7.案例 创建表 删除 DML管理表中内容 增加内容 改内容 删内容 DCL具体应用 1.基本概念 1.数据 描述事物的符号记录(数字 文字 图像等) …

【报错记录】解决CentOS免密失败的问题,以及解决免密问题的排查流程

前言 本文相当于对之前的文章进行的补充【原创】三台CentOS7非root用户间实现相互间的免密登录_DCTANT的博客-CSDN博客 现场遇到一台旧服务器与其他服务器免密失败的问题,明明.ssh目录中authorized_keys中的公钥设置都是正确的,但是别的服务器连它都得…

基础篇--STM32原理图设计

学会查看数据手册 芯片数据手册获取方式 ST官网:https://www.st.comST中文社区网:https://www.stmcu.org.cn/ 数据手册内容概要 芯片的基本参数(STM32F103ZET6为例) 主频/FLASH/SRAM : 72MHz/512KB/64KB工作电压/…

vue3 + axios 实现带进度条的下载对话框

文章目录 问题实现采用axios实现下载请求写一个进度下载对话框调用对话框 参考链接 问题 上传下载是前端经常面临的两大需求,当文件比较大时,下载进度显示能提升用户体验。本文结合vue3介绍下载对话框的实现。当点击页面中下载按钮后,会呈现…

在日常学习生活中,究竟该如何保持稳定的情绪呢?

方向一:分享工作中让你有强烈情绪波动的事情 编程仅仅是工程的过程实践化,投入进去确实会出现精神集中,出现问题排查过程会绞尽脑汁,甚至抓耳挠腮,当发现问题无法解决时不如放下来想一想,是不是知识点掌握不…

按日,周,年统计,无的数据补充0

需求:按日-周-年统计。统计涉及到3张表数据。 写sql。先把3张表数据摘取出来,只需对3张表的时间做分组统计即可。 按日统计 select DAY(dateff) as time,IFNULL(count(id),0)as num from(select create_time as dateff,id as id from cz_taxi_orders…

go语言开发 三种容器类型:数组、切片、map

目录 go语言中的三种容器类型:数组,切片,map go 与 python的容器类型对比 python go: 数组: 数组的定义:(定义数组的格式、二维数组、初始化、任意长度初始化、取值) 数组的…

swager异常_Failed to load API definition.

现象 Fetch error Internal Server Error /swagger/base/swagger.json 排查 按照以往的经历基本都是因为Conroller中的类中有非对外调用的函数,但是用了public修饰函数,会导致这个问题。这个问题通常通过查看git/svn中最近的提交记录,找出…

hadoop -Unable to start failover controller. Parent znode does not exist

Unable to start failover controller. Parent znode does not exist 问题描述 今天使用星环的TDH集群时,HDFS服务宕掉,在后台查看namenode 始终起不来 kubectl get pod -o wide | grep hdfs 如上图,k8s pod 起来又crash 掉,然后…