Timer0/1设置时钟计算中断时间

news/2024/5/6 3:58:08/文章来源:https://blog.csdn.net/qq_51679917/article/details/130388382

        时钟一般分为外部晶振时钟和内部时钟,相对而说,外部晶振时钟的精准度比内部系统时钟高,时间计算的更准。除非产品需要一般都不会用外部晶振时钟,因为好的东西贵啊,成本高。

        本文主要介绍如何利用时钟设置Timer0/1(RTC、PWM中断、ADC),中断时间如何设置。

基本知识 1 MHz=1000 kHz=1000 000 Hz  1s = 1 000ms

选择定时器功能之前都要选择时钟,然后选择分频,才能确定中断时间

目录

一、时钟结构

二、设置Timer0/1时钟

2.1、RC32K(低功耗时钟)

2.2、RC1M (系统时钟)

2.2.1 PLL分频配置

 2.2.2 TIMER0/1 Get分频选择

 三、计算中断时间

3.1 RC_32KHz 计算中断时间

3.2 RC_1MHz计算中断时间


一、时钟结构

如下图所示:

RC32KHz(RC128KHz4分频)为低速时钟(低功耗模式)、

RC1MHz 为系统时钟(能连接各个模块)、

XOSC为外部晶振时钟

 

时钟结构说明:
(1). 系统包含 3 个模拟时钟源: RC128KHz、RC1MHz 和外部晶振 ,其中 RC128KHz 在模拟端经过 4 分频后形成 RC32KHz 时钟源送入数字系统使用;其中 RC1MHz 在模拟端经过 4 分频后形成 RC250KHz 时钟源送入数字 系统使用;外部晶振典型支持 8MHz 和 16MHz;
(2). 模拟 PLL 锁相环接入时钟源支持内部 RC1MHz 和外部晶振时钟,但接入时钟 仅支持 1MHz ,因此当 PLL 接 入时钟源选择外部晶振时,必须根据不同的外部晶振频率进行 8 分频或者 16 分频至 1MHz;
(3). 系统时钟为内部 PLL 输出时钟; PLL 输出时钟频率最大 32MHz ,并可根据不同应用需求配置 SYS_CLK_SEL 进行分频;当选择外部晶振时钟作为系统时钟或者晶振时钟作为 PLL 接入时钟源时,在低功耗唤醒时, 由于晶振起振时间影响,系统等待的时间将远大于选择内部 RC1MHz 作为 PLL 接入时钟源并且作为系统 时钟的情况;
(4). CAN 模块工作时钟支持外部晶振和内部系统时钟,通过程序配置,需要注意的是当选择为晶振作为工作 时钟时,存在与系统运行时钟的跨时域问题,需要合理配置 SYS_CAN_DOMAIN 寄存器;当 CAN 模块时钟 未供给至 CAN 模块时,CAN 模块的任何寄存器均无法被存取,存取动作将可能导致系统出现故障;
(5). WDT 计数时钟为 RC32KHz 以及其 32 分频,软件可选;
(6). RTC 计数时钟 RC32KHz 以及其 32 分频、外部晶振的 32 分频,软件可选;
(7). 所有外设以及系统时钟可被门控,用于降低功耗;

二、设置Timer0/1时钟

 根据芯片手册选择时钟可选

2.1、RC32K(低功耗时钟)

低功耗时钟,RC_128K,128kHZ 4分频后就是RC_32K

2.2、RC1M (系统时钟)

2.2.1 PLL分频配置

RC1M   输入到PLL1MHz,输出32MHZ

RC 1MHz →PLL 32MHz 选择如图所示,如果没有勾选就要配置寄存器。

 我们看到PLL寄存器中没有外部时钟的分频就证明该芯片无外部晶振时钟。

 2.2.2 TIMER0/1 Get分频选择

PLL输出32MHz 到G,然后选择2分频 到TIMER0/1。

初始化勾选或者寄存器选择

 

 三、计算中断时间

3.1 RC_32KHz 计算中断时间

    32KHz = 32 000  Hz ,则1 S 为 32 000 Hz (0x7D00) ,1ms 为32 Hz(0x20)

3.2 RC_1MHz计算中断时间

