输入捕获模式可以用来测量脉冲宽度或者测量频率。STM32的定时器,除了TIM6和TIM7,其他定时器都有输入捕获功能。STM32的输入捕获,简单的说就是通过检测
输入捕获模式可以用来测量脉冲宽度或者测量频率。STM32的定时器,除了TIM6和TIM7,其他定时器都有输入捕获功能。STM32的输入捕获,简单的说就是通过检测TIMx_CHx上的边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的时候,将当前定时器的值(TIMx_CNT)存放到对应的通道的捕获/比较寄存(TIMx_CCRx)里面,完成一次捕获。同时还可以配置捕获时是否触发中断/DMA 等.
例如:我们用到TIM5_CH1来捕获高电平脉宽,也就是要先设置输入捕获为上升沿检测,记录发生上升沿的时候TIM5_CNT的值。然后配置捕获信号为下降沿捕获,当下降沿到来时,发生捕获,并记录此时的TIM5_CNT值。这样,前后两次TIM5_CNT之差,就是高电平的脉宽,同时TIM5的计数频率我们是知道的,从而可以计算出高电平脉宽的准确时间。
首先TIMx_ARR和TIMx_PSC,这两个寄存器用来设自动重装载值和TIMx的时钟分频。
再来看看捕获/比较模式寄存器1:TIMx_CCMR1,这个寄存器在输入捕获的时候,非常有用;TIMx_CCMR1明显是针对2个通道的配置,低八位[7:0]用于捕获/比较通道1的控制,而高八位[15:8]则用于捕获/比较通道2的控制,因为TIMx还有CCMR2这个寄存器,所以可以知道CCMR2是用来控制通道3和通道4(详见《STM32参考手册》290页,14.4.8节)。
这里用到TIM5的捕获/比较通道1,我们重点介绍TIMx_CMMR1的[7:0]位(其实高8位配置类似)。
再来看看捕获/比较使能寄存器:TIMx_CCER;
接下来我们再看看DMA/中断使能寄存器:TIMx_DIER,我们需要用到中断来处理捕获数据,所以必须开启通道1的捕获比较中断,即CC1IE设置为1。
控制寄存器:TIMx_CR1,我们只用到了它的最低位,也就是用来使能定时器的;
最后再来看看捕获/比较寄存器1:TIMx_CCR1,该寄存器用来存储捕获发生时,TIMx_CNT的值,我们从TIMx_CCR1就可以读出通道1捕获发生时刻的TIMx_CNT值,通过两次捕获(一次上升沿捕获,一次下降沿捕获)的差值,就可以计算出高电平脉冲的宽度。
使能捕获和更新中断(设置TIM5的DIER寄存器)
因为我们要捕获的是高电平信号的脉宽,所以,第一次捕获是上升沿,第二次捕获时下降沿,必须在捕获上升沿之后,设置捕获边沿为下降沿,同时,如果脉宽比较长,那么定时器就会溢出,对溢出必须做处理,否则结果就不准了。这两件事,我们都在中断里面做,所以必须开启捕获中断和更新中断。
关键字:stm32 定时器 捕获 测量频率
引用地址:
stm32 定时器 捕获
推荐阅读最新更新时间:2024-11-08 13:16
STM32单片机(12) 红外信号接收解码(外部中断)
本程序主要利用外部中断,实现红外遥控器信号接收解码,并利用串口通信把编码传至计算机显示 注:请用质量好点的遥控器实验,用了劣质遥控器浪费了一天时间,数据位接收总是不完整,后来用宿舍空调遥控器就解码成功了 相关资料 STM32单片机学习(2) 外部中断 http://blog.csdn.net/leytton/article/details/38063335 STM32单片机学习(3) 串口中断通信 http://blog.csdn.net/leytton/article/details/38393553 STM32单片机学习(7) 串口通信printf重定向 http://blog.csdn.net/leytton/ar
[单片机]
STM32 BH1750光线感应源程序
单片机源程序如下: #include bh1750.h #include delay.h #include timer.h u8 BUF ; u16 temp2=0; float lux=0; void bh1750_iic_init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE ); //使能GPIOB时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6;
[单片机]
STM32串口获取氨气传感器数据
传感器:ZE03电化学模组NH3NH3 (0-100ppm) 同上篇关于STM32串口接收激光粉尘传感器的博文差不多,因为该传感器提供了串口输出数据,其他配置可以和粉尘传感器一样不变,主要修改串口中断函数即可 void USART2_IRQHandler(void) //串口2中断服务程序(氨气浓度测量) { u8 Res; static char i=0, start=0; if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //接收中断 { Res =USART_ReceiveData(USART2); //读取接收到的数
[单片机]
STM32(HY-SRF05)超声波测距项目
首先,先来看一下这个模块的基本功能和原理。 HC-SR04超声波测距模块可提供2cm-400cm的非接触式距离感测功能,测距精度可达高到3mm;模块包括超声波发射器、接收器与控制电路。像智能小车的测距以及转向,或是一些项目中,常常会用到。智能小车测距可以及时发现前方的障碍物,使智能小车可以及时转向,避开障碍物。 注意是5v输入,但是我用stm32 的3.3v输入也是没有问题的 1、模块(OUT脚的作用是什么) 2、工作原理 (1)、采用IO口TRIG触发测距,给至少10us的高电平信号; (2)、模块自动发送8个40khz的方波,自动检测是否有信号返回; (3)、有信号返回,通过IO口ECHO输出一个高电平,高电
[单片机]
基于ARM的微波频率自动测量系统设计
1.引言 通常微波所指的是分米波、厘米波和毫米波。关于其频率范围,一种说法是: 300MHz ~ 300GHz(1MHz =106Hz,1GHz =109 )相应的自由空间中的波长约为1m~1mm. 微波技术的兴起和蓬勃发展,使得国内大多数高校都开设微波技术课程。但还存在以下问题:测量时,由手工逐点移动探头并记录各点读数,然后手工计算实验结果并绘图。测量项目单一、精度低、测量周期长,操作也较为繁琐。本文主要研究一种实用的基于Labview的速调管微波频率自动测量系统。 2.系统整体结构 系统的整体结构如图2-1所示。由下位机跟上位机构成。微处理器通过驱动电路来控制步进电机,带动谐振式频率计的
[测试测量]
STM32串口多机通信
从设备采用漏极开路方式级联,从设备的串口TX必须配置为漏极开路,不能是推挽方式,如果配置成推挽方式,会导致灌电流过大,低电平低不下去问题 STM32 的UART数据寄存器是9位,数据传输先传低位(LSB) --实际应用发现9位数据大时候有丢包错包问题?? 利用USART可以进行多机处理器通信,其原理就是使从机处于静默模式,由主机在需要的时候发送指令唤醒从机,并传输数据。STM32静默模式特点:1、所有接收状态位都不会被设置;2、所有的接收中断都被禁止;3、USART_CR1寄存器中的RWU位被置1,RUW可以硬件自动控制或者在某些条件下由软件写。 连接方法很简单,主机的TX输出与从机的RX端口直接相连,从机TX端口要经过与
[单片机]
STM32内存管理(一)
STM32是指令和数据共用相同的地址空间,即程序存储器、数据存储器、寄存器和I/O端口在一个4GB的线性地址空间内。数据字节以小端格式存放在存储器中,一个字的最低地址字节被认为是该字的最低有效字节,而最高地址字节是最高有效字节。 一、STM32存储器架构 4G的地址空间即地址编码的范围,编码就是对每一个程序存储、数据存储器、寄存器和I/O端口分配唯一的地址编码,即“编址”或“地址映射”。 存储器映射是把芯片中或芯片外的Flash、RAM、外设、BOOTBLOCK等进行统一编址。 STM32的寻址空间大小为4G,也就是从0x0000 0000~0xFFFF FFFF这一块空间,分为8个主要块,
[单片机]
GD32开发实战指南(基础篇) 第8章 定时器
开发环境: MDK:Keil 5.30 开发板:GD32F207I-EVAL MCU:GD32F207IK 1 PWM输出的工作原理 脉冲宽度调制(PWM) ,是英文“Pulse Width Modulation” 的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单一点,就是对脉冲宽度的控制。 GD32 的定时器除了 TIMER5 和 6(基本定时器)。其他的定时器都可以用来产生 PWM 输出。 每个定时器有四个通道,每一个通道都有一个捕获比较寄存器,,将寄存器值和计数器值比较,通过比较结果输出高低电平,便可以实现脉冲宽度调制模式(PWM信号)。 在上一节,讲解了定时器
[单片机]