STM32F103 输入捕获

最近这几周各种考试,各种课程设计,唉,我得复习复习了,所以啦,博客暂停直到6-25之后继续更新,欢迎阅读。

STM32F103 输入捕获信号:

/*---------------------------------------------------------------------------
 * Project: Time.h
 * Name: zwp
 * Date: 2014/6
 *---------------------------------------------------------------------------*/

 #ifndef TIME_H_
 #define TIME_H_

 #include "stm32f10x.h"

 /*
 ** ¶¨Ê±Æ÷2ͨµÀ1ÊäÈ벶»ñÅäÖÃ
 */
 void TIM2_Cap_Init(u16 arr, u16 psc);

 /*
 ** ¶¨Ê±Æ÷5ÖжϷþÎñ³ÌÐò
 */
 void TIM2_IRQHandler(void);

 #endif
/*-------------------------------------------------------------------------------
 * Project: Time.c
 * Name: zwp
 * Date: 2014/6
 *-----------------------------------------------------------------------------*/

 #include "Time.h"

 TIM_ICInitTypeDef TIM2_ICInitStructure;

 /*
 ** ¶¨Ê±Æ÷2ͨµÀ1ÊäÈ벶»ñÅäÖÃ
 */
 void TIM2_Cap_Init(u16 arr, u16 psc)
 {
	 GPIO_InitTypeDef GPIO_InitStructure;
	 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
	 NVIC_InitTypeDef NVIC_InitStructure;

	 /* ʹÄÜTIM2 ʱÖÓ */
	 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
	 /* ʹÄÜGPIOAʱÖÓ */
	 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

	 /* ÉèÖÃÒý½Å */
	 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
	 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
	 GPIO_Init(GPIOA, &GPIO_InitStructure);
	 /* PA0 ÏÂÀ­ */
	 GPIO_ResetBits(GPIOA, GPIO_Pin_0);

	 /* ³õʼ»¯¶¨Ê±Æ÷2TIM2 */
	 TIM_TimeBaseStructure.TIM_Period = arr;	// É趨¼ÆÊýÆ÷×Ô¶¯ÖØ×°Öµ
	 TIM_TimeBaseStructure.TIM_Prescaler = psc;	// Ô¤·ÖƵÆ÷
	 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;// ÉèÖÃʱÖÓ·Ö¸î
	 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // ÏòÉϼÆÊý
	 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);	// ³õʼ»¯TIMxµÄʱ¼ä»ùÊýµ¥Î»

	 /* ³õʼ»¯TIM2 ÊäÈ벶»ñ²ÎÊý */
	 TIM2_ICInitStructure.TIM_Channel = TIM_Channel_1;	// Ñ¡ÔñÊäÈë¶ËIC1ÒþÉäµ½TI1ÉÏ
	 TIM2_ICInitStructure.TIM_ICPolarity  = TIM_ICPolarity_Rising;	// ÉÏÉýÑز¶»ñ
	 TIM2_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;// ÒþÉäµ½TI1ÉÏ
	 TIM2_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;	// ÅäÖÃÊäÈë·ÖƵ£¬²»·ÖƵ
	 TIM2_ICInitStructure.TIM_ICFilter = 0x00;	// ÅäÖÃÊäÈëÂ˲¨Æ÷ ²»Â˲¨
	 TIM_ICInit(TIM2, &TIM2_ICInitStructure);

	 /* ÖжϷÖ×é³õʼ»¯ */
	 NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;	// TIM2 ÖжÏ
	 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;	// ÏÈÕ¼ÓÅÏȼ¶2
	 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;	// ×ÓÓÅÏȼ¶0¼¶
	 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;	// IRQͨµÀ±»Ê¹ÄÜ
	 NVIC_Init(&NVIC_InitStructure);	// ³õʼ»¯ÍþÉåNVIC¼Ä´æÆ÷

	 /* ÔÊÐí¸üÐÂÖжÏCC1IE²¶»ñÖÐ¶Ï */
	 TIM_ITConfig(TIM2, TIM_IT_Update|TIM_IT_CC1, ENABLE);
	 /* ʹÄܶ¨Ê±Æ÷ 2 */
	 TIM_Cmd(TIM2, ENABLE);	

 }

 u8 TIM2CH1_CAPTURE_STA = 0;	// ÊäÈ벶»ñ״̬
 u16 TIM2CH1_CAPTURE_VAL; 		// ÊäÈ벶»ñÖµ

 /*
 ** ¶¨Ê±Æ÷5ÖжϷþÎñ³ÌÐò
 */
 void TIM2_IRQHandler(void)
 {
	 if((TIM2CH1_CAPTURE_STA & 0x80) == 0)	// »¹Î´³É¹¦²¶»ñ
	 {
		 if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
		 {
			 if(TIM2CH1_CAPTURE_STA & 0x40)	// ÒѾ­²¶»ñµ½¸ßµçƽ
			 {
				 if((TIM2CH1_CAPTURE_STA & 0x3f) == 0x3F)	// ¸ßµçƽ̫³¤ÁË
				 {
					TIM2CH1_CAPTURE_STA |= 0x80;
					TIM2CH1_CAPTURE_VAL = 0xFFFF;
				 }
				  else
						TIM2CH1_CAPTURE_STA++; 

			 }

		 }
	 if(TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET)	// ²¶»ñ1·¢Éú²¶»ñʼþ
	 {
		 if(TIM2CH1_CAPTURE_STA & 0x40)	// ²¶»ñµ½Ò»¸öϽµÑØ
		 {
			 TIM2CH1_CAPTURE_STA |= 0x80;	// ´Ó±ê¼Ç³É¹¦²¶»ñµ½Ò»´ÎÉÏÉýÑØ
			 TIM2CH1_CAPTURE_VAL = TIM_GetCapture1(TIM2);
			 /* CC1P = 0 ÉèÖÃΪÉÏÉýÑز¶»ñ */
			 TIM_OC1PolarityConfig(TIM2, TIM_ICPolarity_Rising);

		 }
		 else	/* »¹Î´¿ªÊ¼µÚÒ»´Î²¶»ñÉÏÉýÑØ */
		 {
			 TIM2CH1_CAPTURE_STA = 0;
			 TIM2CH1_CAPTURE_VAL = 0;
			 TIM_SetCounter(TIM2, 0);
			 TIM2CH1_CAPTURE_STA |= 0x40;	// ±ê¼Ç²¶»ñµ½ÁËÉÏÉýÑØ
			 TIM_OC1PolarityConfig(TIM2, TIM_ICPolarity_Falling);	// ÉèÖÃΪϽµÑز¶»ñ

		 }

	 }
	}
	TIM_ClearITPendingBit(TIM2, TIM_IT_CC1|TIM_IT_Update);	// Çå³ýÖжϱê־λ

 }

