新手必看!!超详细!STM32-基本定时器

一、基本定时器的作用

  1. 定时
  2. 触发输出直接驱动DAC。

二、基本定时器的框图

在这里插入图片描述

以STM32F103系列为例,具体开发板请查看开发手册。

类别定时器总线位数计数方向预分频系数是否可以产生DMA捕获/比较通道互补输出
基本定时器TIM6 / TIM7APB116位向上1~65536可以0
通用定时器TIM2 /TIM3 /TIM4/ TIM5APB116位向上/向下/中央对齐1~65536可以4
高级定时器TIM1 /TIM8APB216位向上/向下/中央对齐1~65536可以4

三、基本定时器的寄存器

1. 控制寄存器-TIMx->CR1

在这里插入图片描述

位 0:CEN 计数器使能 (Counter enable)

    0:禁止计数器1:使能计数器

位 1:UDIS 更新禁止 (Update disable)(没有使用中断可以不设置)

   0:使能 更新 (UEV),更新事件可通过以下事件之一生成:(1)计数器上溢(2)将 UG 位置 11:禁止 更新UEV。定时到达后不会生成更新事件。

位 2: URS 选择更新请求源 (Update request source)

    0:如果使能了中断或DMA,以下任一事件可以产生一个更新中断或DMA请求。此类事件包括:(1)计数器上溢;(2)将 UG 位置 11:只有计数器上溢才会生成更新中断或DMA请求。

位 3: OPM 单脉冲模式 (One-pulse mode)

    0:计数器在发生更新事件时不会停止计数1:计数器在发生下一更新事件时停止计数(将 CEN 位清零)。

位 7: ARPE 自动重载预装载使能 (Auto-reload preload enable)

    0: TIMx_ARR 寄存器不进行缓冲(影子寄存器无效)。1: TIMx_ARR 寄存器进行缓冲(影子寄存器有效)。

2. 控制寄存器-TIMx->CR2(用于高级定时器,这里我们先不看。)

在这里插入图片描述

3.事件产生寄存器-TIMx->EGR

在这里插入图片描述
位 0: 产生更新事件(该位由软件设置,由硬件自动清除)

 0:无作用1:重新初始化定时器的计数器并产生对寄存器的更新。

4. DMA/中断使能寄存器-TIMx->DIER

在这里插入图片描述

位 8: 更新DMA请求

    0:禁止更新DMA请求。1:使能更新DMA请求。

位 0: 更新中断请求

   0:禁止更新中断。1:使能更新中断。

5. 状态寄存器(中断标志)-TIMx->SR

在这里插入图片描述

如果清除中断标志位需要软件清0。读取该寄存器的位0来判断是否发生中断。

位 0: 更新中断标志位

   0:没有发生中断(定的时间还没到)。1:发生了中断。如果发生中断,则该位由硬件置1。

6. 计数器-TIMx->CNT

在这里插入图片描述

位 [ 15:0 ]:用于计数,范围0~65535。一般不用设置。基本定时器默认为0开始。

7. 预分频器-TIMx->PSC

在这里插入图片描述

位 [ 15:0 ]: 设置预分频系数。

8. 自动重装载寄存器-TIMx->ARR

在这里插入图片描述
位 [ 15:0 ]: 设置重装载值。

四、实验

实验1. 查询方式:用定时器TIM6实现延时1s闪烁LED1灯。
实验2. 中断方式:用TIM7实现1s反转一次LED灯。

补:定时时间计算如下:
注意单位Tout为ms。
在这里插入图片描述
arr:重装载值。
psc:预分频系数。
Tclk:定时器时钟。基本定时器为72Mhz。

实验1. 查询方式:利用TIM6实现定时1s的功能。

在这里插入图片描述

●伪代码:

定时器初始化
{1.打开APB1定时器6的时钟。2.设置单脉冲模式。3.设置预分频系数。4.设置自动重装载值。5.UG置1,产生更新事件。(将上面的配置更新到寄存器)6.使能计数器。
}

