STM32——定时器

一、简介

*定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断

*16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时 

*不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能

*根据复杂度和应用场景分为了高级定时器、通用定时器、基本定时器三种类型

二、定时器区别

1.通用定时器的特点描述

1.位于ABP1低速总线上

2.16位向下,向上/向下(中心对齐模式)计数模式,自动重装载计数器(TIMx_CNT)

3.16位可编程(可以实现修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数为1~65535任意数值

4.四个独立通道(TIMx_CH1~4),通道用来支持:

①输入捕获

②输出比较

③PWM生成

④单脉冲模式输出

2.通用定时器的计数器模式

STM32通用定时器 可以向上,向下,向上/向下双向计数模式 :

① 向上计数模式:计数值从0 计数到自动加载值(TIM_ARR),产生一个计数溢出事件,然后重新从0开始计数

②向下计数模式:计数器从自动装入的值(TIM_ARR)开始向下计数到0,产生一个计数溢出事件,然后从计数装入值重新开始。

③中央对齐模式:计数器从0开始到(自动装入值-1),产生计数溢出事件,然后向下计数到1,产生定时器溢出事件,然后从0开始计数。

预分频器可以将计数器的时钟频率按1到65536之间的任意值分频。

ARR是自动重装载值(自己设定的)

CNT计数当前值(0到自动重装载值中间的某个值)

CCRX比较寄存器值

PSC是预分频系数

内部时钟源(CK_INT)

三、计数器时钟计算方法

预分频寄存器 :分频系数    (PSC+1) / N = CNT 

定时器配置LED每秒闪烁一次:

Tout =    [  重装载值(ARR+1) * 分频系数(PSC+1)]  /Tclk

Tout =  100000(9999+1) *7200(分频系数  7199+1)   /72M(72 000 000)

计数器计数频率:CK_CNT = CK_PSC / (PSC + 1)

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

四、输入PWM模式

PWM模式1:

向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为有效电平,否则为无效电平;
向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平,否则为有效电平。


PWM模式2:

向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为无效电平,否则为有效电平;
向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为有效电平,否则为无效电平。

五、代码

PWM:

​
void motor_init(void)
{
    TIM_TimeBaseInitTypeDef   TIM_MotorInitStruct;
    GPIO_InitTypeDef   Motor_init;
	  TIM_OCInitTypeDef   TIMPWMMotorinit;

     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
	 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
	
	 GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);

	  //结构体配置 (需要放在前面)   //gpio.h
	   Motor_init.GPIO_Mode  =GPIO_Mode_AF_PP; //推挽复用输出
	  Motor_init.GPIO_Pin   =GPIO_Pin_6;
	  Motor_init.GPIO_Speed =GPIO_Speed_50MHz;
	  GPIO_Init(GPIOA,&Motor_init);

	  Motor_init.GPIO_Mode  =GPIO_Mode_AF_PP; //推挽复用输出
	  Motor_init.GPIO_Pin   =GPIO_Pin_5|GPIO_Pin_0|GPIO_Pin_1;
	  Motor_init.GPIO_Speed =GPIO_Speed_50MHz;
	  GPIO_Init(GPIOB,&Motor_init);

	 

    TIM_MotorInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;  // 设置时钟分割   不分频
    TIM_MotorInitStruct.TIM_CounterMode=  TIM_CounterMode_Up; //TIM向上计数模式
    TIM_MotorInitStruct.TIM_Period= 200-1;  //ARR(199+1)
    TIM_MotorInitStruct.TIM_Prescaler=7200-1;  //PSC(7199+1)
	
    TIM_TimeBaseInit(TIM3, &TIM_MotorInitStruct);
	 
    TIMPWMMotorinit.TIM_OCMode    =TIM_OCMode_PWM2;       //选择定时器模式1
	TIMPWMMotorinit.TIM_OutputState =TIM_OutputState_Enable;        //比较输出使能1
	TIMPWMMotorinit.TIM_OCPolarity  =TIM_OCPolarity_High;     //预装载寄存器    选择有效输出极性

	//TIM_OC1Init(TIM3, &TIMPWMMotorinit);
//	TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable );	
	//tim3  1
	TIM_OC2Init(TIM3, &TIMPWMMotorinit);
	TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable );	
	 //2
	TIM_OC3Init(TIM3, &TIMPWMMotorinit);
	TIM_OC3PreloadConfig(TIM3,TIM_OCPreload_Enable );	
	//tim3 	
	TIM_OC4Init(TIM3, &TIMPWMMotorinit);
    TIM_OC4PreloadConfig(TIM3,TIM_OCPreload_Enable );	

	//tim4
	

	TIM_Cmd(TIM3, ENABLE);

	
		
		
		
}

