当前位置:首页 > 单片机 > 单片机
[导读] 输入捕获模式可以用来测量脉冲宽度或者测量频率。STM32的定时器,除了TIM6和TIM7,其他定时器都有输入捕获功能。STM32的输入捕获,简单的说就是通过检测TIMx_CHx上的边沿信号,在边沿信号发生跳变(比如上升沿/下降

输入捕获模式可以用来测量脉冲宽度或者测量频率。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寄存器)

因为我们要捕获的是高电平信号的脉宽,所以,第一次捕获是上升沿,第二次捕获时下降沿,必须在捕获上升沿之后,设置捕获边沿为下降沿,同时,如果脉宽比较长,那么定时器就会溢出,对溢出必须做处理,否则结果就不准了。这两件事,我们都在中断里面做,所以必须开启捕获中断和更新中断。


1 void init_tim2_cam(u16 psc, u16 arr, u8 way, u8 dir)

2 {

3 RCC->APB1ENR |= 1 << 0; //使能定时器2时钟

4 RCC->APB2ENR |= 1 << 2; //使能PortA

5

6 switch (way)

7 {

8 case 1:

9 GPIOA->CRL &= 0xfffffff0;

10 GPIOA->CRL |= 0x00000008;

11 break;

12 case 2:

13 GPIOA->CRL &= 0xffffff00;

14 GPIOA->CRL |= 0x00000088;

15 break;

16 case 3:

17 GPIOA->CRL &= 0xfffff000;

18 GPIOA->CRL |= 0x00000888;

19 break;

20 case 4:

21 GPIOA->CRL &= 0xffff0000;

22 GPIOA->CRL |= 0x00008888;

23 break;

24 }

25

26 TIMER->PSC = psc;

27 TIMER->ARR = arr;

28

29 switch (way)

30 {

31 case 4:

32 TIMER->CCMR2 |= 1 << 8;

33 if (dir == 0)

34 TIMER->CCER |= 1 << 13; //下降沿捕获

35 else

36 TIMER->CCER &= ~(1 << 13); //上升沿捕获

37 TIMER->CCER |= 1 << 12;

38 TIMER->DIER |= 1 << 4;

39 case 3: //CCR3 PA2

40 TIMER->CCMR2 |= 1 << 0;

41 if (dir == 0)

42 TIMER->CCER |= 1 << 9; //下降沿捕获

43 else

44 TIMER->CCER &= ~(1 << 9); //上升沿捕获

45 TIMER->CCER |= 1 << 8;

46 TIMER->DIER |= 1 << 3;

47 case 2: //CCR2 PA1

48 TIMER->CCMR1 |= 1 << 8; //CCR2配置通道方向:输入

49 if (dir == 0)

50 TIMER->CCER |= 1 << 5; //下降沿捕获

51 else

52 TIMER->CCER &= ~(1 << 5); //上升沿捕获

53 TIMER->CCER |= 1 << 4; //CCR2通道捕获使能

54 TIMER->DIER |= 1 << 2; //CCR2通道允许捕获中断

55 case 1: //>CCR1 PA0

56 TIMER->CCMR1 |= 1 << 0; //CCR1配置通道方向:输入

57 if (dir == 0)

58 TIMER->CCER |= 1 << 1; //下降沿捕获

59 else

60 TIMER->CCER &= ~(1 << 1); //上升沿捕获

61 TIMER->CCER |= 1 << 0; //CCR1捕获使能

62 TIMER->DIER |= 1 << 1; //CCR1通道允许捕获中断

63 break;

64 }

65 TIMER->DIER |= 1 << 0; //允许更新中断

66 MY_NVIC_Init(1, 2, TIM2_IRQChannel, 2); //中断

67 TIMER->CR1 = 0x01; //使能定时器

68 TIMER->SR &= ~(1 << 0);

69 }



本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

在微控制器领域,MSP430与STM32无疑是两颗璀璨的明星。它们各自凭借其独特的技术特点和广泛的应用领域,在市场上占据了重要的位置。本文将深入解析MSP430与STM32之间的区别,探讨它们在不同应用场景下的优势和局限...

关键字: MSP430 STM32 单片机

STM32是由意法半导体公司(STMicroelectronics)推出的基于ARM Cortex-M内核的32位微控制器系列,以其高性能、低功耗、丰富的外设接口和强大的生态系统深受广大嵌入式开发者喜爱。本文将详细介绍S...

关键字: STM32 单片机

STM32与51单片机之间有什么差异呢?两者可以说是一场科技与性能的较量了。在科技飞速发展的今天,微控制器(MCU)已广泛应用于各类电子设备和系统中,发挥着举足轻重的作用。其中,STM32和51单片机作为两种常见的微控制...

关键字: STM32 51单片机 MCU

电磁铁是一种利用电流产生磁场的装置,具有快速响应、易于控制等特点,在工业自动化、电子设备、科学实验等领域有着广泛的应用。STM32是一款功能强大的微控制器,具有高性能、低功耗、易于编程等优点,是控制电磁铁的理想选择。本文...

关键字: 电磁铁 微控制器 STM32

边缘人工智能的实现涉及到三个基本 要素:安全性,连接性、自主性,而其中自主性是AI能力的体现,也是边缘AI有别于其他传统的物联网的关键。而通过ST Edge AI套件,就可以帮助各种不同类型的开发者实现覆盖全硬件平台的全...

关键字: 边缘人工智能 AI STM32

今天,小编将在这篇文章中为大家带来STM32单片机最小系统的有关报道,通过阅读这篇文章,大家可以对它具备清晰的认识,主要内容如下。

关键字: 单片机 单片机最小系统 STM32

STM32是一款由STMicroelectronics生产的微控制器系列,具有高性能、低功耗和丰富的外设资源。其中,串口通信是一种常用的通信方式,可以实现与其他设备之间的数据传输。

关键字: STM32 串口通信 微控制器

STM32是一种广泛使用的微控制器,具有丰富的通信接口。其中,串口通信是STM32与其他设备或系统进行数据交换的重要方式之一。本文将详细介绍STM32串口通信的原理、应用及常见故障。

关键字: STM32 串口通信

由于目前缺乏相应的监测技术,地下电缆线路出现异常运行状态无法被及时发现,久而久之易演变成大故障,最终只能通过更换地下电缆进行修复,耗费大量的人力、物力。鉴于此,开发了一种基于STM32的地下电缆异常状态检测系统,利用热传...

关键字: STM32 地下电缆

交通灯控制器是用于控制交通信号灯运行的设备,它可以根据交通流量、行人需求以及其他因素,动态地调整信号灯的变化时间和绿灯时长,以保证交通的流畅和安全。

关键字: 交通信号灯 STM32
关闭
关闭