RC_1MHZ →1MHZ→PLL(32MHz)→G(2分频)→16MHz

1S 为 16MHz   16MHz = 16 000 000Hz      1ms 为 16 000Hz(0X3E80)

/*!\brief      timer0/1 initialize\param[in]  timerx: TIMERx(0,1)\param[in]	timer_cfg: timer0/1 config\param[in]	timer_mod: timer0/1 mod count\param[out] none\retval     none
*/
void timer_init(uint32_t timerx,uint8_t timer_cfg,uint16_t timer_mod)
{TIMER_CFG(timerx) = timer_cfg;TIMER_MOD(timerx) = timer_mod;if(timerx == (uint32_t)TIMER0){if((timer_cfg & TIMER_CFG_IE) != 0U){NVIC_EnableIRQ(TIMER0_IRQn);}else{NVIC_DisableIRQ(TIMER0_IRQn);}}else{if((timer_cfg & TIMER_CFG_IE) != 0U){NVIC_EnableIRQ(TIMER1_IRQn);}else{NVIC_DisableIRQ(TIMER1_IRQn);}}
}

timer_init(TIMER0,0x2B,0x3E80);  0X2B 为各个寄存器配置,0x3E80为1ms产生一次中断。

其他的中断事件基本与之一样,模仿即可。

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

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

相关文章

厨电新十年,不可逆的行业分化与老板电器的数字进化

“人生就像滚雪球,最重要之事是发现湿雪和长长的山坡。”股神巴菲特的这句名言,让坡是否长、雪是否厚成为人们评价一个行业、一家公司的标准之一。 家电行业,厨电曾是最后一块“坡长雪厚”之地,投资者也对相关企业给出了相当的热…

MySQL根据中文姓名排序查询

在MySQL中当说到进行排序查询时,大家的第一反应就是使用 ORDER BY 方法指定列进行排序,但是如果要指定列为中文数据按照首字母排序时,就会发现 ORDER BY 方法排序的顺序其实是有问题的。 我们先来测试下正常使用 ORDER BY 排序: 指…

35岁程序员被裁赔偿27万,公司又涨薪让我回去,前提是退还补偿金,能回吗?

在大多数人眼里,35岁似乎都是一道槛,互联网界一直都有着“程序员是吃青春饭”的说法,。 如果在35岁的时候被裁能获得27万的赔偿,公司又涨薪请你回去上班,你会怎么选? 最近,就有一位朋友在网上…

剑指 Offer 42. 连续子数组的最大和:C语言解法

剑指 Offer 42. 连续子数组的最大和 - 力扣(Leetcode) 输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。 要求时间复杂度为O(n)。 实例: 输入: nums [-2,1,-3,4,-1,2,1,-5,4] 输出: …

SOLIDWORKS认证考试流程

一、SOLIDWORKS认证考试前的准备工作 1、检查电脑硬件设备是否可以正常使用,如键盘鼠标等。 2、检查Solidworks软件是否可以正常使用。 3、关闭电脑所有杀毒软件。 4、检查电脑网络(外网)是否正常。 5.请联系我们获取考试系统软件安装包。…

Maven 下载及配置详细步骤

1、Maven 下载 Maven 官网地址:https://maven.apache.org/download.cgi(opens new window) 进入 Maven 官网,点击 archives 下载版本 3.6.2 找到下载的压缩包并解压

ByteHouse云数仓版查询性能优化和MySQL生态完善

ByteHouse云数仓版是字节跳动数据平台团队在复用开源 ClickHouse runtime 的基础上,基于云原生架构重构设计,并新增和优化了大量功能。在字节内部,ByteHouse被广泛用于各类实时分析领域,最大的一个集群规模大于2400节点&#xff0…

workerman开发者必须知道的几个问题

1、windows环境限制 windows系统下workerman单个进程仅支持200个连接。 windows系统下无法使用count参数设置多进程。 windows系统下无法使用status、stop、reload、restart等命令。 windows系统下无法守护进程,cmd窗口关掉后服务即停止。 windows系统下无法在一个…

初识Spring(普通方式Bean的读取过程)