注释字体乱码了,可能是编码格式不同吧!认真看,因该能看懂。

加油封尘浪!!!

STM32F103 输入捕获,布布扣,bubuko.com

时间: 2024-12-21 18:34:41

STM32F103 输入捕获的相关文章

STM32F103输入捕获的实现

目的:实现对边沿信号的捕捉并及时,可用作计算脉宽,或者频率等功能: 需要外设:TIM8 需求:测量TIM8_CH2的输入频率: 操作: 1.配置TIM8外设: 2.读取两次下降沿的时间间隔 1.编写相关函数 //  IO口的配置void IO_Init(void){ RCC->APB2ENR |= 1<<4;    //使能GPIOC时钟 GPIOC->CRL &= 0X0FFFFFFF;  //清除GPIO PC7的配置: GPIOC->CRL |= 0X40000

[STM32F103]PWM输入捕获配置

l 初始化定时器和通道对应IO的时钟. l 初始化IO口,模式为输入: GPIO_Init(); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0 输入 l 初始化定时器ARR,PSC TIM_TimeBaseInit(); l 初始化输入捕获通道 TIM_ICInit(); l 如果要开启捕获中断, TIM_ITConfig(); NVIC_Init(); l 使能定时器: TIM_Cmd(); l 编写中断服务函数: TIMx_IRQHa

STM32F0xx_TIM输入捕获(计算频率)配置详细过程

