打印
[STM8]

STM8S的输入捕获做超声波测距,为何CCR2中的值与距离成.反比

[复制链接]
985|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
rookie108|  楼主 | 2019-12-8 23:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 rookie108 于 2019-12-8 23:50 编辑

我在用STM8S208的TIM1接JSN-SR04T超声波测距模块做测距时,发现TIM1_CCR2中的值与实际距离成反比,即距离越近,CCR2中的值越大。实际情况应该是成正比的。使用逻辑分析仪检测发现输入的脉冲宽度是和时间成正比的。在此请教各位高手,程序在哪里出错了。谢谢
代码如下:

/*硬件接线说明
PC1接ECHO
PI0接TRIG
*/

#include "iostm8s208mb.h"//主控芯片的头文件
#include "ptctr.h"
#include "lcd1602.h"
#include "stdbool.h"
#include "stdio.h"

#define  TRIG           PI_ODR_ODR0    //输出给超声波一个触发信号的引脚

u16 pw1=0,pw2=0;
u16 tmp=0;
_Bool  pw_Flag=false;


int main(void)
{
  Clock_Config();
  Delay_ms(10);//延时等待稳定
  GPIO_Config();//初始化相关GPIO引脚配置
  TIM1_init();//TIM1相关功能配置初始化
  asm("rim");   

  while(1)
  {
    TRIG =1;//保证最短10us的高电平
    Delay_us(15);
    TRIG =0;
    Delay_ms(100);//保持100ms的延时以等待回波
   
    if(pw_Flag==true)
    {

      tmp=(float)pw2*0.017;//0.017是声速340m/s除以2的值。
      pw_Flag=false;
      
    }
  }
}

/*TIM1捕获/比较中断*/
#pragma vector=TIM1_CAPCOM_CC1IF_vector
__interrupt void TIM1_CAPCOM_CC1IF_ISR(void)
{
   if(TIM1_SR1_CC1IF==1)
   {
     TIM1_SR1_CC1IF=0;//清除中断标志位
   }
   if(TIM1_SR1_CC2IF==1)
   {
     TIM1_SR1_CC2IF=0;//清除中断标志位
     pw2=TIM1_CCR2H;
     pw2<<=8;
     pw2+=TIM1_CCR2L;
     pw_Flag=true;
   }
}

/*TIM1初始配置*/
void TIM1_init(void){

  CLK_PCKENR1=0x80;//打开定时器1时钟

  TIM1_PSCRH=0;//16M不分频
  TIM1_PSCRL=0;

  TIM1_CR1_ARPE =0;//不通过预装载寄存器
  TIM1_CR1_URS=1;//仅当计数器溢出时才发生中断请求
  TIM1_CR1_UDIS=1;//禁止更新事件//计数器溢出属于更新事件
  TIM1_CR1_DIR=0;//向上计数
  
  TIM1_CCMR1=0;
  TIM1_CCMR1 |=0x01;
  TIM1_CCMR2=0;      
  TIM1_CCMR2|=0x02;

  TIM1_CCER1_CC1P=0;//上升沿时发生捕获
  TIM1_CCER1_CC2P=1;//下降沿时发生捕获

  TIM1_CCER1_CC1E=1;//使能捕获功能
  TIM1_CCER1_CC2E=1;//使能捕获功能

  TIM1_SMCR=0x54;//

  TIM1_CCER1_CC1E=1;//使能捕获功能
  TIM1_CCER1_CC2E=1;//使能捕获功能

  TIM1_IER_CC1IE=1;//开启捕获中断
  TIM1_IER_CC2IE=1;//开启捕获中断
  TIM1_CR1_CEN=1;//开启计数
}

/*时钟初始配置*/
void Clock_Config(void){
  
    //==启用外部晶振.不分频。
    CLK_CKDIVR =0x02;//四分频
    CLK_ECKR=0x01;//HSE开
    CLK_ICKR=0x00;
    while(CLK_ECKR!=0x03);//等待HSE准备就绪
    CLK_SWR=0xb4;//设置HSE为主时钟源
    CLK_SWCR=0x03;//使能时钟切换,禁止时钟中断
    while(!(CLK_SWCR &0x08));    // 等待切换至HSE完成
}

