Day04 嵌入式---基本定时器

定时器概述

1、软件定时原理

使⽤纯软件的⽅式实现定时功能。

存在的问题:定时不太精准。CPU死等。

1)压栈出栈需要花费时间

2)ARM流⽔线体系架构的原因

2、定时器定时原理

使用精准的时基,通过硬件方式,实现定时功能

时基单元:

分频模块(PSC):对外来的时钟进⾏分频。

计数模块(CNT):对来⾃分频模块输出的时钟脉冲进⾏计数。

⾃动重装载模块(ARR):它存储的是计数器的⽬标值,计数器每次累加就⽐较⼆者,⼆者相等计数器溢

出,当计数器溢出时,然后清零计数器寄存器。

核心:计时器

特性表:

常规定时器个数:TIM1 ~ TIM14 ⼗四个定时器

基本定时器:TIM6 TIM7

通⽤定时器:TIM2-TIM5 TIM9-TIM14

⾼级定时器:TIM1 TIM8

定时器类型定时器计数模式预分频系数产生DMA请求捕获/比较通道互补输出
基本定时器TIM6,TIM7161-65536可以0
通用定时器TIM2,TIM3,TIM4,TIM5161-65536可以4
高级定时器TIM1,TIM8161-65536可以4

3、定时器分类

计数模式和溢出条件

基本定时器

1、概念

STM32F407 基本定时器由时钟源、控制器、时基单元组成。 有两个基本定时器 TIM6 和 TIM7,它们

的功能完全相同,资源是完全独⽴的,可以同时使⽤。

2、特性

<1>16位的递增计数器。(计数值:0-65535)

<2>16位的预分频器。(分频系数:1-65536)

<3>可以发出⼀个触发信号,触发DAC进⾏数模转换

<4>在事件更新时(计数器溢出),可以产⽣中断 和 DMA请求

框图

溢出条件:CNT == ARR

时钟源

<1>定时器的核⼼是计算器,要实现计数功能,⾸先要给它⼀个时钟源。基本定时器时钟挂

载在 APB1 总线,所以它的时钟来⾃于 APB1 总线,但是基本定时器时钟不是直接由 APB1总线直

接提供,⽽是先经过⼀个倍频器。

<2>当 APB1 的预分频器系数为 1 时,这个倍频器系数为 1,当 APB1 的预分频器系数≥2

分频时,这个倍频器系数就为 2 。

<3>我们知道APB1的分频系数为4,≥2,所以,倍频系数为2,基本定时器的时钟源为 42

x2=84MHZ

控制器:控制定时器复位、使能、计数等功能之外,还可以⽤于触发 DAC 转换。

时基单元

<1>fCK_CNT的时钟计算: fCK_PSC / (PSC[15:0]+1)

<2>预分频器寄存器(TIMx_PSC)可以在运⾏过程中修改它的数值,新的预分频数值将在下

⼀个更新事件时起作⽤。

<3>影⼦寄存器:实际起作⽤的寄存器,不可直接访问。当更新事件发⽣时,值才写⼊影⼦

寄存器(可配置)。

定时器中断配置

<1>开启TIM时钟, RCC_APB1PeriphClockCmd();//根据不同定时器选择对应时钟函数

<2>配置NVIC, NVIC_Init();

<3>配置TIM,TIM_TimeBaseInit();

<4>开启中断。TIM_ITConfig();

<5>使能定时器:TIM_ITCmd();

<6>重写中断函数,TIM6_DAC_IRQHandler()

<7>清除中断标志位。void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);

时间


Tout:溢出时间,即定时多长时间
TIMxCLK:定时器时钟频率

  1. //定时器时钟源 TIMxCLK = 2 * PCLK1 25     
  2. //        PCLK1 = HCLK / 4 26     
  3. //        => TIMxCLK=HCLK/2=SystemCoreClock/2=84MHz 

ARR:定时器周期,初始化结构体时用 TIM_Period 表示

PSC:预分频大小,初始化结构体时用 TIM_Prescaler 表示
 
比如我们需要一个 1s 周期的定时器,具体这两个寄存器值该如何设置。

假设,我们先设置 TIMx_ARR寄存器值为 9999 ,即当 TIMx_CNT 从 0 开始计算,刚好等于 9999 时生成事件,总共计数 10000 次,那么如果此时时钟源周期 为 100us 即可得到刚好 1s 的定时周期。