因为设置了单脉冲模式,所以当发生更新事件时,就会自动关闭定时器,所以不需要手动关闭。
●具体代码:

void TIM6_Init(u16 psc,u16 arr)
{RCC->APB1ENR |=(0X01 <<4); //1.打开APB1时钟TIM6->CR1 |=(0X01 <<3);  //2.设置单脉冲模式。TIM6->PSC =psc ; //3.设置分频系数TIM6->ARR =arr;  //4.设置装载值(上限值)  TIM6->EGR |=(0x01 <<0); //5.UG置1,产生更新事件。(将上面的配置更新到寄存器)TIM6->CR1 |=(0x01 <<0); //6.使能计数器
}

●主函数:

int main()
{LED_Init();while(1){TIM6_Init(999,71); //(999+1)*(71+1)/72000 000 =1000 ms。LED1=1;TIM6_Init(999,71);LED1=0;  }
}

实验二:中断方式:用TIM7实现1s反转一次LED灯。

●伪代码:

定时器初始化
{1.打开APB1定时器7的时钟。2.设置影子寄存器--缓冲。3.设置循环模式。4.选择更新请求源。5.设置预分频系数。6.设置自动重装载值。7.UG置1,产生更新事件。(将上面的配置更新到寄存器)8. 设置中断优先级。9.使能NVIC控制器。10.使能定时器。11.使能定时器中断。12.使能更新事件。
}

●具体代码:

void TIM7_Init(u16 psc, u16 arr)
{RCC->APB1ENR |= 1<<5;//1.使能定时器7的时钟TIM7->CR1 |= 1<<7;  //2.TIM7_ARR 寄存器进行缓冲TIM7->CR1&=~(1<<3);//3.计数器在发生更新事件时不会停止计数(循环计数,循环定时)TIM7->CR1&=~(1<<2);//4.选择更新请求源,允许①计数器上溢;②将 UG 位置 1 ,这两种情况产生更新事件TIM7->PSC = psc;//5.设置预分频系数。TIM7->ARR = arr;//6.设置自动重装载值。TIM7->EGR |= 1<<0;//7.UG置1,产生更新事件。(将上面的配置更新到寄存器)NVIC_SetPriority(SysTick_IRQn,NVIC_EncodePriority(7-2,1,2));  // 8. 设置中断优先级。NVIC_EnableIRQ(TIM7_IRQn);//9.使能NVIC控制器。TIM7->CR1|=1<<0;// 10.使能定时器。TIM7->DIER |= 1<<0;// 11.使能定时器中断。TIM7->CR1&=~(1<<1);//12.使能更新事件。
}void  TIM7_IRQHandler(void)
{if(TIM7->SR&(1<<0))  //判断中断标志是否置1{TIM7->SR &=~(1<<0);//中断标志清零LED=!LED;}
}

●主函数:

int main(void)
{LED_Init();TIM7_Init(999,72);while(1){}
}

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

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

相关文章

线性方程组

线性方程组 设存在线性方程组 { a 1 , 1 x 1 a 1 , 2 x 2 ⋯ a 1 , n x n b 1 a 2 , 1 x 1 a 2 , 2 x 2 ⋯ a 2 , n x n b 2 ⋮ ⋮ a m , 1 x 1 a m , 2 x 2 ⋯ a m , n x n b m \left.\left\{\begin{array}{l}a_{1,1}x_1a_{1,2}x_2\cdotsa_{1,n}x_nb_1\\a_{2,1}…

windows排除故障工具RELI、PSR

RELI 在windows10中&#xff0c;如果按某些书上或网上所属&#xff0c;点击开始按钮&#xff0c;然后再搜书欧昂立输入RELI&#xff0c;在开始菜单中可以看到Reliable History&#xff08;查看可靠性历史记录&#xff09;蓝色的图标。 可惜&#xff0c;我试验后没能找到。 这…

年货FPS大作,艾尔莎EA B450M-E和你玩转《使命召唤20》

说到动视旗下的《使命召唤》系列&#xff0c;相信大家都不陌生&#xff0c;它以出色爽快的游戏体验以及精良的画面著称&#xff0c;而且每年一部的更新节奏也是如今为数不多的“年货”游戏之一了。时至今日&#xff0c;该系列已经来到了第20部作品&#xff0c;也就是《使命召唤…

Sectigo证书——全球SSL证书第一品牌

随着互联网技术的发展和网络安全意识的提升&#xff0c;SSL证书已经成为确保网络数据传输安全的重要工具。而在众多SSL证书品牌中&#xff0c;Sectigo无疑是其中的佼佼者&#xff0c;被誉为“全球证书第一品牌”。 Sectigo是一个有着超过二十年行业经验的老牌认证机构&#xff…

矩阵的QR分解

矩阵的QR分解 GramSchmidt 设存在 B { x 1 , x 2 , … , x n } \mathcal{B}\left\{\mathbf{x}_{1},\mathbf{x}_{2},\ldots,\mathbf{x}_{n}\right\} B{x1​,x2​,…,xn​}在施密特正交化过程中 q 1 x 1 ∣ ∣ x 1 ∣ ∣ q_1\frac{x_1}{||x_1||} q1​∣∣x1​∣∣x1​​ q k …

心怀祖国放眼世界 爱国人士华国中应邀参加美国旧金山2023(APEC)峰会

据相关媒体美国旧金山报道:2023亚太经合组织&#xff08;APEC&#xff09;领导人非正式会议将于11月15日至17日在美国旧金山召开。11月11日&#xff0c;本年度APEC高级财政官员和部长会晤在旧金山率先启动&#xff0c;APEC CEO峰会将于11月14日至16日开幕。著名爱国人士、亚太一…

基于鼠群算法优化概率神经网络PNN的分类预测 - 附代码

基于鼠群算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于鼠群算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于鼠群优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神经网络的光滑…

量化交易:借助talib使用技术分析指标

什么是技术分析&#xff1f; 所谓股票的技术分析&#xff0c;是相对于基本面分析而言的。基本分析法着重于对一般经济情况以及各个公司的经营管理状况、行业动态等因素进行分析&#xff0c;以此来研究股票的价值&#xff0c;衡量股价的高低。而技术分析则是透过图表或技术指标…

资深测试总结,现在软件测试有未来吗?“你“的底气在哪里?

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、为什么会有 “…

图像分类(四) 全面解读复现GoogleNet_InceptionV1-V4

论文解读 InceptionV1 前言 论文题目: Going Deeper with Convolutions Googlenet论文原文地址:https://arxiv.org/pdf/1409.4842.pdf 之前看过VGG的论文&#xff08;VGG精读直达&#xff09;。当时VGG获得了 2014 ILSVRC 图像分类的第二名&#xff0c;今天来看一下第一名…

盘点54个Python实用工具源码Python爱好者不容错过

盘点54个Python实用工具源码Python爱好者不容错过 学习知识费力气&#xff0c;收集整理更不易。 知识付费甚欢喜&#xff0c;为咱码农谋福利。 链接&#xff1a;https://pan.baidu.com/s/1OXyEh-Yy3JI90jvn6d6wRw?pwd8888 提取码&#xff1a;8888 项目名称 7z辅助破解工…

【win32_001】win32命名规、缩写、窗口

整数类型 bool类型 使用注意&#xff1a; 一般bool 的false0&#xff1b;true1 | 2 | …|n false是为0&#xff0c;true是非零 不建议这样用&#xff1a; if (result TRUE) // Wrong! 因为result不一定只返回1&#xff08;true&#xff09;&#xff0c;当返回2时&#xff0c…