STM32-定时器

 定时器:有4个独立通道:输入捕获;输出比较PWM生成;单脉冲模式输出;可通外部信号控制定时器(TIMx-ETR);

 支持针对定时的增量(正交)编码器、霍尔传感器电路

通用定时器配置步骤:

  • 使能定时器时钟

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);//使能TIM4时钟

  • 初始化定时器参数
typedef struct
{uint16_t TIM_Prescaler;//指定用于分频TIM时钟的预分频器值//实际分频值 = 此参数值+1uint16_t TIM_CounterMode; //指定计数器计数模式- TIM_CounterMode_Up: 向上计数模式(从0递增到ARR)- TIM_CounterMode_Down: 向下计数模式(从ARR递减到0)- TIM_CounterMode_CenterAligned1: 中心对齐模式1- TIM_CounterMode_CenterAligned2: 中心对齐模式2- TIM_CounterMode_CenterAligned3: 中心对齐模式3 uint16_t TIM_Period;//指定将在下一次更新事件时加载到自动重载寄存器(ARR)的值uint16_t TIM_ClockDivision;  //指定时钟分频因子(用于数字滤波器)- TIM_CKD_DIV1: 不分频(Tclk = TIM时钟)- TIM_CKD_DIV2: 2分频(Tclk = TIM时钟/2)- TIM_CKD_DIV4: 4分频(Tclk = TIM时钟/4) */uint8_t TIM_RepetitionCounter;//指定重复计数器值(仅高级定时器TIM1和TIM8支持)} TIM_TimeBaseInitTypeDef;
  • 设置定时器中断类型,并使能
/*** @brief  使能或禁用TIM定时器的中断* @param  TIMx: 指向TIM外设的指针,例如TIM1、TIM2等* @param  TIM_IT: 指定要配置的中断源,可使用逻辑或组合多个中断源*                 例如: TIM_IT_Update(更新中断)、TIM_IT_CC1(通道1比较中断)* @param  NewState: 新状态,可选择ENABLE或DISABLE*/
void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState)
  • 设置定时器中断优先级使能定时器通道
  • 开启定时器

void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState)

  • 编写定时器中断服务函数

void TIM4_IRQHandler(void)【每个不一样可以去启动文件查看】

/*** @brief  检查指定TIM定时器的中断状态标志* @param  TIMx: 指向TIM外设的指针,如TIM1、TIM2等* @param  TIM_IT: 指定要检查的中断源,可使用逻辑或组合多个中断源*                 例如: TIM_IT_Update(更新中断)、TIM_IT_CC1(通道1比较中断)* @retval ITStatus: 中断状态(SET = 中断发生; RESET = 中断未发生)*/
ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT)
/*** @brief  清除指定TIM定时器的中断挂起标志* @param  TIMx: 指向TIM外设的指针,如TIM1、TIM2等* @param  TIM_IT: 指定要清除的中断源,可使用逻辑或组合多个中断源*                 例如: TIM_IT_Update(更新中断)、TIM_IT_CC1(通道1比较中断)* @note   必须在中断处理完成后调用此函数,否则会持续触发中断* @note   通过向TIMx_SR寄存器的对应位写入0来清除标志* @example TIM_ClearITPendingBit(TIM3, TIM_IT_Update); // 清除TIM3的更新中断标志*/
void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT)

代码实现(500msLED电平翻转一次)

