打印

怎么使用输入捕获功能测一个高电平的时间

[复制链接]
4788|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xiaox314|  楼主 | 2011-8-12 09:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用stm32做超生波,要用输入捕获来捕获高电平的时间,从而计算距离,怎么设置中断,还有那个值才是我要得到的时间,
沙发
xiaox314|  楼主 | 2011-8-12 09:58 | 只看该作者
void TIM_Configuration(void)//TIM3的CAP初始化函数

{

   TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;//定时器初始化结构

   TIM_ICInitTypeDef TIM_ICInitStructure;        //通道输入初始化结构



   //TIM3输出初始化
   TIM_DeInit(TIM3);

   TIM_TimeBaseStructure.TIM_Period = 0xFFFF;      //周期0~FFFF

   TIM_TimeBaseStructure.TIM_Prescaler = 5;        //时钟分频

   TIM_TimeBaseStructure.TIM_ClockDivision = 0;    //时钟分割

   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//模式

   TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);//基本初始化



   //TIM3通道的捕捉初始化  
//   TIM_ICInitStructure.TIM_ICMode = TIM_ICMode_ICAP;//配置为输入捕获模式         

   TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;//通道选择

   TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;//输入上升沿 捕获

   TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;//管脚与寄存器对应关系

   TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;//分频器 //每次检测到捕获输入就触发一次捕获

   TIM_ICInitStructure.TIM_ICFilter = 0x0;         //滤波设置,经历几个周期跳变认定波形稳定0x0~0xF

   TIM_ICInit(TIM3, &TIM_ICInitStructure);         //初始化

   
   //参考TIM结构图选择滤波后的TI1输入作为触发源,触发下面程序的复位

   TIM_SelectInputTrigger(TIM3, TIM_TS_TI2FP2);//选择时钟触发源

   //复位模式-选中的触发输入(TRGI)的上升沿初始化计数器,并且产生一个更新线号

   TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);//触发方式

   TIM_SelectMasterSlaveMode(TIM3, TIM_MasterSlaveMode_Enable);//主从模式选择 //启动定时器的被动触发

   TIM_ITConfig(TIM3,TIM_IT_CC2, ENABLE);         //打开中断

   TIM_Cmd(TIM3, ENABLE);                          //启动TIM3

}

使用特权

评论回复
板凳
xiaox314|  楼主 | 2011-8-12 10:00 | 只看该作者
void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

  /* Enable the TIM3 global Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}

void TIM3_IRQHandler(void)
{
  static vu16  IC2_Value=0;
  if(TIM_GetITStatus( TIM3,  TIM_IT_CC2 ))

  /* Clear TIM3 Capture compare interrupt pending bit */
  {
          TIM_ClearITPendingBit(TIM3, TIM_IT_CC2);

          /* Get the Input Capture value */
          IC2_Value = TIM_GetCapture2(TIM3);
  }
}

使用特权

评论回复
地板
xiaox314|  楼主 | 2011-8-12 12:33 | 只看该作者
:(各位大神吗,帮帮忙啊!

使用特权

评论回复
5
xiaox314|  楼主 | 2011-8-12 15:03 | 只看该作者
:time:大神们,路过的都说两句,真心求教,程序也在上面,那位告诉我怎么改啊!

使用特权

评论回复
6
jy1975jy1975| | 2011-8-12 16:44 | 只看该作者
请高手不惜赐教

使用特权

评论回复
7
xiaox314|  楼主 | 2011-8-13 18:59 | 只看该作者
:Q这大个论坛,就没有人帮助下,悲哀`~~~~~~

使用特权

评论回复
8
香水城| | 2011-8-15 09:41 | 只看该作者
直接使用定时器的PWM输入模式即可。

使用特权

评论回复
9
miss_lion| | 2013-8-30 21:00 | 只看该作者
楼主解决了么

使用特权

评论回复
10
miss_lion| | 2013-8-30 21:01 | 只看该作者
xiaox314 发表于 2011-8-12 12:33
各位大神吗,帮帮忙啊!

解决了没你

使用特权

评论回复
11
hawksabre| | 2013-8-31 09:09 | 只看该作者
不是很懂   楼主   帮你顶一个  看看别人的意见  

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

732

帖子

7

粉丝