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.hMotor_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;       //选择定时器模式1TIMPWMMotorinit.TIM_OutputState =TIM_OutputState_Enable;        //比较输出使能1TIMPWMMotorinit.TIM_OCPolarity  =TIM_OCPolarity_High;     //预装载寄存器    选择有效输出极性//TIM_OC1Init(TIM3, &TIMPWMMotorinit);
//	TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable );	//tim3  1TIM_OC2Init(TIM3, &TIMPWMMotorinit);TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable );	//2TIM_OC3Init(TIM3, &TIMPWMMotorinit);TIM_OC3PreloadConfig(TIM3,TIM_OCPreload_Enable );	//tim3 	TIM_OC4Init(TIM3, &TIMPWMMotorinit);TIM_OC4PreloadConfig(TIM3,TIM_OCPreload_Enable );	//tim4TIM_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.中断服务函数 
}

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

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

相关文章

基于SpringBoot的本科生考研率统计系统

基于SpringBoot的本科生考研率统计系统 一、开发技术二、功能模块三、代码结构四、数据库设计五、运行截图六、源码获取 一、开发技术 技术&#xff1a;SpringBoot、MyBatis-Plus、Redis、MySQL、Thymeleaf、Html、Vue、Element-ui。 框架&#xff1a;基于开源框架easy-admin开…

景源畅信:抖音小店新手小白如何做好运营?

在数字时代的浪潮中&#xff0c;抖音小店成为了众多创业者和商家的新宠。但面对激烈的市场竞争和不断变化的平台规则&#xff0c;新手小白如何才能在抖音小店的海洋里稳健航行&#xff0c;捕捉到属于自己的商机呢?接下来的内容将为你揭晓答案。 一、精准定位&#xff0c;明确目…

视频监控平台AS-V1000 的场景管理,一键查看多画面视频的场景配置、调用、管理(一键浏览多路视频)

目录 一、场景管理的定义 二、场景管理的功能和特点 1、功能 &#xff08;1&#xff09;场景配置 &#xff08;2&#xff09;实时监控 &#xff08;3&#xff09;权限管理 2、特点 三、AS-V1000的场景配置和调用 1、场景配置 &#xff08;1&#xff09;实时视频预览 …

React@16.x(12)ref 转发-forwardRef

目录 1&#xff0c;介绍2&#xff0c;类组件如何使用4&#xff0c;应用场景-高阶组件HOC 1&#xff0c;介绍 上篇文章中提到&#xff0c;ref 只能对类组件使用&#xff0c;不能对函数组件使用。 而 ref 转发可以对函数组件实现类似的功能。 使用举例&#xff1a; import Re…

为什么选择CleanMyMac软件呢?推荐理由

你是否曾经遇到过这样的问题&#xff1a;电脑运行缓慢&#xff0c;存储空间不足&#xff0c;不知道如何清理垃圾文件&#xff1f;别担心&#xff0c;我们为你找到了解决方案——CleanMyMac软件。这款强大的工具可以帮助你轻松解决这些问题&#xff0c;让你的电脑焕然一新&#…

深入理解Python中的包与模块

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、包的概述与功能 代码案例&#xff1a;包的结构 二、模块的划分与组合 划分模块的方法…

开源内网穿透神器:中微子代理(neutrino-proxy)实现内网穿刺

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

dubbo复习:(10)使用tripple协议进行通信

一、pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.…

场景文本检测识别学习 day10(MMdetection)

配置文件(config) 由于在大型项目中&#xff0c;一种模型需要分&#xff1a;tiny、small、big等很多种&#xff0c;而它们的区别主要在网络结构&#xff0c;数据的加载&#xff0c;训练策略等&#xff0c;且差别很多都很小&#xff0c;所以如果每个模型都手动从头写一份&#…

ChatGPT原创指令大全(持续更新)

随着ChatGPT在互联网上的使用越来越多&#xff0c;但很多人在使用ChatGPT的过程中会觉得得到的答案并不是很精准。究其原因其实是你给它的命令不够准确、不够到位。实际现在网上已经很多关于ChatGPT的网站&#xff0c;可以快速生成带有快捷键的ChatGPT指令。但是对于不熟悉Chat…

