STM32——07-STM32定时器Timer

news2025/2/13 2:29:08
定时器介绍
软件定时
缺点:不精确、占用 CPU 资源
void Delay500ms () //@11.0592MHz
{
unsigned char i , j , k ;
_nop_ ();
i = 4 ;
j = 129 ;
k = 119 ;
do
{
do
{
while ( -- k );
} while ( -- j );
} while ( -- i );
}
定时器工作原理:
使用精准的时基,通过硬件的方式,实现定时功能。定时器核心就是计数器。
定时器分类:
基本定时器( TIM6~TIM7
通用定时器( TIM2~TIM5
高级定时器( TIM1 和TIM8)

STM32F103C8T6定时器资源:

通用定时器介绍:  

 1) 16 位向上、向下、向上/向下自动装载计数器(

TIMx_CNT )。
2 ) 16 位可编程 ( 可以实时修改 ) 预分频器 ( TIMx_PSC ) ,计数器时钟频率的分频系数为 1 65535 之间的
任意数值。
3 4 个独立通道(
TIMx_CH1 ~ 4 ),这些通道可以用来作为:
A .输入捕获
B .输出比较
C PWM 生成 ( 边缘或中间对齐模式 )
D .单脉冲模式输出
4 )可使用外部信号(
TIMx_ETR )控制定时器和定时器互连(可以用 1 个定时器控制另外一个定时器)
的同步电路。
5 )如下事件发生时产生中断 / DMA
A .更新:计数器向上溢出 / 向下溢出,计数器初始化 ( 通过软件或者内部 / 外部触发 )
B .触发事件 ( 计数器启动、停止、初始化或者由内部 / 外部触发计数 )
C .输入捕获
D .输出比较
E .支持针对定位的增量 ( 正交 ) 编码器和霍尔传感器电路
F .触发输入作为外部时钟或者按周期的电流管理

 定时器计数模式:

定时器时钟源: 

定时器溢出时间计算公式:

例如,要定时500ms,则:PSC=7199ARR=4999Tclk=72M  

定时器中断实验
需求:使用定时器中断方法,每 500ms 翻转一次 LED1 灯状态。
1. RCC 配置
2. LED1 灯配置
3. 时钟数配置
4. TIM2 配置

 

5. 工程配置
6. 重写更新中断回调函数
void HAL_TIM_PeriodElapsedCallback ( TIM_HandleTypeDef * htim )
{
if ( htim -> Instance == TIM2 )
HAL_GPIO_TogglePin ( GPIOB , GPIO_PIN_8 );
}
7. 启动定时器
main.c 中,在定时器初始化命令之后加入以下代码:
HAL_TIM_Base_Start_IT ( & htim2 );
PWM 介绍
STM32F103C8T6 PWM 资源:
高级定时器( TIM1 ): 7
通用定时器( TIM2~TIM4 ):各 4
PWM 输出模式:
PWM 模式 1 :在向上计数时,一旦 CNT < CCRx 时输出为有效电平,否则为无效电平; 在向
下计数时,一旦 CNT > CCRx 时输出为无效电平,否则为有效电平。
PWM 模式 2 :在向上计数时,一旦 CNT < CCRx 时输出为无效电平,否则为有效电平; 在向
下计数时,一旦 CNT > CCRx 时输出为有效电平,否则为无效电平。
PWM 实验
需求:使用 PWM 点亮 LED1 实现呼吸灯效果。 LED 灯为什么可以越来越亮,越来越暗?
这是由不同的占空比决定的。
如何计算周期 / 频率?
假如频率为 2kHz ,则: PSC=71 ARR=499
LED1 连接到哪个定时器的哪一路?
学会看产品手册:
开始实战!
1. 设置时钟
2. 设置定时器
记得把极性设置为 Low ,因为 LED 灯是低电平才亮。
3. 配置工程
4. 业务代码
// 定义变量
uint16_t pwmVal=0; //调整PWM占空比
uint8_t dir=1; //设置改变方向。1:占空比越来越大;0:占空比越来越小
// 使能 Timer4 第3通道 PWM 输出
HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_3);
// while循环实现呼吸灯效果
while (1)
{
HAL_Delay(1);
if (dir)
pwmVal++;
else
pwmVal--;
if (pwmVal > 500)
dir = 0;
if (pwmVal == 0)
dir =1;
//修改比较值,修改占空比
__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_3, pwmVal);
}

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

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

