求一个程序

[复制链接]
 楼主| 蔚蓝柳叶 发表于 2014-8-12 11:34 | 显示全部楼层 |阅读模式
这是一个超声波的时序图:

  
利用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 编辑
  1. void rf_rev_deal()
  2. {
  3.   static unsigned int last_cap_v = 0;                 //保存上一次的捕获值
  4.   unsigned int cur_cap_v = 0;
  5.   unsigned int cur_pulse_time = 0;                     //本次脉冲时间差
  6.     if((TIM2->CCER1 & TIM2_CCER1_CC1P) == 0)              //上升沿
  7.   {
  8.     TIM2->CCER1 |= TIM2_CCER1_CC1P;                     //下降沿
  9.   }
  10.   else
  11.   {
  12.     TIM2->CCER1 &= (u8)(~TIM2_CCER1_CC1P);
  13.   }
  14.   
  15.   cur_cap_v = TIM2_GetCapture1();                       //获取捕获值
  16.   
  17.   
  18.   
  19.   if(cur_cap_v >= last_cap_v)                           //计算两次电平差值,计算脉冲时间
  20.     cur_pulse_time = cur_cap_v - last_cap_v;
  21.   else
  22.     cur_pulse_time = 0xffff - last_cap_v + cur_cap_v;

  23.   TIM2_ClearITPendingBit(TIM2_IT_CC1);
  24. }



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

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

  27. void tim2_config()
  28. {

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

  33. }

评分

参与人数 1威望 +3 收起 理由
蔚蓝柳叶 + 3

查看全部评分

 楼主| 蔚蓝柳叶 发表于 2014-8-13 10:23 | 显示全部楼层
南宫云明 发表于 2014-8-13 09:48

正式我需要的,我好好看看。谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

10

主题

81

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部