视创云展「VR直播」是什么?有哪些功能和应用场景?

视创云展「VR直播」通过“3D沉浸式展厅直播高互动感”的创新玩法&#xff0c;使企业随时随地举办一场低成本、高互动、能获客的元宇宙直播活动成为可能。「VR直播」能实现3D展厅内VR场景漫游&#xff0c;更结合音视频交互、同屏互动等新功能&#xff0c;为用户带来更沉浸的虚拟…

Java基础之 API 字符串

文章目录 API字符串String概述创建对象 java的内存模型java的常用方法(比较)练习 API 概念: APl(Application ProgrammingInterface): 应用程序编程接口 简单理解: API就是别人已经写好的东西&#xff0c;我们不需要自己编写&#xff0c;直接使用即可。 Java API: 指的就是J…

马斯克的 xAI 帝国!60亿融资背后的超级布局?

在全球科技竞技场&#xff0c;每个重大融资事件都是对行业格局的一次重塑。近日&#xff0c;埃隆马斯克的人工智能初创企业 xAI 成功完成了一轮规模空前的融资——60亿美元&#xff0c;此举无疑在业界投下了一枚震撼弹&#xff0c;标志着 AI 领域内一场新的竞赛拉开了序幕。 …

QT学习(20):QStyle类

Qt包含一组QStyle子类&#xff0c;这些子类&#xff08;QWindowsStyle&#xff0c;QMacStyle等&#xff09;模拟Qt支持的不同平台的样式&#xff0c;默认情况下&#xff0c;这些样式内置在Qt GUI模块中&#xff0c;样式也可以作为插件提供。 Qt的内置widgets使用QStyle来执行几…

LangChain之链的应用(下)

LangChain之链的应用 Chain链的应用配置LLMChain&#xff1a;简单链create_stuff_documents_chain&#xff1a;文档链create_extraction_chain&#xff1a;提取信息链LLMMathChain&#xff1a;数学链create_sql_query_chain&#xff1a;SQL查询链连接数据库创建并使用链 Sequen…

K210 数字识别 教程

一、烧写固件 连接k210开发板&#xff0c;点开烧录固件工具&#xff0c;选中固件&#xff0c;并下载 二、模型训练 网站&#xff1a;MaixHub 1、上传文件 2、开始标记数据 添加9个标签&#xff0c;命名为1~9&#xff0c;按键盘w开始标记&#xff0c;键盘D可以下一张图片&…

计算机网络(1

网络初识 目录 网络初识一. 网络分类1. 局域网LAN(Local Area Network):2. 广域网WAN(Wide Area Network): 二. 组建网络的基础设备1. 路由器2. 交换机 三. 标识符 协议 (protocol)一. 协议分层1. 分层的好处2. OSI七层分层3. TCP/IP五层模型(或四层) 模型(1. 物理层(可不算)(2…

Windows hook介绍与代码演示

Windows Hook 是一种机制&#xff0c;允许应用程序监视系统或处理特定事件。它可以拦截和更改消息&#xff0c;甚至可以插入到其他应用程序的消息处理机制中。Windows 提供了多种挂钩类型&#xff0c;例如键盘挂钩、鼠标挂钩、消息挂钩等。 hook代码实现 下面是一个使用 Wind…

OS复习笔记ch7-1

存储的基本管理需求 重定位 重定位(Relocation)&#xff1a;需要解决可执行文件中地址&#xff08;指令和数据&#xff09;和内存地址的对应。 一般有两种比较常见的重定位方式&#xff1a; 静态重定位(static relocation)&#xff1a;当程序被装入内存时&#xff0c;一次性…

【头歌】计算机网络DHCP服务器配置第四关配置路由器子接口答案

头歌计算机网络DHCP服务器配置第四关配置路由器子接口操作步骤 任务描述 本关任务&#xff1a;配置路由器的子接口。 操作要求 在第一关的拓扑图的基础上&#xff0c;配置路由器及 PC 机&#xff0c;具体要求如下&#xff1a; 1、打开路由器物理接口 F0/0 &#xff1b; 2、配置…