STM32固件库(标准外设库)入门学习 第六章TIM定时器(二)

2023-11-14

STM32固件库(标准外设库)入门学习 第六章TIM定时器(二)



前言

本学习教程,参考B站江科大自化协STM32视频,型号为STM32F103C8T6。

从代码层面理解定时中断


一、定时中断代码

1接线图

在这里插入图片描述

2 程序编写

System下新建Timer.c和.h文件,定时器非外围硬件,所以放到System下。
在这里插入图片描述
标准步骤程序。
在这里插入图片描述
在这里插入图片描述

按照上图配置,把每个模块都打通。
(1)开启RCC时钟。
(2)选择时基单元的时钟源,定时中断就选择内部时钟源。
(3)配置时基单元,用一个结构体就可完成配置。
(4)配置输出中断控制,允许更新中断输出到NVIC。
(5)配置NVIC,在NVIC中打开定时器中断的通道,并分配一个优先级。
(6)运行控制,整个模块配置完成后,还需要使能计数器,要不然计数器不运行,定时器使能后,计数器就会开始计数,当计数器更新时,触发中断。
(7)定时器的中断函数,中断函数每隔一段时间就能自动执行一次。

实际操作:
先找到定时器的库函数文件,在Library里tim.h,拖到最后
在这里插入图片描述
(1)TIM_DeInit恢复缺省配置。
(2)TIM_TimeBaseInit时基单元初始化,配置时基单元。参数TIMx选择某个定时器,参数TIM_TimeBaseInitStruct为结构体,里面包含了配置时基单元的一些参数。(蓝色为书签,仅作为标记,方便查找代码)
在这里插入图片描述(3)TIM_TimeBaseStructInit把结构体变量赋一个默认值。
在这里插入图片描述
(4)TIM_Cmd用来使能计数器,对应第六步,结构图中的运行控制。两个参数:先择定时器和使能还是失能。
在这里插入图片描述
(5)TIM_ITConfig使能中断输出信号,对应的就是中断输出控制,参数1选择定时器,参数2选择要配置哪个中断输出,参数3新的状态使能还是失能。ITConfig后面会经常遇到,就是使能外设的中断输出。
在这里插入图片描述
(6)这6个函数对应,时基单元的时钟选择,可选择RCC、ETR、ITRx、Tix这些。
在这里插入图片描述
TIM_InternalClockConfig选择内部时钟,参数只有选择定时器;

TIM_ITRxExternalClockConfig,选择ITRx其他定时器的时钟,参数1选择要配置的定时器,参数2选择要接入哪个其他定时器;

TIM_TIxExternalClockConfig,选择TIx捕获通道的时钟,参数1选择要配置的定时器,参数2 TIM_TIxExternalCLKSource,选择TIx具体的某个引脚,TIM_ICPolarity输入极性,ICFilter输入的滤波器,对于外部引脚的波形,一般都会有极性选择器和滤波器,这样更灵活一些;

TIM_ETRClockMode1Config,选择ETR通过外部时钟模式1输入的时钟,参数1选择要配置的定时器,参数2 TIM_ExtTRGPrescaler外部触发预分频器(可对ETR外部时钟再提前做一个分频),参数3 TIM_ExtTRGPolarity、参数4 ExtTRGFilter为极性选择器、滤波器,滤波器配置如下图;

TIM_ETRClockMode2Config,选择ETR通过外部时钟模式2输入的时钟,与上一个函数是可以等效的,如果不需要触发输入的功能,两个函数可以互换。

TIM_ETRConfig,与选择时钟无关,主要用来单独配置ETR引脚的预分频器、极性、滤波器这些参数。
在这里插入图片描述
(7)TIM_PrescalerConfig,单独用来写预分频值,参数3为写入的模式,前文提到,预分频器有一个缓冲器,写入的值是在更新时间发生后才有效,所以这个写入的模式可以选择听从安排,在更新事件生效,或者是,在写入后,手动产生一个更新事件,让这个值立刻生效。
在这里插入图片描述(8)TIM_CounterModeConfig,用来改变计数器的计数模式,参数CounterMode,选择新的计数模式。
在这里插入图片描述(9)TIM_ARRPreloadConfig,自动重装器预装功能配置,前文计数器有/无预装时序提到过,这里让他有无,就是调用函数让其使能还是失能。
在这里插入图片描述
(10)TIM_SetCounter,给计数器写入一个值,想手动给一个计数值,就可以用这个函数。
在这里插入图片描述
(11)TIM_SetAutoreload,给自动重装器写一个值,想手动给一个重装,就可以用这个函数。
在这里插入图片描述
(12)TIM_GetCounter获取当前计数器的值。
在这里插入图片描述
(13)TIM_GetPrescaler获取当前预分频器的值。
在这里插入图片描述
(14)这四个函数用来获取标志位和清除标志位的。
在这里插入图片描述

2.1 第一步开启RCC时钟

在这里插入图片描述

2.2 第二步选择时基单元的时钟源

在这里插入图片描述

2.3 第三步配置时基单元