相关文章

108-Spring的底层原理(下篇)

这里续写上一章博客&#xff08;107章博客&#xff09;&#xff1a; Spring 声明式事务的支持&#xff1a; 编程式事务&#xff1a;在业务代码中添加事务控制代码&#xff0c;这样的事务控制机制就叫做编程式事务 声明式事务&#xff1a;通过xml或者注解配置的方式达到事务…

【Linux】进程间通信(管道)

文章目录 进程通信的目的进程间通信发展进程间通信分类管道System V IPCPOSIX IPC 管道什么是管道管道的读写规则管道的特点&#xff1a;匿名管道处理退出问题命名管道创建一个命名管道匿名管道与命名管道的区别命名管道的打开规则 进程通信的目的 数据传输&#xff1a;一个进程…

应用层协议 —— websocket

websocket介绍 websocket是从HTML5开始支持的一种网页端和服务端保持长连接的消息推送机制。 传统的web程序都是属于“一问一答”的形式&#xff0c;即客户端给服务器发送了一个HTTP请求&#xff0c;服务器给客户端返回一个HTTP响应。这种情况下服务器属于被动的一方&#xff…

前端食堂技术周刊第 86 期:Remix 拥抱 RSC、2023 React 生态系统、从 0 实现 RSC、字节跳动 Mobile DevOps 工程实践

美味值&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f; 口味&#xff1a;椰子水 食堂技术周刊仓库地址&#xff1a;https://github.com/Geekhyt/weekly 本期摘要 Remix 拥抱 RSCWebContainers 原生支持 npm、yarn 和 pnpm2023 React 生态系…

MySQL InnoDB集群部署及管理全教程

MySQL InnoDB 集群提供完整的高可用性 MySQL 的解决方案。通过使用MySQL Shell附带的AdminAPI&#xff0c;您可以轻松 配置和管理至少三个MySQL服务器的组 实例以充当 InnoDB 集群。 InnoDB 集群中的每个 MySQL 服务器实例都运行 MySQL 组复制&#xff0c;提供复制机制 InnoDB…

LoadRunner 2023 下载和安装

下载 LoadRunner目前最新的版本是2023版&#xff0c;需要到Micro Focus公司的官网注册账号然后申请下载&#xff0c;比较麻烦&#xff0c;这里我把大家常用的社区版本&#xff0c;搬运到阿里云盘上&#xff0c;供下载&#xff1a; https://www.aliyundrive.com/s/WtHSzD4MrXw …

面试了十几家软件测试公司谈谈我最近面试的总结

由于互联网裁员&#xff0c;最近在 bosss 上投了些简历&#xff0c;测试开发岗&#xff0c;看看目前市场情况。 虽然都在说大环境不好&#xff0c;失业的人很多&#xff0c;我最近约面试的还是比较多的&#xff0c;说说最近的体会吧&#xff0c;希望能给大家提供价值。 1、20K…

教你制作一个简单的进销存管理软件,值得收藏!

首先要制作进销存软件&#xff0c;要具体了解进销存到底是什么含义&#xff0c;这三个字分别代表什么流程&#xff0c;在整个进销存管理中的组成。再根据不同的流程制作进销存软件相对应的部分—— 01进销存的定义 “进”——采购 采购是进销存管理的重要组成部分&#xff0…

微信开放平台第三方开发,注册试用小程序,一整套流程

大家好&#xff0c;我是小悟 对服务商来说&#xff0c;试用小程序的好处不言而喻&#xff0c;主打一个先创建后认证的流程。只需要提供小程序名称和openid便可快速注册一个试用小程序&#xff0c;在认证之前&#xff0c;有效期14天&#xff0c;大致流程如下。 注册试用小程序 …

