打印

求一个程序

[复制链接]
865|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
这是一个超声波的时序图:

  
利用stm8s系列单片机的 TIM1的捕获功能测量发射与接收的时间差(即Echo signal的高电平时间)。求各位大神写下捕获高电平持续时间的程序,或发我一个捕获电平持续时间的例程。谢谢!

相关帖子

沙发
蔚蓝柳叶|  楼主 | 2014-8-13 09:22 | 只看该作者
木有人鸟我?谁有stm8s系列单片机有关捕获的例程,发我学习下,

使用特权

评论回复
板凳
南宫云明| | 2014-8-13 09:44 | 只看该作者
用库函数做,很简单。。。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
蔚蓝柳叶 + 1
地板
南宫云明| | 2014-8-13 09:48 | 只看该作者
本帖最后由 南宫云明 于 2014-8-13 10:43 编辑
void rf_rev_deal()
{
  static unsigned int last_cap_v = 0;                 //保存上一次的捕获值
  unsigned int cur_cap_v = 0;
  unsigned int cur_pulse_time = 0;                     //本次脉冲时间差
    if((TIM2->CCER1 & TIM2_CCER1_CC1P) == 0)              //上升沿
  {
    TIM2->CCER1 |= TIM2_CCER1_CC1P;                     //下降沿
  }
  else
  {
    TIM2->CCER1 &= (u8)(~TIM2_CCER1_CC1P);
  }
  
  cur_cap_v = TIM2_GetCapture1();                       //获取捕获值
  
  
  
  if(cur_cap_v >= last_cap_v)                           //计算两次电平差值,计算脉冲时间
    cur_pulse_time = cur_cap_v - last_cap_v;
  else
    cur_pulse_time = 0xffff - last_cap_v + cur_cap_v;

  TIM2_ClearITPendingBit(TIM2_IT_CC1);
}



以上时定时器2通道1的捕获中断程序,

还有附上定时器2捕获初始化代码:

void tim2_config()
{

  TIM2_ICInit(TIM2_CHANNEL_1, TIM2_ICPOLARITY_RISING, TIM2_ICSELECTION_DIRECTTI, TIM2_ICPSC_DIV1, 0x00);
  TIM2_ITConfig(TIM2_IT_CC1, ENABLE);//捕获1中断使能
  TIM2_PrescalerConfig(TIM2_PRESCALER_16, TIM2_PSCRELOADMODE_IMMEDIATE);//16分频
  TIM2_Cmd(ENABLE);//使能定时器1

}

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
蔚蓝柳叶 + 3
5
蔚蓝柳叶|  楼主 | 2014-8-13 10:23 | 只看该作者
南宫云明 发表于 2014-8-13 09:48

正式我需要的,我好好看看。谢谢!

使用特权

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

本版积分规则

个人签名:柳桥静观峰岳时,杏香轻抚白云笑。

10

主题

81

帖子

1

粉丝