在这里插入图片描述
(1)TIM_ClockDivision。在这个定时器的外部信号输入引脚,一般都会有一个输入滤波器,滤波器可以滤掉信号的抖动干扰,工作原理就是在一个固定的时钟频率f下进行采样,连续n个采样点都为相同电平,那就代表输入信号稳定了,就把这个采样值输出出去,如果这n个采样值不全都相同,那就说明信号有抖动,这时就保持上一次的输出,或者直接输出低电平也行。这里的采样频率f和采样点数n都是滤波器的参数,频率越低,采样点数越多,那滤波效果就越好,相应的信号延迟就越大,这就是这个滤波器的工作原理。但是采样频率f从哪来,手册里写的是可以由内部时钟直接而来,也可以是内部时钟加一个分频而来,分频多少就是由这个参数确定的。这个参数和时基单元关系并不大。DIV1就是1分频,即不分频,DIV2就是2分频,DIV4就是4分频。选择一分频。
在这里插入图片描述
(2)TIM_CounterMode 计数模式,有向上、向下、三种中央对齐模式,这里选择向上。
(3)TIM_Period放的是ARR自动重装器的值,取值在0~65535之间。
(4)TIM_Prescaler就是PSC预分频器的值,取值在0~65535之间。
(5)TIM_RepetitionCounter就是重复计数器的值,高级定时器才有,不要直接0就好了。

TIM_Period和TIM_Prescaler的值,若想定1s则参考公式:

计数器溢出频率CK_CNT_OV = CK_CNT / (ARR + 1) = CK_PSC / (PSC + 1) / (ARR + 1)

1s即定时频率为1Hz,即1Hz=72MHz/(PSC + 1) / (ARR + 1)

预分频器给少值,自动重装值给多,这样就是以一个比较高的频率计比较多的数;也可以预分频器给多点,自动重装给少点,这样就是以一个比较低的频率计比较少的数。

在这里给预分频是对72M进行7200分频,得到就是10k的计数频率,在10k的计数频率下,计10000个数,就是1s的时间。

2.4 第四步使能更新中断

在这里插入图片描述

2.5 第五步配置NVIC

在这里插入图片描述

2.6 第六步启动定时器

在这里插入图片描述

2.7 第七步中断函数

找到启动文件TIM2_IRQHandler就是定时器2的中断函数。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、内外时钟源选择

1 接线图

在这里插入图片描述

2 程序编写

2.1 修改为外部时钟

在这里插入图片描述

2.2 GPIO使能

既然有用外部时钟,则需要配置GPIO,先给GPIOA使能
在这里插入图片描述
GPIO_Mode选择参考手册8.1.11 外设的GPIO配置,显示是浮空输入,但是我们用上拉输入,什么时候用浮空输入,当外部的输入信号功率很小,内部的上拉电阻可能会影响到这个输入信号,此时就可以用浮空输入,防止影响外部输入的电平。这里还是用上拉输入。
在这里插入图片描述
在这里插入图片描述

2.3 配置时基单元

TIM_Period放的是ARR自动重装器的值,改小10,手动模拟每那么快
TIM_Prescaler就是PSC预分频器的值,该为1,手动模拟每那么快
在这里插入图片描述

2.4 封装CNT计数器的值

记得在.h文件声明这个函数。
在这里插入图片描述

2.5 最终程序

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


总结

本节主要是定时中断代码和内外时钟源选择的代码,下一节将介绍TIM输出比较输出PWM波形。

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

STM32固件库(标准外设库)入门学习 第六章TIM定时器(二) 的相关文章

  • linux切换用户时报错 this account is currently not available

    linux切换用户时报错 this account is currently not available 在安装完redis之后系统创建了一个名叫redis用户 但切换到这个用户的时候却报了错 this account is current
  • 网站怎么创建?

    网站怎么创建 现在很多公司企业都会有自己的网站 即使是没有网站的公司也抓紧时间纷纷入局 希望能在互联网的流量中分到一杯羹 那么网站怎么创建呢 下面给大家简单说一说 网站怎么创建步骤1 首先我们准备好一个域名 一个网站需要有域名才能访问 我们

