STM32 定时器输入捕获1——初始化配置

        当想检测高电平或低电平的持续时间的时候,就可以使用定时器输入捕获。例如示波器就是用到这个功能。这里就讲解一下定时器到底是如何输入捕获的:

        

        由上图我们可以知道,周期 是每次连续的上升沿的时间差(例如:T=第二个方波的上升沿时间-第一个方波的上升沿时间),高电平时间 是每次连续的上升沿和下降沿的时间差(例如:T高电平=第一个方波的下降沿-第一个方波的上升沿)。

        (基本定时器是不具备输入捕获的,通用/高级定时器具备输入捕获)

        如何实现输入捕获?

        这里选择TIM2_CH2和TIM3_CH1作为讲解示例。先让TIM2_CH2产生PWM脉冲传输到TIM3_CH1(说直白点就是,一个引脚输出PWM脉冲信号然后拿杜邦线插到另一个引脚上面),然后用TIM3_CH1检查一下PWM脉冲有没有问题。

        STM32F103C8T6中,PA6:TIM3_CH1,PA7:TIM3_CH2,PB0:TIM3_CH3,PB1:TIM3_CH4。让PA6当做输入捕获。

void TIM3_InputCaputure_Configuration(void)
{GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);TIM_TimeBaseStructure.TIM_Period = 19999;TIM_TimeBaseStructure.TIM_Prescaler = 71;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);}

        从上面代码可以看出,频率为1us,周期为20ms。所以我们的计算上限为20ms,如果超过则会进入溢出中断。但是也可以这样用,每溢出一次进入溢出中断,溢出中断计数,如果溢出中断计数为10,则时间为10*20ms=200ms。

        正常情况下,我们大多使用在一次周期之内完成计数,而不去频繁进入溢出中断。所以我们把预分配直接拉满:

TIM_TimeBaseStructure.TIM_Period = 0xFFFF;

TIM_ICInit:指定的参数初始化外设TIMx。

参数一:TIMx,例如TIM2,TIM3。

参数二:指向结构体TIM_ICInitTypeDef的指针。

TIM_ICInitTypeDef structure
TIM_ICInitTypeDef 定义于文件“stm32f10x_tim.h”:
typedef struct { u16 TIM_Channel; u16 TIM_ICPolarity; u16 TIM_ICSelection; u16 TIM_ICPrescaler; u16 TIM_ICFilter; } TIM_ICInitTypeDef;

TIM_Channel:选择通道。

TIM_Channel描述
TIM_Channel_1使用TIM通道1
TIM_Channel_2使用TIM通道2
TIM_Channel_3使用TIM通道3
TIM_Channel_4使用TIM通道4

TIM_ICPolarity:输入活动沿。

TIM_ICPolarity描述
TIM_ICPolarityTIM输入捕获上升沿
TIM_ICPolarityTIM输入捕获下降沿

TIM_ICSelection:选择输入。

TIM_ICSelection描述
TIM_ICSelection_DirectTI
TIM 输入 2 3 4 选择对应地与 IC1 IC2
IC3 IC4 相连
TIM_ICSelection_IndirectTI
TIM 输入 2 3 4 选择对应地与 IC2 IC1
IC4 IC3 相连
TIM_ICSelection_TRC
TIM 输入 2 3 4 选择与 TRC 相连

TIM_ICPrescaler:设置输入捕获预分频器。

TIM_ICPrescaler描述
TIM_ICPSC_DIV1TIM捕获在捕获输入上每探测到一个边沿执行一次
TIM_ICPSC_DIV2TIM捕获每2个事件执行一次
TIM_ICPSC_DIV3TIM捕获每3个事件执行一次
TIM_ICPSC_DIV4TIM捕获每4个事件执行一次

TIM_ICFilter:选择输入比较滤波器。该参数值在0x0和0xF之间。

PA6的全部初始化:

void TIM3_InputCaputure_Configuration(void)
{GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_ICInitTypeDef TIM_ICInitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);TIM_TimeBaseStructure.TIM_Period = 0xFFFF;TIM_TimeBaseStructure.TIM_Prescaler = 71;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;TIM_ICInitStructure.TIM_ICFilter = 0x0;TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;TIM_ICInit(TIM3,&TIM_ICInitStructure);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);	NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);TIM_ClearFlag(TIM3, TIM_FLAG_CC1);TIM_ITConfig(TIM3, TIM_FLAG_CC1, ENABLE);TIM_Cmd(TIM3,ENABLE);
}

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

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

