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);	// Çå³ýÖжϱê־λ
	 
 }
 
 
 


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

加油封尘浪!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值