1.SpringBoot 相⽐于 Servlet 的优点总结 1. 添加外部 jar 更容易,不易出错(版本问题⽆需关注); 2. 调试项⽬更加⽅便,⽆需配置 Tomcat; 3. 发布项⽬更加⽅便,⽆需配置 Tomcat; 4. …

Redis学习笔记大全

文章目录 1、redis概述和安装1.1、安装redis1.2、启动redis方式1:前台启动(不推荐)方式2:后端启动(推荐) 1.3、关闭redis1.4、进入redis命令窗口1.5、redis命令大全1.6、redis介绍相关知识 2、redis 5大数据…

C#:如何用分部类将一个大文件改为多个小文件?

很多时候我们会发现,写来写去,一个文件慢慢就变得很大了,行数过千基本上就维护比较困难。 将公共代码模块化,可以减少一些代码,也是非常有效的。 那还有其它办法吗? 用 分部类 可以解决。 下面是简单的…

Java基础--->并发部分(1)

文章目录 线程基本概念线程的创建方式线程调度-------常用的方法线程的生命周期和状态并发编程的根本原因Java内存模型(JMM)多线程核心的根本问题volatile关键字保障原子性synchronized和ReentrantLock的区别 线程基本概念 ​ 进程是程序的一次执行过程,是系统运行程…

机器学习实战教程(十):逻辑回归

概述 逻辑回归(Logistic Regression)是一种用于解决二分类或多分类问题的统计学习方法。它以自变量线性组合的形式进行建模,并使用Sigmoid函数将结果映射到[0, 1]的值域内,表示样本属于某个类别的概率。 Logistic Regression是最…

STM32CubeMX配置I2C通讯

1.如上图所示点击New Project 2.如上图所示选择自己所开发的新品最后双击芯片型号 3.配置RCC,我的芯片使用的是外部高速晶振。这里如图所选。 4.配置一下串口 5.配置I2C 6.根据自己的硬件选择时钟源和主频 6.①填写项目名②选择项目路径③选择开发环境④获取代码 …

活动目录(Active Directory)安全审计

延迟响应变化的影响可能会使原本应该微不足道的颠簸滚雪球变成无法弥补的损害。这在 Windows Active Directory 环境中更为重要,因为这种延迟造成的损害可能会使组织损失数百万美元!在这种情况下,需要一个警惕的警报系统,该系统可…

云原生-k8s核心概念(pod,deploy,service,ingress,configmap,volume)

Gitee-k8s学习 云原生实战-kubernetes核心实战 namespace Namespace是kubernetes系统中的一种非常重要资源,它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离 Pod Pod可以认为是容器的封装,一个Pod中可以存在一个或者多个容器。 De…

从零搭建MySQL监控平台(mysql-exporter+Prometheus+Grafana)

文章目录 一、软件安装二、 软件配置配置mysql_exporter配置prometheus配置Grafana 本文是我自己在Macbook上本地从零开始搭建一套MySQL监控平台,监控的也是我本机的MySQL,过程包括prometheus、mysql_exporter、Grafana的配置与下载。 一、软件安装 我是…

Python一行代码实现文件共享【内网穿透公网访问】

目录 1. 前言 2. 视频教程 3. 本地文件服务器搭建 3.1 python的安装和设置 3.2 cpolar的安装和注册 4. 本地文件服务器的发布 4.1 Cpolar云端设置 4.2 Cpolar本地设置 5. 公网访问测试 6. 结语 转载自内网穿透工具的文章:Python一行代码实现文件共享【内网…

践行公益担当|人情如故,爱心依旧

爱心助学 情暖童心 随着改革开放,少数民族地区发生了翻天覆地的变化,城乡经济持续发展,人民生活水平日益提高。但对于很多居住在偏远山区的民族自然村,由于山区的地形限制,自然生存环境恶劣,交通及文化、教…

Revit砌体排砖的几种方法对比

方法简介 传统砌体深化排砖是绘图者使用CAD 软件通过二维想象进行排布,在墙面转角、两面或多面墙相互咬砌的位置,门窗洞口过梁的位置,构造柱等位置由于二维图形的局限性很难观察出排布是否合理。然而复杂区域砌体排布若出错…