相关文章

数据分析基础

数据运营的概念及意义 数据分析的三个维度 数据总览的作用及提升方法 数据总览的作用及提升方法 数据总览的作用及提升方法小结 影响作品数据的关键因素 影响作品数据的关键因素小结 用户数据的意义与作用 用户数据分析的方法与操作 用户数据分析的方法与操作小结 数据运营小结…

最新AI绘画Midjourney绘画提示词Prompt大全

一、Midjourney绘画工具 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭…

NAND新一代接口Separate Command Address (SCA) 简介

通过NAND Flash总线传输的信号分为三种类型:命令(Commands)、地址(Addresses)和数据(Data)。这些信号利用DQ[7:0]时间分时复用技术,在不同的时间段分别进行传输。其中,数…

vcruntime140.dll已加载,但找不到入口点的处理方法分享

当遇到错误提示“vcruntime140.dll已加载,但找不到入口点”时,很多人可能会感到困惑,不知道如何去处理这个问题。不过没有必要紧张,在这里我会为大家详细解释 vcruntime140.dll 文件是什么,并指导大家如何高效地解决 v…

VMware workstation安装MX-23.1虚拟机并配置网络

VMware workstation安装MX-23.1虚拟机并配置网络 MX Linux是基于Debian稳定分支的面向桌面的Linux发行,采用Xfce作为缺省桌面,是一份中量级操作系统。该文档适用于在VMware workstation平台安装MX-23.1虚拟机。 1.安装准备 1.1安装平台 Windows 11 …

如何实现IOS APP被杀掉后依然可以接收到个推消息通知

背景 项目已经集成了个推SDK,但是在离线场景下无法收到推送消息,离线场景主要分2种情况,一种是用户将APP切换到了后台,一种是用户将APP杀掉了。 针对场景一:我们可以将APP支持后台运行,比如项目中使用到了…

2024年烟花爆竹经营单位安全管理人员证考试题库及烟花爆竹经营单位安全管理人员试题解析

题库来源:安全生产模拟考试一点通公众号小程序 2024年烟花爆竹经营单位安全管理人员证考试题库及烟花爆竹经营单位安全管理人员试题解析是安全生产模拟考试一点通结合(安监局)特种作业人员操作证考试大纲和(质检局)特…

【STM32】HAL库的STOP低功耗模式UART串口唤醒,解决首字节出错的问题(全网第一解决方案)

【STM32】HAL库的STOP低功耗模式UART串口唤醒,解决首字节出错的问题(全网第一解决方案) 前文: 【STM32】HAL库的STOP低功耗模式UART串口唤醒,第一个接收字节出错的问题(疑难杂症) 目前已解决 …

Docker五部曲之一:容器术语介绍

文章目录 前言背景基本术语容器镜像容器镜像格式容器引擎容器容器主机注册中心容器编排 进阶术语容器运行时镜像层标签存储库名称空间 参考 前言 本文内容翻译自参考文献。 背景 要理解容器术语,重要的是要精确地理解容器是什么。容器实际上是两个不同的东西。像…

DNS解析和它的三个实验

一、DNS介绍 DNS:domain name server 7层协议 名称解析协议 tcp /53 主从之间的同步 udp/53 名字解析 DNS作用:将域名转换成IP地址的协议 1.1DNS的两种实现方式 1.通过hosts文件(优先级最高) 分散的管理 linux /etc/hos…

数据仓库 Apache Hive

一、数据分析 1、数据仓库 数据仓库(英语:Data Warehouse,简称数仓、DW),是一个用于存储、分析、报告的数据系统。 数据仓库的目的是构建面向分析的集成化数据环境,分析结果为企业提供决策支持&#xff08…

Nginx配置负载均衡实例

Nginx配置反向代理实例二 提醒一下:下面实例讲解是在Mac系统演示的; 负载均衡实例实现的效果 浏览器地址栏输入地址http://192.168.0.101/test/a.html,刷新页面进行多次请求,负载均衡效果,平均分配到8080端口服务和8…