​

定时器:

void tim_config(void)
{
	
	TIM_TimeBaseInitTypeDef timInit;//定义初始化定时器结构体名
	NVIC_InitTypeDef NVICInit;		//定义中断的结构体名
	//1.使能时钟 定时器时钟
	RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM2, ENABLE);
	TIM_InternalClockConfig(TIM2);			 // 配置定时器2为内部时钟模式
	
	TIM_ClearFlag(TIM2, TIM_FLAG_Update);// 清除更新时的中断标志位,防止更新时程序直接进入中断
	TIM_ITConfig(TIM2, TIM_IT_Update,ENABLE);						//定时器中断配置
		
	//2.配置tim的结构体
	timInit.TIM_Period = 10000-1;					//设置自动重装载值
	timInit.TIM_CounterMode = TIM_CounterMode_Up;   //配置计数模式 为向上
	timInit.TIM_Prescaler = 7200 -1 ;				//配置分频系数的值(计数器时钟的分频系数)
	timInit.TIM_ClockDivision = TIM_CKD_DIV1;       //(内部时钟分频)设置分频系数为1,不分频
	TIM_TimeBaseInit(TIM2, &timInit);				//调用初始化函数
	
	
	//定时时间=(重装载值+1)*(计数器分频系数的值+1)/定时器的时钟:10000*7200/72000000(72M)
	//3.打开定时器中断,配置中断结构体
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);	//配置优先级组,才可以进行抢占优先级和响应优先级设置
	NVICInit.NVIC_IRQChannel = TIM2_IRQn;
	NVICInit.NVIC_IRQChannelPreemptionPriority = 1;
	NVICInit.NVIC_IRQChannelSubPriority = 1;
	NVICInit.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVICInit);
	TIM_Cmd(TIM2, ENABLE);
	//4.中断服务函数 
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu使用oh my zsh美化终端

ubuntu使用oh my zsh美化终端 文章目录 ubuntu使用oh my zsh美化终端1. 安装zsh和oh my zsh2. 修改zsh主题3. 安装zsh插件4. 将.bashrc移植到.zshrcReference 1. 安装zsh和oh my zsh 首先安装zsh sudo apt install zsh然后查看本地有哪些shell可以使用 cat /etc/shells 将默…

平方回文数-第13届蓝桥杯选拔赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第73讲。 平方回文数&#…

监控云安全的9个方法和措施

如今&#xff0c;很多企业致力于提高云计算安全指标的可见性&#xff0c;这是由于云计算的安全性与本地部署的安全性根本不同&#xff0c;并且随着企业将应用程序、服务和数据移动到新环境&#xff0c;需要不同的实践。检测云的云检测就显得极其重要。 如今&#xff0c;很多企业…

windows tomcat服务注册和卸载

首页解压tomcat压缩包&#xff0c;然后进入tomcat bin目录&#xff0c;在此目录通过cmd进入窗口&#xff0c; 1&#xff1a;tomcat服务注册 执行命令&#xff1a;service.bat install tomcat8.5.100 命令执行成功后&#xff0c;会在注册服务列表出现这个服务&#xff0c;如果…

打造爆款活动:确定目标受众与吸引策略的实战指南

身为一名文案策划经理&#xff0c;我深知在活动策划的海洋中&#xff0c;确定目标受众并设计出能触动他们心弦的策略是何等重要。 通过以下步骤&#xff0c;你可以更准确地确定目标受众&#xff0c;并制定出有效的吸引策略&#xff0c;确保活动的成功&#xff1a; 明确活动目…

Unity【入门】环境搭建、界面基础、工作原理

Unity环境搭建、界面基础、工作原理 Unity环境搭建 文章目录 Unity环境搭建1、Unity引擎概念1、什么是游戏引擎2、游戏引擎对于我们的意义3、如何学习游戏引擎 2、软件下载和安装3、新工程和工程文件夹 Unity界面基础1、Scene场景和Hierarchy层级窗口1、窗口布局2、Hierarchy层…

企业如何实现数据采集分析展示一体化

在当今数字化时代&#xff0c;企业越来越依赖于数据的力量来驱动决策和创新。通过全量实时采集各类数据&#xff0c;并利用智能化工具进行信息处理&#xff0c;企业能够借助大数据分析平台深入挖掘数据背后的价值&#xff0c;从而为企业发展注入新动力。 一、企业痛点 随着数字…

基于单片机智能防触电装置的研究与设计

摘 要 &#xff1a; 针对潮湿天气下配电线路附近易发生触电事故等问题 &#xff0c; 对单片机的控制算法进行了研究 &#xff0c; 设 计 了 一 种 基 于 单片机的野外智能防触电装置。 首先建立了该装置的整体结构框架 &#xff0c; 再分别进行硬件设计和软件流程分析 &#xf…

