stm32---基本定时器(TIM6,TIM7)

2023-11-10

        STM32F1的定时器非常多,由两个基本定时器(TIM6,TIM7)、4个通用定时器(TIM2-TIM5)和两个高级定时器(TIM1,TIM8)组成。基本定时器的功能最为简单,类似于51单片机内定时器。通用定时器是在基本定时器的基础上扩展而来,增加了输入捕获与输出比较等功能。高级定时器又是在通用定时器基础上扩展而来,增加了可编程死区互补输出、重复计数器、带刹车(断路)功能,这些功能主要针对工业电机控制方面。但无论是哪个定时器,它们的频率都为72M。

基本定时器只有向上计数方式,且其挂载在APB1总线上,只能由内部时钟供能。基本定时器比较简单,就跟systic差不多。

这个是stm32的中文手册中的介绍。

图介绍:其中自动重装载寄存器(ARR)跟systic中的load寄存器作用一样,其作用主要有三部分:

  1. 设置定时器周期: ARR 决定了基本定时器计数器在溢出(从最大值返回0)之前所需的计数值。换句话说,ARR 值定义了定时器的定时周期。一旦计数器计数达到 ARR 的值,定时器将自动重新加载为0并触发一个更新事件。

  2. 产生定时中断: 当基本定时器的计数器达到 ARR 的值时,会触发一个更新事件,您可以配置定时器中断来捕获这个事件。这允许您在特定的时间间隔内执行代码,以执行定时任务。

  3. 生成PWM信号: 如果您使用基本定时器来生成PWM信号,ARR 将决定PWM信号的周期,即高电平和低电平的时间。

基本定时器通常是16位的,所以 ARR 可以设置的最大值是 65535。预分频器也是16位的,但是在预分频器中数值会自动加1,也就是它的取值范围为1到65536,(因为这个预分频器是作为分母用的,分母不能为0,如:给预分频值设为2-1,那么该定时器的频率为32M)。

自动重装载寄存器下面还有个影子寄存器,这个寄存器是实际起作用的寄存器,这个寄存器我们不能人为的去访问,基本定时器中的控制寄存器(TIMx_CR1)有一位(ARPE)是用来设置自动重装载寄存器是否具有缓冲的,stm32中文手册中的图如下:

当ARPE位设置为0时,该自动重装载寄存器不具备缓冲,它会直接把数值传给影子寄存器,

当ARPE位设置为1时,该自动重装载寄存器具备缓冲,它需要一个更新事件的产生才会把数值传给影子寄存器。

 我们可以写一个基本定时器的简单代码:

void TIM_MyConfig(u16 per,u16 psc)
{
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseInitStruct;
	/*打开时钟*/
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,ENABLE);
	/*初始化定时器*/
	TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1 ;
	TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
	TIM_TimeBaseInitStruct.TIM_Period = per;//自动重装载值
	TIM_TimeBaseInitStruct.TIM_Prescaler = psc; //分频系数
	TIM_TimeBaseInit(TIM6, &TIM_TimeBaseInitStruct);

	TIM_Cmd(TIM6, ENABLE);
}

1、第一步打开时钟,因为TIM2-TIM7都是挂载在APB1总线上的,所以我们需要打开APB1时钟,我们可以设置为TIM6。

2、初始化定时器,这个要注意函数是TIM_TimeBaseInit();,这个与其它(如:GPIO的初始化函数GPIO_Init)不一样,其中:

TIM_ClockDivision是用来设置定时器的时钟分频因子的成员,它用于控制定时器时钟的分频,从而影响定时器的计数速度。

在STM32中,TIM_ClockDivision 的设置有以下选项:

  1. TIM_CKD_DIV1: 不分频。定时器的时钟不经过分频,以外部时钟源的速度进行计数。

  2. TIM_CKD_DIV2: 分频为2。定时器的时钟被分为2,即每2个外部时钟周期计数器增加1。

  3. TIM_CKD_DIV4: 分频为4。定时器的时钟被分为4,即每4个外部时钟周期计数器增加1。

但是我们基本定时器使用到的是内部时钟源所以用不到 TIM_ClockDivision,可以设置为TIM_CKD_DIV1或者不配置这个成员,这个我们只在通用定时器或者高级定时器才用得到