#include "time.h"
#include "led.h"/*******************************************************************************
* 函 数 名         : TIM4_Init
* 函数功能		   : TIM4初始化函数
* 输    入         : per:重装载值psc:分频系数
* 输    出         : 无
*******************************************************************************/
void TIM4_Init(u16 per,u16 psc)
{TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);//使能TIM4时钟TIM_TimeBaseInitStructure.TIM_Period=per;   //自动装载值(设置溢出中断值)TIM_TimeBaseInitStructure.TIM_Prescaler=psc; //分频系数TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //设置向上计数模式TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStructure);TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE); //开启定时器中断TIM_ClearITPendingBit(TIM4,TIM_IT_Update);NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;//定时器中断通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//抢占优先级NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;		//子优先级NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//IRQ通道使能NVIC_Init(&NVIC_InitStructure);	TIM_Cmd(TIM4,ENABLE); //使能定时器	}
/*******************************************************************************
* 函 数 名         : TIM4_IRQHandler
* 函数功能		   : TIM4中断函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void TIM4_IRQHandler(void)
{if(TIM_GetITStatus(TIM4,TIM_IT_Update))//查询中断标志位{LED2=!LED2;}TIM_ClearITPendingBit(TIM4,TIM_IT_Update);	//清除标志位
}

主函数代码

    u8 i;SysTick_Init(72);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //中断优先级分组 分2组LED_Init();TIM4_Init(1000,36000-1);  //定时500ms

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

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

相关文章

Windows Server 2019--职业技能大赛B模块Windows服务器配置样题

一、赛题说明 (一)竞赛介绍 请详细阅读网络拓扑图,为所有计算机修改默认防火墙以便允许ICMP和相应的流量,不允许直接关闭主机的防火墙。除了CD-ROM/HDD驱动器,请不要修改虚拟机本身的硬件设置。 (二&…

vue3+Echarts实现立体柱状图

Echarts柱状图中文网:https://echarts.apache.org/examples/zh/index.html#chart-type-bar 效果展示: 主要实现过程是三部分的组合,最上面是一个椭圆,中间是正常的柱子,下方再加上一个椭圆,就出来立体的效…

【UE5】虚幻引擎小百科

一、类名前面的大写字母的含义是什么UE5常见前缀分类表前缀含义实例用于AActorACharacter,AWeaponBase可放入世界中的对象(有位置、可碰撞等)UUObject派生类UUserWidget,UWeaponComponent引擎对象、逻辑模块,不具备Tra…

【Linux系统】vim编辑器 | 编译器gcc/g++ | make/Makefile

1. vim编辑器一、历史发展与Vim vs Vi的区别起源与演进Vi(1976年) :由Bill Joy开发,嵌入BSD Unix系统,是首个面向屏幕的文本编辑器,但功能有限(如无多级撤销)。Vim(1991年…

国产飞腾主板,赋能网络安全防御硬手段

​ 当前,网络安全形势严峻,网络攻击手段不断翻新,从数据泄露到电脑中毒,企业、机构乃至国家的数字资产都面临着巨大风险。在此背景下,国产硬件技术的突破对筑牢网络安全防线意义重大。 高能计算机基于市场需求&#…

Spring AI 概述与架构设计

目录一、前言二、简介三、核心能力概览四、理解模块架构图五、模型适配能力六、最小应用示例七、与传统 LLM 调用相比八、总结九、参考一、前言 在 AI 正以前所未有的速度“下沉”到各类系统与业务的当下,Spring 官方推出的 Spring AI 项目,为 Java 开发…

UI前端与数字孪生融合新领域:智慧环保的污染源监测与治理

hello宝子们...我们是艾斯视觉擅长ui设计、前端开发、数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩!一、引言:数字孪生重构智慧环保的技术范式在环境污染治理压力持续增大的背景下&…

【go/wails】wails入门系列(一)环境安装与demo

文章目录说在前面go安装nodejs安装wails创建项目运行说在前面 操作系统:win11go版本:1.24.4nodejs版本:v22.16.0wails版本:v2.10.1 go安装 官网 这里 下载安装即可 nodejs 官网 这里 下载安装即可 安装wails 设置go国内代理g…

linux qt 使用log4cpp库

一、日志库下载 下载地址:https://log4cpp.sourceforge.net/二、日志库解压,编译 1.将文件夹解压出来2.进入文件夹内部,打开终端3.终端中依次输入以下命令 mkdir build ./configure --prefix$(pwd)/build make make install 一般来说不会报错…

探索阿里云Data Integration:数据同步的魔法工具

引言在当今数字化时代,数据已成为企业的核心资产,如同企业发展的 “燃料”,驱动着业务的增长与创新。从用户行为数据到业务运营数据,从市场趋势数据到供应链数据,每一个数据点都蕴含着巨大的价值,能够为企业…

【Java面试】Redis的poll函数epoll函数区别?

Redis 在选择 poll 和 epoll 时主要基于性能需求、连接规模、操作系统支持等因素。以下是具体场景的对比与选择建议:1. 何时使用 poll 函数?适用场景: 跨平台兼容性需求:poll 在几乎所有操作系统(如 Windows、BSD、Lin…

RPC--RPCHandler的实现

在RPC框架中,Handler用于接收RpcRequest,经过处理后返回RpcResponseSlf4jpublic class RpcRequestHandler {private final ServiceProvider serviceProvider;//获取一个单例模式的服务提供类public RpcRequestHandler() {serviceProvider SingletonFact…

C#读取文件夹和文件列表:全面指南

C#读取文件夹和文件列表:全面指南 在 C# 开发中,经常需要获取文件夹中的文件列表或子文件夹结构,例如文件管理器、批量处理工具、备份程序等场景。本文将详细介绍 C# 中读取文件夹和文件列表的各种方法,包括基础操作、递归遍历、过…

从小白到进阶:解锁linux与c语言高级编程知识点嵌入式开发的任督二脉(1)

【硬核揭秘】Linux与C高级编程:从入门到精通,你的全栈之路!第一部分:初识Linux与环境搭建,玩转软件包管理——嵌入式开发的第一道“坎”嘿,各位C语言的“卷王”们!你可能已经习惯了在Windows或m…

.net开源库SignalR

.NET开源库SignalR:打造实时Web应用的利器 在当今的Web开发领域,实时性已经成为了许多应用的核心需求。无论是实时聊天、实时数据监控还是实时游戏,都需要服务器能够及时地将数据推送给客户端。而.NET开源库SignalR,正是满足这一…

SQL Server不同场景批量插入数据的方式详解

INSERT INTO...VALUES多行语法 该方法适用于单次插入少量数据(通常<1000行),语法简洁直观。示例: INSERT INTO Employees (EmployeeID, Name, Department) VALUES (101, Zhang San, IT),(102, Li Si, HR),(103, Wang Wu, Finance)优点:语法简单易理解,适合开发测试环…

Day08-Flask 或 Django 简介:构建 Web 应用程序

Flask 或 Django 简介&#xff1a;构建 Web 应用程序 网络开发领域提供了丰富的工具和框架&#xff0c;而 Python 作为一门多功能的语言&#xff0c;在构建健壮且可扩展的 Web 应用方面脱颖而出。本课程将作为你使用 Python 进行 Web 开发的入门指南&#xff0c;特别聚焦于两个…

k8s多集群管理中的联邦和舰队如何理解?

在 Kubernetes 多集群管理中&#xff0c;联邦&#xff08;Federation&#xff09;和舰队&#xff08;Fleet&#xff09;是两种不同的方法&#xff0c;用于管理和协调多个 Kubernetes 集群。下面是对这两种方法的详细解释&#xff1a; 联邦&#xff08;Federation&#xff09; K…

Docker部署MySQL镜像

1.拉取镜像 # 拉取指定版本的MySQL镜像 docker pull mysql:8.02.创建挂载目录 # 自己创建好如下三个文件夹 路径任意 [rootiZuf6aigs7rxe6f6oifq7vZ mysql]# ll 总用量 12 drwxr-xr-x 2 root root 4096 7月 7 10:25 config drwxr-xr-x 2 root root 4096 6月 26 16:43 data d…

【网络】Linux 内核优化实战 - net.ipv4.ip_local_reserved_ports

目录一、参数作用二、默认值与格式三、典型应用场景四、配置方法五、注意事项六、查看当前配置在Linux系统的TCP/IP网络配置中&#xff0c;net.ipv4.ip_local_reserved_ports 是一个关键内核参数&#xff0c;用于指定禁止系统自动分配的本地端口范围。这些端口会被“预留”出来…