OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4283|回复: 2

STM8S的TIM1做超声波测距,为何得出的值与实际距离成反比?

[复制链接]

5

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2013-3-6
在线时间
9 小时
发表于 2019-12-21 15:25:03 | 显示全部楼层 |阅读模式
20金钱
本帖最后由 lucky67 于 2019-12-21 16:23 编辑

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


  1. /*硬件接线说明
  2. PC1接ECHO
  3. PI0接TRIG
  4. */

  5. #include "iostm8s208mb.h"//主控芯片的头文件
  6. #include "ptctr.h"
  7. #include "lcd1602.h"
  8. #include "stdbool.h"
  9. #include "stdio.h"

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

  11. u16 pw1=0,pw2=0;
  12. u16 tmp=0;
  13. _Bool  pw_Flag=false;


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

  21.   while(1)
  22.   {
  23.     TRIG =1;//保证最短10us的高电平
  24.     Delay_us(15);
  25.     TRIG =0;
  26.     Delay_ms(100);//保持100ms的延时以等待回波
  27.    
  28.     if(pw_Flag==true)
  29.     {

  30.       tmp=(float)pw2*0.017;//0.017是声速340m/s除以2的值。
  31.       pw_Flag=false;
  32.       
  33.     }
  34.   }
  35. }

  36. /*TIM1捕获/比较中断*/
  37. #pragma vector=TIM1_CAPCOM_CC1IF_vector
  38. __interrupt void TIM1_CAPCOM_CC1IF_ISR(void)
  39. {
  40.    if(TIM1_SR1_CC1IF==1)
  41.    {
  42.      TIM1_SR1_CC1IF=0;//清除中断标志位
  43.    }
  44.    if(TIM1_SR1_CC2IF==1)
  45.    {
  46.      TIM1_SR1_CC2IF=0;//清除中断标志位
  47.      pw2=TIM1_CCR2H;
  48.      pw2<<=8;
  49.      pw2+=TIM1_CCR2L;
  50.      pw_Flag=true;
  51.    }
  52. }

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

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

  56.   TIM1_PSCRH=0;//16M不分频
  57.   TIM1_PSCRL=0;

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

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

  69.   TIM1_CCER1_CC1E=1;//使能捕获功能
  70.   TIM1_CCER1_CC2E=1;//使能捕获功能

  71.   TIM1_SMCR=0x54;//

  72.   TIM1_CCER1_CC1E=1;//使能捕获功能
  73.   TIM1_CCER1_CC2E=1;//使能捕获功能

  74.   TIM1_IER_CC1IE=1;//开启捕获中断
  75.   TIM1_IER_CC2IE=1;//开启捕获中断
  76.   TIM1_CR1_CEN=1;//开启计数
  77. }

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

  90. /*GPIO初始配置*/
  91. void GPIO_Config(void){
  92.   
  93.     PI_DDR_DDR0=1; //配置PI0端口为输出模式
  94.     PI_CR1_C10=1;  //配置PI0端口为推挽输出模式
  95.     PI_CR2_C20=1;  //配置PI0端口高速输出
  96.     PI_ODR_ODR0=0;  //输出低电平
  97.    
  98.     PC_DDR_DDR1 =0;//PC1输入
  99.     PC_CR1_C11  =0;//浮空输入
  100.     PC_CR2_C21  =0;//禁止外部中断功能
  101. }
复制代码


最佳答案

查看完整内容[请看2#楼]

已经解决了。将TIM1的初始化改成如下即可。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2013-3-6
在线时间
9 小时
 楼主| 发表于 2019-12-21 15:25:04 | 显示全部楼层
已经解决了。将TIM1的初始化改成如下即可。
  1. /*TIM1初始配置*/
  2. void TIM1_init(void){

  3.    TIM1_PSCRH=0;
  4.   TIM1_PSCRL=15;


  5.   TIM1_CCMR1=0;
  6.   TIM1_CCMR1 |=0x01;
  7.   TIM1_CCMR2=0;      
  8.   TIM1_CCMR2|=0x02;

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

  11.   TIM1_CCER1_CC1E=1;//使能捕获功能
  12.   TIM1_CCER1_CC2E=1;//使能捕获功能

  13.   TIM1_SMCR=0x54;//

  14.   TIM1_CCER1_CC1E=1;//使能捕获功能
  15.   TIM1_CCER1_CC2E=1;//使能捕获功能

  16.   TIM1_IER_CC1IE=1;//开启捕获中断
  17.   TIM1_IER_CC2IE=1;//开启捕获中断
  18.   TIM1_CR1=0x01;//开启计数
  19. }
复制代码
回复

使用道具 举报

1

主题

12

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
209
金钱
209
注册时间
2019-9-8
在线时间
13 小时
发表于 2019-12-21 23:31:27 | 显示全部楼层
写的真好,很有帮助
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-6-8 23:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表