TIM_CounterMode是用来设置计数模式的成员,基本定时器只有一种向上计数模式,所以这一位设置为TIM_CounterMode_Up就可以了。

TIM_Period是用来设置自动重装载值的成员(也就是设置计数次数),也就是自动重装载寄存器中的值,当计数器的计数值达到该值时会产生一个更新事件,这个值我们可以通过传参来设置。

TIM_Prescaler 是用来设置分频系数的值(也就是设置多久计数一次),该值也可以通过传参来设置。

在main函数中我们可以这样写:

void HardWare_Init(void)
{
	TIM_MyConfig(5000-1,7200-1);//0.5秒计数产生一次更新事件
}

int main(void)
{
	u8 flag = 0;
	HardWare_Init();
	while(1)
	{
		if(TIM_GetFlagStatus(TIM6,TIM_FLAG_Update) == SET)
		{
			flag = !flag;
		}
		if(flag)
		{
			PAin(8) = 0;
		}
		else
		{
			PAin(8) = 1;
		}
        TIM_ClearFlag(TIM6,TIM_FLAG_Update);
	}
}

可以通过设置基本定时器来让LED灯按时闪烁,其中也用到了位带操作(PAin(8))。因为我们需要判断的是定时器是否发生更新事件,当定时器发生更新事件时说明完成了一个计数周期,所以我们用到的函数是 TIM_GetFlagStatus(TIM6,TIM_FLAG_Update)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

stm32---基本定时器(TIM6,TIM7) 的相关文章

  • 机器学习的特征工程

    机器学习的特征工程 一 数据集 Kaggle网址 https www kaggle com datasets UCI数据集网址 http archive ics uci edu ml scikit learn网址 http scikit l
  • 蓝桥杯-基础训练-龟兔赛跑预测

    问题描述 话说这个世界上有各种各样的兔子和乌龟 但是研究发现 所有的兔子和乌龟都有一个共同的特点 喜欢赛跑 于是世界上各个角落都不断在发生着乌龟和兔子的比赛 小华对此很感兴趣 于是决定研究不同兔子和乌龟的赛跑 他发现 兔子虽然跑比乌龟快 但
  • Bert的MLM任务loss原理

    bert预训练有MLM和NSP两个任务 其中MLM是类似于 完形填空 的方式 对一个句子里的15 的词进行mask 通过双向transformer feedforward rediual add layer norm完成对每个词的embed
  • CMake支持C++11、14、17

    有个需求是使用C 14会没有C 17支持的std filesystem 使用C 17会有砍掉的std random shuffles的报错 这是因为我在cmake指定C 版本 set CMAKE CXX STANDARD 17 强制使用17

