stm32---基本定时器(TIM6,TIM7)
STM32F1的定时器非常多,由两个基本定时器(TIM6,TIM7)、4个通用定时器(TIM2-TIM5)和两个高级定时器(TIM1,TIM8)组成。基本定时器的功能最为简单,类似于51单片机内定时器。通用定时器是在基本定时器的基础上扩展而来,增加了输入捕获与输出比较等功能。高级定时器又是在通用定时器基础上扩展而来,增加了可编程死区互补输出、重复计数器、带刹车(断路)功能,这些功能主要针对工业电机控制方面。但无论是哪个定时器,它们的频率都为72M。
基本定时器只有向上计数方式,且其挂载在APB1总线上,只能由内部时钟供能。基本定时器比较简单,就跟systic差不多。
这个是stm32的中文手册中的介绍。
图介绍:其中自动重装载寄存器(ARR)跟systic中的load寄存器作用一样,其作用主要有三部分:
-
设置定时器周期: ARR 决定了基本定时器计数器在溢出(从最大值返回0)之前所需的计数值。换句话说,ARR 值定义了定时器的定时周期。一旦计数器计数达到 ARR 的值,定时器将自动重新加载为0并触发一个更新事件。
-
产生定时中断: 当基本定时器的计数器达到 ARR 的值时,会触发一个更新事件,您可以配置定时器中断来捕获这个事件。这允许您在特定的时间间隔内执行代码,以执行定时任务。
-
生成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 的设置有以下选项:
-
TIM_CKD_DIV1: 不分频。定时器的时钟不经过分频,以外部时钟源的速度进行计数。 -
TIM_CKD_DIV2: 分频为2。定时器的时钟被分为2,即每2个外部时钟周期计数器增加1。 -
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)。
相关文章:
stm32---基本定时器(TIM6,TIM7)
STM32F1的定时器非常多,由两个基本定时器(TIM6,TIM7)、4个通用定时器(TIM2-TIM5)和两个高级定时器(TIM1,TIM8)组成。基本定时器的功能最为简单&am…...
HTML网页设计
HTML网页设计 HTML网页设计1、常用的单标签2、常用的双标签3、列表标签4、超链接标签5、图像和动画标签6、Html5中音频的插入7、定时刷新或跳转8、表格9、HTML表单标签与表单设计 HTML网页设计 属性值一般用" "括起来,且必须使用英文双引号 <head>…...
阶段性总结:跨时钟域同步处理
对时序图与Verilog语言之间的转化的认识: 首先明确工程要实现一个什么功能;用到的硬件实现一个什么功能。 要很明确这个硬件的工作时序,即:用什么样的信号,什么变化规则的信号去驱动这个硬件。 然后对工程进行模块划…...
[交互]接口与路由问题
[交互]接口与路由问题 场景描述问题分析解决方案 这是在实战开发过程中遇到的一个问题,所以导致产生了服务端如何区分浏览器请求的是前端路由还是 api 接口的问题?? 场景描述 这是一个前后端分离开发的项目,因此前端一般都会使用…...
linux 6中4T磁盘识别并分区格式化挂接
存储端划分4T的LUN后,主机端操作如下 1、主机识别,本例中hba卡的端口是host11和host12 [rootdb1 ~]# echo "- - -" > /sys/class/scsi_host/host11/scan [rootdb1 ~]# echo "- - -" > /sys/class/scsi_host/host12/scan …...
【Unity】ShaderGraph应用(浮动气泡)
【Unity】ShaderGraph应用(浮动气泡) 实现效果 一、实现的方法 1.使用节点介绍 Position:获取模型的顶点坐标 Simple Noise:简单的噪声,用于计算顶点抖动 Fresnel Effect:菲涅耳效应,用于实现气泡效果 计算用节点 Add&…...
Android EditText setTranslationY导致输入法覆盖问题
平台 RK3288 Android 8.1 显示: 1920x1080 160 dpi 概述 碰到一个问题: 弹出的输入法会覆盖文本输入框。 原因:输入框使用了setTranslationY() 位置偏移后, 输入法无法正确获取焦点的位置。 分析 先上图: 初始布局 调用etTranslation…...
MySQL 导出和导入数据
文章目录 一,导出数据(一)使用SELECT ... INTO OUTFILE语句导出数据(二)使用mysqldump工具导出数据(三)使用SELECT ... INTO DUMPFILE语句导出数据 二,导入数据(一&#…...
ubuntu22.04 设置网卡开机自启
配置文件路径 在Ubuntu中,网络配置文件通常位于/etc/netplan/目录下,其文件名以.yaml为后缀。Netplan是Ubuntu 17.10及更高版本中默认的网络配置工具,用于配置网络接口、IP地址、网关、DNS服务器等。 我们可以看到配置文件为 01-network-ma…...
持续部署:提高敏捷加速软件交付(内含教程)
在当今快节奏的数字化环境中,企业不断寻求更快地交付软件、增强客户体验并在竞争中保持领先的方法。持续部署(Continuous Deployment, CD)已成为一种改变游戏规则的方法,使企业能够简化软件交付、提高敏捷性并缩短上市时间。持续部…...
Spark_Spark内存模型管理
工作中经常用到Spark内存调参,之前还没对这块记录,这次记录一下。 环境参数 spark 内存模型中会涉及到多个配置,这些配置由一些环境参数及其配置值有关,为防止后面理解混乱,现在这里列举出来,如果忘记了&a…...
C++之operator=与operator==用法区别(二百一十八)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…...
【漏洞复现】WordPress插件wp-file-manager任意文件上传漏洞(CVE-2020-25213)
文章目录 前言声明一、简介二、插件介绍三、漏洞概述四、影响范围五、漏洞分析六、环境搭建七、漏洞复现手工验证file_Manager_Rce.pyfile_manager_upload.py八、修复建议前言 WordPress插件WPFileManager中存在一个严重的安全漏洞,攻击者可以在安装了此插件的任何WordPress网…...
基于安卓Java试题库在线考试系统uniapp 微信小程序
本文首先分析了题库app应用程序的需求,从系统开发环境、系统目标、设计流程、功能设计等几个方面对系统进行了系统设计。开发出本题库app,主要实现了学生、教师、测试卷、试题、考试等。总体设计主要包括系统功能设计、该系统里充分综合应用Mysql数据库、…...
Java入坑之语法糖
一、for和for-each 1.1for和for-each概念 for 循环是一种常用的循环结构,它可以通过一个变量(通常是 i)来控制循环的次数和范围。for 循环的语法格式如下: for (初始化; 布尔表达式; 更新) {//代码语句 }for-each 循环是 Java …...
VUE响应式
响应式 :::tip 提示 我们了解过响应式可以同步更新数据和视图,但是其工作原理我们最好也要了解一下。这样当你使用时遇到一些常见的错误,也能够快速定位是什么问题导致的。 了解响应式原理之前,你必须要先去了解 ES5 的 Object.defineProper…...
Godot 和 VScode配置C#环境注意事项
前言 尽管有些博主会建议如果我们熟悉C#的话,最好还是使用GDscript,而且对于小白上手也相对简单,但是C#的性能终究还是比动态语言好,也相比CPP简单些,尽管现在Godot还是有些问题,比如不像unity那样适配swit…...
三、Mediasoup进程通信实现的原理
Mediasoup 创建父子进程,js与c进程交互的通道 worker.js构造函数中创建父子进程,c通过libuv的socket可以实现 JavaScript 与 C 之间的相互收发消息 一、 父子进程通信 这是一个简单的示例,演示了如何使用 libuv 在父子进程之间进行通信。以…...
【计算机网络】 TCP——四次挥手
文章目录 流程考点 流程 主动方打算关闭连接,此时会发送一个TCP首部FIN标志位被置为1的报文,也即FIN报文,之后主动方进入FIN_WAIT_1状态。被动方收到该报文后,就向主动方发送ACK应答报文,接着被动方进入CLOSE_WAIT状态…...
「Java开发指南」在MyEclipse中的Spring开发(二)
在上文中(点击这里回顾>>),我们主要介绍了一些Spring的基本概念、Spring项目配置及向导,本章节将继续介绍如何管理多个项目,Spring配置编辑器等,欢迎持续关注~ MyEclipse v2023.1.2离线版下载(Q技术…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