前言 关于STM32的定时器,可谓是功能强大,估计没有多少人研究完STM32定时器的所有功能(包括我也没有),只是使用常用的一些功能,后续我会推出关于STM32定时器的更多功能. STM32芯片多数为16位计数,但基本上都有1个或两个32位的定时器,可惜的是我们最常使用的F1系列芯片中没有32位的定时器,F030中也没有,具体请看数据手册. 今天主要总结关于STM32F0系列输入捕获,捕获信号频率,即所谓逻辑分析仪检测数字频率的功能. 今天使用32位的TIM2作为捕获的定时器,为什么是32位,原

STM32之输入捕获以及小小应用(库)

五一之际,先祝大家五一快乐.其实快乐很简单,工作的人有假放,学习的人也有假放,像我,有假放才有更多的时间学自己想学的东西.51假期学51,可惜没有32假期呀.好了..言归正传,大家听过吸星大法吧..在这里.智商和情商比我高的人估计又知道我要说什么了..没错了..今天我们来了解"葵花宝典"第STM32篇之输入捕获,也就是上文所讲的"吸星大法", 那输入捕获可以用来干嘛呢??这个问题问的好,输入捕获可以用来测量脉冲宽度或者测量频率,假如要捕获一个脉冲的高电平脉宽,我们要

STM32学习笔记11(通用定时器作为输入捕获2)

通用定时器作为输入捕获的使用.我们将用 TIM5 的通道 1 (PA0)来做输入捕获,捕获 PA0 上高电平的脉宽(用 WK_UP 按键输入高电平),通过串口打印高电平脉宽时间 输入捕获简介 输入捕获模式可以用来测量脉冲宽度或者测量频率. STM32 的定时器,除了 TIM6 和 TIM7,其他定时器都有输入捕获功能.STM32 的输入捕获,简单的说就是通过检测 TIMx_CHx 上的边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的时候,将当前定时器的值(TIMx_CNT)存放到对应的通道的

STM32使用定时器实现输入捕获

输入捕获简介输入捕获模式可以用来测量脉冲宽度或者测量频率.STM32的定时器,除了TIM6和TIM7,其他定时器都有输入捕获功能. STM32的输入捕获,简单地说就是通过检测TIMx_CHx上的边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的时候,将此刻定时器的值(TIMx_CNT)存放到对应的通道的捕获/比较寄存器(TIMx_CCRx)里面,完成一次捕获. 使用TIM2输入捕获的配置步骤:1.开启TIM2时钟,配置PA0为下拉输入.需要使用到PA0作为TIM2_CH1上面的脉冲输入.2.设

输入捕获,输出比较

明确一点对比AD的构造,stm32有3个AD,每个AD有很多通道,使用哪个通道就配置成哪个通道,这里定时器也如此,有很多定时器TIMx,每个定时器有很多CHx(通道),可以配置为输入捕捉-------测量频率用,也可以配置为输出比较--------输出PWM使用 输入捕捉:可以用来捕获外部事件,并为其赋予时间标记以说明此事件的发生时刻. 外部事件发生的触发信号由单片机中对应的引脚输入(具体可以参考单片机的datasheet),也可以通过模拟比较器单元来实现. 时间标记可用来计算频率,占空比及信号

stm32寄存器版学习笔记06 输入捕获(ETR脉冲计数)

STM32外部脉冲ETR引脚:TIM1-->PA12;TIMER2-->PA0:TIMER3-->PD2;TIMER4-->PE0… 1.TIM2 PA0计数 配置步骤 ①开启TIM2时钟,配置PA0输入 APB1外设复位寄存器 (RCC_APB1RSTR) APB2外设时钟使能寄存器(RCC_APB2ENR) 置1开启.清0关闭. Eg:RCC->APB1ENR|=1<<0; //使能TIM2时钟  RCC->APB2ENR|=1<<2;  

STM32学习笔记3(TIM输入捕获)

PWM 输入捕获模式< xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" /> 一.概念理解 PWM输入捕获模式时输入捕获模式的特例 1.每个定时器有四个输入通道IC1.IC2.IC3.IC4,且IC1 IC2一组,IC3 IC4一组,并可是设置管脚和寄存器的对应关系 2.两个TI输出映射了两个ICx信号 3.这两个ICx信号分别在相反的极性边沿有效 4.两个边沿