随机推荐

  • 用 Go 语言与 EOS.IO 交互的 API 库

    用 Go 语言与 EOS IO 交互的 API 库 该库提供对数据架构 二进制打包和JSON接口 的简单访问 以及对远程或本地运行的EOS IO RPC服务器的API调用 它提供钱包功能 KeyBag 或者可以通过 keosd 钱包签署交易
  • EasyExcel填充数据EasyExcel填充数据流下载 easyexcel填充excel下载 easyexcel填充

    EasyExcel填充数据EasyExcel填充数据流下载 easyexcel填充excel下载 easyexcel填充 1 填充数据然后将文件输出给浏览器 1 填充数据然后将文件输出给浏览器 官网地址 官网的demo填充生成的是file文
  • python爬虫、某云音乐直链爬取

    1 通过浏览器抓包分析 寻找音乐直链所在的api F12打开开发者工具 然后随便播放一首 在Network的XHR中寻找歌曲的直链 最终发现在v1 csrf token 中返回了歌曲的地址 将链接在浏览器中打开 发现果然是该音乐的下载地址
  • 苹果MDM原理和实现过程

    最近一段时间鼓捣了苹果MDM MDM 顾名思义就是移动管理 现在这里咱就不谈啥是移动设备管理了 直接进入正题 苹果的MDM主要是通过苹果MDM服务器实现整体流程如下 1 首先客户端需要从后台服务器 服务器自己部署 下载苹果配置文件或者说描述
  • SpringBoot整合Shiro实现登录和注册功能

    首先 让我们介绍一下Shiro Shiro是一个非常流行的Java安全框架 它提供了身份验证 授权 加密和会话管理等安全功能 Shiro的一个重要特点是它的易用性和灵活性 它可以与各种Java框架 如Spring Spring Boot S
  • [NLP] transformers 使用指南

    严格意义上讲 transformers 并不是 PyTorch 的一部分 然而 transformers 与 PyTorch 或 TensorFlow 结合的太紧密了 而且可以把 transformers 看成是 PyTorch 或 Ten
  • 深度学习之数学基础(线性代数篇)

    2 1 标量 一个标量就是一个单独的数 一般用小写的的变量名称表示 2 2 向量 一个向量就是一列数 这些数是有序排列的 用过次序中的索引 我们可以确定每个单独的数 通常会赋予向量粗体的小写名称 当我们需要明确表示向量中的元素时 我们会将元
  • 【计算机网络】1.5——计算机网络的体系结构(网络分层模型)

    计算机网络的体系结构 概述 计算机网络的体系结构是计算机网络及其构建所应完成功能的精确定义 考题 不属于网络体系结构所描述的内容的是 A 网络的层次 B 每层使用的协议 C 协议的内部实现细节 D 每层必须完成的功能 这些功能的 实现细节
  • html + css实现点赞特效

    html
  • BUUCTF做题Upload-Labs记录pass-01~pass-10

    BUUCTF做题Upload Labs记录pass 01 pass 10 pass 01 前端验证后缀 传1 png 抓包改1 php 即可 蚁剑连 http your ip upload 1 php pass 02 验证content t
  • 前端部署项目到服务器

    1 通过xshell配置 1 1下载xshell 并安装 1 2配置root以及服务器地址 1 3配置nginx 路径设置为xxx xxx dist 1 4npm run build 将打包的dist文件放入配置路径下 1 5无法拖动文件处
  • 文本自动分类

    使用机器学习方法 做文档的自动分类 套路 1 根据每个文件 生成该文件的一个特征 2 根据特征 选择 分类器 进行文本分类 3 可选 根据 2 步结果 调整参数 特征等 示例 数据 搜狗文本分类语料库 精简版 分类器 朴素贝叶斯 编程语言
  • Windows防火墙配置(允许某个网段和部分IP访问某个端口)

    1 win R 2 gpedit msc 3 计算机配置 Windows设置 安全设置 IP安全策略 在本地计算机 4 创建IP安全策略 5 配置IP筛选器列表 筛选器操作 6 分配 https img2018 cnblogs com bl
  • Transformers使用教程

    模型参数下载 数据集查找 Transformers中文使用说明 Huggingface 超详细介绍 知乎 Hugging Face 的 Transformers 库快速入门 文档说明 Transformers 提供文本相关的预训练模型 Di
  • (一)linux系统安装——从0开始大数据开发实战:电影推荐系统(scala版)

    参考资源 厦大实验室博客http dblab xmu edu cn blog 大数据基础编程 实验和案例教程 林子雨 linux版本 ubuntu ubuntukylin 16 04 desktop amd64 https pan baid
  • OpenCV三维图像的创建和数据遍历

    创建一个如图所示的3 X 4 X 6 三维矩阵 include
  • 学习iot_小熊派IoT开发板系列教程正式发布——免费学习

    小宅按 小熊派开源社区针对小熊派IoT开发板首次规划了小熊派未来的系列教程 从基础到进阶的设计 可适应具有不同基础的开发者 通过该系列教程的学习 开发者能够轻松掌握IoT产品的开发 该系列教程包括单片机基础 LiteOS操作系统基础 通信外
  • [第五空间 2021]pklovecloud

    除了按部就班的根据代码来写序列化
  • 42 访问者模式(Visitor模式)详解

    行为型模式 模板方法 Template Method 模式 策略 Strategy 模式 命令 Command 模式 职责链 Chain of Responsibility 模式 状态 State 模式 观察者 Observer 模式 中介
  • stm32---基本定时器(TIM6,TIM7)

    STM32F1的定时器非常多 由两个基本定时器 TIM6 TIM7 4个通用定时器 TIM2 TIM5 和两个高级定时器 TIM TIM 组成 基本定时器的功能最为简单 类似于51单片机内定时器 通用定时器是在基本定时器的基础上扩展而来 增