水电表远程抄表:智能化时代的能源管理新方式

1.行业背景与界定 水电表远程抄表&#xff0c;是随着物联网技术发展&#xff0c;完成的一种新型的能源计量管理方式。主要是通过无线传输技术&#xff0c;如GPRS、NB-IoT、LoRa等&#xff0c;将水电表的信息实时传输到云服务器&#xff0c;进而取代了传统人工当场抄水表。这种…

MySQL 重启之后无法写入数据了?

数据库交接后因 persist_only 级别的参数设置引发的故障分析。 作者&#xff1a;不吃芫荽&#xff0c;爱可生华东交付服务部 DBA 成员&#xff0c;主要负责 MySQL 故障处理及相关技术支持。 爱可生开源社区出品&#xff0c;原创内容未经授权不得随意使用&#xff0c;转载请联系…

冯喜运:5.29市场避险情绪升温,黄金原油小幅收涨

【黄金消息面分析】&#xff1a;周二&#xff08;5月28日&#xff09;美盘时段&#xff0c;由于美元走弱且市场情绪出现负面变化&#xff0c;黄金收复早前跌幅&#xff0c;站上2350美元关口。金价早盘一度走弱&#xff0c;源于美联储降息可能性降低带来压力&#xff0c;投资者在…

HTML+CSS TAB导航栏

效果演示 这段代码实现了一个名为"Tab导航栏"的效果,它是一个基于CSS的导航栏,包含五个选项卡,每个选项卡都有一个带有渐变背景色的滑块,当用户点击选项卡时,滑块会滑动到相应的位置。同时,选中的选项卡会变为白色,未选中的选项卡会变为灰色。 Code <!DOC…

SARscape雷达图像处理软件简介

合成孔径雷达&#xff08;SAR&#xff09;拥有独特的技术魅力和优势&#xff0c;渐成为国际上的研究热点之一&#xff0c;其应用领域越来越广泛。SAR数据可以全天候对研究区域进行量测、分析以及获取目标信息。高级雷达图像处理工具SARscape&#xff0c;能让您轻松将原始SAR数据…

每天写两道(二)LRU缓存、

146.LRU 缓存 . - 力扣&#xff08;LeetCode&#xff09; 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存…

猜猜我是谁游戏

猜谜过程 在TabControl控件中&#xff0c;第一个tab中放了一个PictureBox&#xff0c;里面有一张黑色的图片。 玩家点击显示答案按钮&#xff0c;切换图片。 设计器 private void button1_Click(object sender, EventArgs e){this.pictureBox1.Image Image.FromFile(&qu…

网络渗透day2

Windows登录的明文密码存储过程和密文存储位置 明文密码存储过程&#xff1a; Windows操作系统不会以明文形式存储用户密码。相反&#xff0c;当用户设置或更改密码时&#xff0c;系统会对密码进行哈希处理&#xff0c;然后存储其哈希值。哈希处理的目的是为了提高密码的安全性…

设计模式——职责链(责任链)模式

目录 职责链模式 小俱求实习 结构图 实例 职责链模式优点 职责链模式缺点 使用场景 1.springmvc流程 ​2.mybatis的执行流程 3.spring的过滤器和拦截器 职责链模式 使多个对象都有机会处理请求&#xff0c;从而避免请求的发送者和接受者之间的耦合关系。将这个对象连成…

VM虚拟机共享文件夹fuse: bad mount point `/mnt/hgfs‘: No such file or directory

报错显示挂载点 /mnt/hgfs 不存在&#xff0c;你需要先创建这个目录。可以按照以下步骤进行操作&#xff1a; 创建挂载点目录&#xff1a; sudo mkdir -p /mnt/hgfs 手动挂载共享文件夹&#xff1a; sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other 确保每次启动时自动…

IDEA 2023.3.6 下载、安装、激活与使用

一、IDEA2023.3.6下载 国际官网&#xff1a;https://www.jetbrains.com/ 国内官网&#xff1a;https://www.jetbrains.com.cn/ 如果国际官网无法访问&#xff0c;就使用国内官网&#xff0c;我们以国内官网为例下载IDEA2023.3.6 首先进入首页如下图&#xf…

1.2数学基础

向量运算 矩阵运算 比较基础就不记录了 MVP矩阵推导 1.讲为什么要有矩阵变换和不同的坐标空间 将3D物体转化到2D平面为各个空间的运用做准备 2.介绍各个空间的概念和含义 MVP矩阵代表什么&#xff1f; MVP矩阵分别是模型(Model)、观察(View)、投影(Projection)三个矩阵。…