/*GPIO初始配置*/
void GPIO_Config(void){
  
    PI_DDR_DDR0=1; //配置PI0端口为输出模式
    PI_CR1_C10=1;  //配置PI0端口为推挽输出模式
    PI_CR2_C20=1;  //配置PI0端口高速输出
    PI_ODR_ODR0=0;  //输出低电平
   
    PC_DDR_DDR1 =0;//PC1输入
    PC_CR1_C11  =0;//浮空输入
    PC_CR2_C21  =0;//禁止外部中断功能
}





使用特权

评论回复
来自 2楼
rookie108|  楼主 | 2019-12-21 22:32 | 只看该作者
已经解决了。将TIM1的初始化改成下面那样即可:
/*TIM1初始配置*/
void TIM1_init(void){

   TIM1_PSCRH=0;
  TIM1_PSCRL=15;


  TIM1_CCMR1=0;
  TIM1_CCMR1 |=0x01;
  TIM1_CCMR2=0;      
  TIM1_CCMR2|=0x02;

  TIM1_CCER1_CC1P=0;//上升沿时发生捕获
  TIM1_CCER1_CC2P=1;//下降沿时发生捕获

  TIM1_CCER1_CC1E=1;//使能捕获功能
  TIM1_CCER1_CC2E=1;//使能捕获功能

  TIM1_SMCR=0x54;//

  TIM1_CCER1_CC1E=1;//使能捕获功能
  TIM1_CCER1_CC2E=1;//使能捕获功能

  TIM1_IER_CC1IE=1;//开启捕获中断
  TIM1_IER_CC2IE=1;//开启捕获中断
  TIM1_CR1=0x01;//开启计数
}

使用特权

评论回复
板凳
cry1109| | 2019-12-9 09:15 | 只看该作者
是不是捕获极性反了?

使用特权

评论回复
地板
rookie108|  楼主 | 2019-12-21 14:37 | 只看该作者
cry1109 发表于 2019-12-9 09:15
是不是捕获极性反了?

不好意思,在忙着其它事。重新检查了一遍,捕捉极性按照下面的设置来看,应该是没错的。
/*TIM1初始配置*/
void TIM1_init(void){

  CLK_PCKENR1=0x80;//打开定时器1时钟

  TIM1_PSCRH=0;//16M不分频
  TIM1_PSCRL=0;

  TIM1_CR1_ARPE =0;//不通过预装载寄存器
  TIM1_CR1_URS=1;//仅当计数器溢出时才发生中断请求
  TIM1_CR1_UDIS=1;//禁止更新事件//计数器溢出属于更新事件
  TIM1_CR1_DIR=0;//向上计数
  
  TIM1_CCMR1=0;
  TIM1_CCMR1 |=0x01;
  TIM1_CCMR2=0;      
  TIM1_CCMR2|=0x02;

  TIM1_CCER1_CC1P=0;//上升沿时发生捕获
  TIM1_CCER1_CC2P=1;//下降沿时发生捕获

  TIM1_CCER1_CC1E=1;//使能捕获功能
  TIM1_CCER1_CC2E=1;//使能捕获功能

  TIM1_SMCR=0x54;//

  TIM1_CCER1_CC1E=1;//使能捕获功能
  TIM1_CCER1_CC2E=1;//使能捕获功能

  TIM1_IER_CC1IE=1;//开启捕获中断
  TIM1_IER_CC2IE=1;//开启捕获中断
  TIM1_CR1_CEN=1;//开启计数
}

使用特权

评论回复
5
八层楼| | 2020-1-7 13:10 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
6
观海| | 2020-1-7 13:19 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
7
guanjiaer| | 2020-1-7 13:26 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
8
heimaojingzhang| | 2020-1-7 13:33 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
9
keaibukelian| | 2020-1-7 13:37 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
10
labasi| | 2020-1-7 13:41 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
11
paotangsan| | 2020-1-7 13:45 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
12
renzheshengui| | 2020-1-7 14:05 | 只看该作者
非常感谢楼主分享

使用特权

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

本版积分规则

10

主题

29

帖子

3

粉丝