接下来问题就是设置 TIMx_PSC 寄存器值使得 CK_CNT 输出为 100us 周期 (10000Hz) 的时钟。预分频器的输入时钟 CK_PSC 为 84MHz,所以设置预分频器值为 (8400-1) 即可满 足。

实验

使⽤基本定时器实现定时中断的功能,当计数事件溢出时,点亮LED。

void Tim_Init()
{RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,ENABLE);NVIC_InitTypeDef NVIC_InitStruct1;NVIC_InitStruct1.NVIC_IRQChannel=TIM6_DAC_IRQn;NVIC_InitStruct1.NVIC_IRQChannelCmd=ENABLE;NVIC_InitStruct1.NVIC_IRQChannelPreemptionPriority=0;NVIC_InitStruct1.NVIC_IRQChannelSubPriority=1;NVIC_Init(&NVIC_InitStruct1);TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct1;TIM_TimeBaseInitStruct1.TIM_Period=4999;TIM_TimeBaseInitStruct1.TIM_Prescaler=8399;TIM_TimeBaseInit(TIM6,&TIM_TimeBaseInitStruct1);TIM_ITConfig(TIM6,TIM_IT_Update,ENABLE); //定时中断配置TIM_Cmd(TIM6,ENABLE); //使能定时器
}
void TIM6_DAC_IRQHandler(void) //重写定时器中断函数
{if(TIM_GetITStatus(TIM6,TIM_IT_Update) == SET){GPIO_ToggleBits(GPIOF,GPIO_Pin_9); //翻转电平GPIO_ToggleBits(GPIOF,GPIO_Pin_10);TIM_ClearITPendingBit(TIM6,TIM_IT_Update);} 
}
int main()
{Tim_Init();Led_Init();Led1_Close();Led2_Close();while(1){TIM6_DAC_IRQHandler();}
}

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

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

相关文章

3d Slicer软件一种新的体绘制方式

vtk Multi-Volumne试验性体绘制方式&#xff0c;细节更丰富&#xff0c;影像更清晰&#xff0c;值得学习使用

前端本地化部署

前言 现在成熟的前端团队里面都有自己的内部构建平台&#xff0c;我司云长便是我们 CI/CD 的提效利器。我先来简单介绍下我司的云长&#xff0c;此云长非彼云长&#xff0c;云长主要做的是&#xff1a;获取部署的项目&#xff0c;分支&#xff0c;环境基本信息后开始拉取代码&…

Java ExecutorService 线程池(IO密集型、CPU密集型建议)

注&#xff1a;这是我很久之前在博客里面看到的&#xff0c;忘记是哪一篇了&#xff0c;分享一下 测试响应耗时 private String test1() {try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}return "test1";}private String test2() …

java基于redis实现分布式锁

文章目录 前言一、redis二、Redisson1.引入库2. 分布式锁3. 锁自动续期 总结 前言 上篇文章介绍了Java中锁的应用,在SpringBoot单体应用中完全够用,但是SpringCloud微服务集群中就力所不及了。 我的使用场景是某些微服务应用中使用spring注解的形式来完成定时任务的功能,服务集…

C++-带你走进多态(1)

1. 多态的概念 1.1 概念 多态的概念&#xff1a;通俗来说&#xff0c;就是多种形态&#xff0c;具体点就是去完成某个行为&#xff0c;当不同的对象去完成时会产生出不同的状态。 举个栗子&#xff1a;比如买票这个行为&#xff0c;当普通人买票时&#xff0c;是全价买票&am…

Jenkins解决Host key verification failed (2)

Jenkins解决Host key verification failed 分析原因情况 一、用OpenSSH的人都知ssh会把你每个你访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访问相同计算机时&#xff0c;OpenSSH会核对公钥。如果公钥不同&#xff0c;OpenSSH会发出警告&#xff0c;避免…

Spring中关于事务的一些方方面面

事务隔离级别&#xff1a; 先了解一些事务隔离级别有哪些&#xff1a; 未提交读(Read Uncommitted)&#xff1a; 允许脏读&#xff0c;也就是可能读取到其他会话中未提交事务修改的数据 提交读(Read Committed)&#xff1a; 只能读取到已经提交的数据。Oracle等多数数据库默…

车载电子电器架构 —— OEM基础技术概念开发流程

车载电子电器架构 —— 基础技术概念开发 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明…

Linux之JAVA环境配置jdkTomcatMySQL

目录 一. 安装jdk 1.1 查询是否有jdk 1.2 解压 1.3 配置环境变量 二. 安装Tomcat&#xff08;开机自启动&#xff09; 2.1 解压 2.2 启动tomcat 2.3 防火墙设置 2.4 创建启动脚本&#xff08;设置自启动&#xff0c;服务器开启即启动&#xff09; 三. MySQL安装&#xff08;…

vscode使用restClient实现各种http请求

vscode使用restClient实现各种http请求 一&#xff0c;安装插件 首先&#xff0c;我们要在vscode的扩展中&#xff0c;搜索rest Client&#xff0c;然后安装它&#xff0c;这里我已经安装过了。 安装后&#xff0c;我们就可以使用rest client插件进行http各种操作了。 二&…

二分图匹配详解

二分图的原始模型及相关概念 二分图又称作二部图&#xff0c;是图论中的一种特殊模型。 设G(V,E)G(V,E)是一个无向图。 如顶点集V可分割为两个互不相交的子集&#xff08;A, B&#xff09;&#xff0c;并且图中每条边(i&#xff0c;j)所关联的两个顶点 i 和 j 就都分属两个不…

定时任务处理-Spring Task

目录 1 前言 2 cron表达式 2.1 相关概念的介绍 2.2 举个例子(白雪警告) 2.3 使用网站自动生成 3 Spring Task的使用 3.1 导入依赖坐标 3.2 开启任务调度 3.3 自定义定时任务类 1 前言 当我们需要处理一些定时任务的时候就需要用到我们的Spring Task&#xff0c;接下来…

(done) 两个矩阵 “相似” 是什么意思?

参考视频&#xff1a;https://www.bilibili.com/video/BV1zu411673J/?spm_id_from333.337.search-card.all.click&vd_source7a1a0bc74158c6993c7355c5490fc600 参考资料&#xff1a;https://baike.baidu.com/item/%E7%9B%B8%E4%BC%BC%E7%9F%A9%E9%98%B5/10369874?frge_a…

小波变换模拟

小波变换是一种信号处理技术&#xff0c;通过在时间-频率域中使用基于小波的函数进行信号分析。小波变换在处理非平稳信号和图像时特别有用&#xff0c;可以将信号分解为不同频率的成分。它在数据压缩、去噪、特征提取等领域有广泛应用。 MATLAB中提供了用于二维离散小波变换的…

css4浮动+清除浮动

浮动 一.常见网页布局1.三种布局方式2.布局准则 二.浮动&#xff08;float&#xff09;1.好处2.概念3.三大特性4.使用5.常见网页布局模板6.注意点 三.清除浮动1.why2.本质3.语法4.四种way&#xff08;后三个都是给父级添加&#xff09;清除浮动总结 一.常见网页布局 1.三种布局…

Java8 Stream API 详解:流式编程进行数据处理

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Java全栈-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&…

切比雪夫(最小区域法)平面拟合算法

欢迎关注更多精彩 关注我&#xff0c;学习常用算法与数据结构&#xff0c;一题多解&#xff0c;降维打击。 本期话题&#xff1a;切比雪夫&#xff08;最小区域法&#xff09;平面拟合算法 相关背景和理论 点击前往 主要介绍了应用背景和如何转化成线性规划问题 平拟合输入和…

【C++精简版回顾】8.const

1.const数据成员 &#xff08;1&#xff09;const数据成员必须使用初始化参数列表 &#xff08;2&#xff09;不能修改 &#xff08;3&#xff09;不能修改必须初始化 class MM { public:MM() {}MM(int age, string name) :age(age), name(name) {}~MM() {cout << "…

SpringBoot和ApiFox整合快速上手

前置&#xff1a;IDEA版本IntelliJ IDEA 2023.2.4&#xff0c;Apifox 2.5.6 安装插件&#xff1a;Apifox Helper1.2.1 目录 1.文档生成 2.提取登录接口token 1.文档生成 把密钥配置到 导入成功:文档就会出现 2.提取登录接口token 之后我们再使用的时候&#xff0c;只需要配置…

2024.2.25 -ElasticSearch 进阶

倒排索引 Elasticsearch的倒排索引机制是通过将文档中出现的词汇与它们所在的文档ID关联起来&#xff0c;实现快速查找包含特定词汇的文档。下面是一个具体的例子来说明倒排索引的工作原理&#xff1a; 假设我们有一个简单的文章集合&#xff0c;包含以下三篇文章&#xff1a…