随机推荐

  • 论文笔记:DEEP DECLARATIVE DYNAMIC TIME WARPING FOREND-TO-END LEARNING OF ALIGNMENT PATHS

    个人感觉 可微DTW的主要优点作为一个损失函数 可以进行梯度反向传播 如果目标只是两个时间序列的相似度 可能不太需要 1 Intro 1 1 背景 DTW 笔记 Dynamic Time Warping 动态时间规整 DTW的python实
  • 寒假训练 第一节 时空复杂度分析

    算法是由若干条指令所组成的的有穷序列 其中每一条指令表示计算机的一个或多个操作 一个好的算法首先要具备正确性 可读性和健壮性 在具备这三个条件后 就应该考虑算法的效率问题 即算法的时间效率和空间效率两方面 时间复杂度 一个算法所需要的运算时
  • windows 搭建ssh服务

    1 官网下载安装包 mls software com 2 点击安装 一直默认即可 3 配置 opensshServer 4 成功登录
  • android6.0源码分析之Camera API2.0下的初始化流程分析

    在文章android源码分析之Camera API2 0简介中 对Camera API2 0的框架以及代码做了简单介绍 本文将基于android6 0源码 分析Camera API2 0下的Camera2内置应用中 对Camera的初始化的
  • umi3 antDesignPro布局layout配置快速搭建项目

    umi3 快速搭建项目 1 环境准备 2 创建项目 3 修改配置 应用antd layout布局 1 安装antd layout插件 2 修改 umirc 文件配置路由 3 根据配置文件中component新建路由对应的组件 1 环境准备
  • c语言中weak的作用

    转载至 https blog csdn net q2519008 article details 82774774 在u boot源码中看到 weak关键字 在移植过程中遇到了问题 用例 weak在不同的环境中用法不同 在stm32源码中也
  • 合宙Air105

    基础资料 基于Air105开发板 Air105 LuatOS 文档 上手 开发上手 LuatOS 文档 探讨重点 官方SFUD库操作 外置flash demo相关内容的学习及探讨 扩展 合宙Air103 SDIO 扩展 LuatOS SOC
  • 服务器UDIMM, LRDIMM,RDIMM三种内存的区别

    服务器UDIMM LRDIMM RDIMM三种内存的区别 UDIMM RDIMM LRDIMM 区别与应用 随着应用程序的不断增长 内存被迫承担着更大压力 目前不管是服务器租用还是PC领域 DDR4内存技术依旧是主流 由于DDR4采用并行传
  • keil stm32f407工程环境搭建

    一 库函数 1 安装https www keil com dd2 Pack 2Feula container 直接双击Keil STM32F4xx DFP 1 0 8 pack 二 创建工程 为当前工程添加相应的库函数 点击确定 函数添加成
  • 可能影响经济体安全的技术类别

    这份新的技术出口管理新提案内容相对简洁 清晰罗列了可能会影响强大国家安全或者经济体的14类新兴和基础技术 1 生物技术 例如 1 纳米生物学 2 合成生物学 3 基因组和基因工程 4 神经科学 2 人工智能 AI 和机器学习技术 例如 1
  • mac 下 jdgui invalid input fileloader

    在一次反编译中 前面几个步骤都是正确的 将classes dex成功转为classes dex2jar jar文件 在即将把classes dex2jar jar文件在jd gui中打开的时候 出现了jdgui invalid input
  • 判断ListView的第一个/最后一个item是否完全显示

    判断最后一项 亲测可用 当然网上还有很多其他的方法 不同场景的方式可能不一样 Override public void onScroll AbsListView view int firstVisibleItem int visibleIt
  • Android shape渐变色用代码怎么写?

    前言 shape在实际开发中非常常用 一般我们会在xml中使用 但涉及到颜色动态变更时 我们需要在代码中动态创建 xml中的shape 实际上被创建出来后它是一个Drawable 点开Drawable的子类一看 我们很容易就发现一些可疑的实
  • 【Android】DataBinding 最全使用解析

    DataBinding 最全使用解析 一 DataBinding 概述 二 基本用法 2 1 使用入门 2 2 布局和绑定表达式 2 3 事件绑定 2 4 单向绑定 2 5 双向绑定 三 高级用法 BindingAdapter 一 Data
  • Linux节点释放,关于linux:如何释放Inode的使用量?

    我有一个磁盘驱动器 其索引节点使用率为100 使用df i命令 但是 在实质上删除文件后 使用率仍为100 那么正确的方法是什么 磁盘空间使用较少的磁盘驱动器如何可能具有 Inode的使用率比磁盘空间使用率更高的磁盘驱动器高 如果我压缩大量
  • 前端面试大全(jQuery篇——含移动端常见问题)

    目录 面试系列 内容介绍 1 JQuery的源码看过吗 能不能简单概况一下它的实现原理 2 jQuery fn的init方法返回的this指的是什么对象 为什么要返回this 3 jquery中如何将数组转化为json字符串 然后再转化回来
  • harbor的https访问方式及自定义证书

    一 基本安装 docker docker compose 二 https访问harbor需要自定义证书 1 首先创建存放证书的目录 到对应目录证书的位置 root host1 harbor mkdir opt cert cd opt cer
  • matlab fminbnd 寻找区域极值

    fminbnd 进行有约束的一元函数最小值求解 它的求解命令是 X FMINBND FUN x1 x2 FUN 是目标函数 可以为表达式字符串或MATLAB自定义函数的函数柄 要求解在约束 x1 lt X lt x2下的最优解X 还有其他一
  • 干货丨什么是虚拟化技术?虚拟化常见架构

    在计算机中 虚拟化 英语 Virtualization 是一种资源管理技术 是将计算机的各种实体资源 如服务器 网络 内存及存储等 予以抽象 转换后呈现出来 打破实体结构间的不可切割的障碍 使用户可以比原本的组态更好的方式来应用这些资源 这
  • STM32固件库(标准外设库)入门学习 第六章TIM定时器(二)

    STM32固件库 标准外设库 入门学习 第六章TIM定时器 二 文章目录 STM32固件库 标准外设库 入门学习 第六章TIM定时器 二 前言 一 定时中断代码 1接线图 2 程序编写 2 1 第一步开启RCC时钟 2 2 第二步选择时基单