HCIA-RS实验-配置DHCP

什么是DHCP DHCP是动态主机配置协议&#xff08;Dynamic Host Configuration Protocol&#xff09;的缩写&#xff0c;它是一种网络协议&#xff0c;用于自动分配IP地址、子网掩码、网关以及DNS服务器等网络参数给计算机&#xff0c;从而简化了网络管理和配置。 DHCP服务器的…

robotframework+python接口自动化的点滴记录

在robotframeworkpython框架上写了两三天的接口自动化&#xff0c;做了一些笔记。 1.在断言的时候经常由于数据类型导致较验不通过&#xff0c;值得注意的是&#xff0c;在定义常量或者变量的时候&#xff0c;使用${}代表int类型&#xff0c;例如${2}就代表数字2&#xff0c;另…

Qt学习09:其他基本小控件

文章首发于我的个人博客&#xff1a;欢迎大佬们来逛逛 文章目录 QSpinBoxQDateTimeEditQComboBoxQSliderQRubberBand QSpinBox 微调框&#xff0c;可以通过点击增加减小或者输入来调整数据。 继承自&#xff1a;QAbstractSpinBox 同时这个类还具有Double类型的版本。 常用操…

搭建Scala开发环境

一、Windows上安装Scala 1、到Scala官网下载Scala Scala2.13.10下载网址&#xff1a;https://www.scala-lang.org/download/2.13.10.html 单击【scala-2.13.10.msi】超链接&#xff0c;将scala安装程序下载到本地 2、安装Scala 双击安装程序图标&#xff0c;进入安装向导&…

笔试强训错题总结(二)

笔试强训错题总结&#xff08;二&#xff09; 选择题 下列哪一个是析构函数的特征&#xff08;&#xff09; A. 析构函数定义只能在类体内 B. 一个类中只能定义一个析构函数 C. 析构函数名与类名不同 D. 析构函数可以有一个或多个参数 析构函数可以在类中声明&#xff0c…

np.arange()用法+reshape+np.dot()

1.np.arange()用法 np.arange()函数返回一个有终点和起点的固定步长的排列 # 参数个数情况&#xff1a; np.arange()函数分为一个参数&#xff0c;两个参数&#xff0c;三个参数三种情况 # 1&#xff09;一个参数时&#xff0c;参数值为终点&#xff0c;起点取默认值0&#xff…

SpringBootSecurity 简单明了

在autoConfiguration Jar的imports文件里面有 SecurityFilterAutoConfiguration类&#xff0c;这样springboot会自己加载这个类。 该类的作用是向容器内部注入一个RegisterBean叫DelegatingFilterProxyRegistrationBean&#xff0c;由于它同时实现了ServletContextInitializer接…

Redis问题处理

1、jemalloc/jemalloc.h&#xff1a;没有那个文件或目录 解决方法&#xff1a; 正确解决办法(针对2.2以上的版本) 清理上次编译残留文件&#xff0c;重新编译 make distclean && make

【学术小白如何写好论文】文献综述

文章目录 一、前言1.目的2.作用 二、切入角度三、写作方法 一、前言 前言&#xff1a;在撰写这部分的时候&#xff0c;我们首先要明确文献综述的目的是什么&#xff0c;作用是什么。 1.目的 梳理前人研究的脉络找出前人研究的不足 2.作用 让本研究更充实&#xff0c;告诉读者…

路径规划算法:基于蛾群优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于蛾群优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于蛾群优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化算法蛾群…

SpringSecurity实现前后端分离登录token认证详解

目录 1. SpringSecurity概述 1.1 权限框架 1.1.1 Apache Shiro 1.1.2 SpringSecurity 1.1.3 权限框架的选择 1.2 授权和认证 1.3 SpringSecurity的功能 2.SpringSecurity 实战 2.1 引入SpringSecurity 2.2 认证 2.2.1 登录校验流程 2.2.2 SpringSecurity完整流程 2.2.…