OpenEdv-开源电子网

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

超声波模块,第一次可以接收到数据,之后就收不到了

[复制链接]

2

主题

4

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2018-4-14
在线时间
1 小时
发表于 2018-4-23 17:13:41 | 显示全部楼层 |阅读模式
1金钱
#include "timer.h"
/**************************************************************************
oˉêy1|Äü£o¶¨ê±Æ÷3í¨μà3êäèë2¶»ñ3õê¼»ˉ
èë¿ú2Îêy£oèë¿ú2Îêy£oarr£o×Ô¶ˉ֨װÖμ  psc£oê±ÖóÔ¤·ÖÆμêy
* ó2¼tᬽó£o------------------
*          | PB1  - TRIG      |
*          | PB0  - ECHO      |
*           ------------------
·μ»Ø  Öμ£oÎT
**************************************************************************/
void TIM3_Cap_Init(u16 arr,u16 psc)        
{         
        RCC->APB1ENR|=1<<1;     //TIM3ê±&#214;óê1&#196;ü     
        RCC->APB2ENR|=1<<3;            //ê1&#196;üPORTBê±&#214;ó            
        GPIOB->CRL&=0XFFFFFF00;
        GPIOB->CRL|=0X00000038;//          PB.0 ê&#228;è&#235; PB.1ê&#228;3&#246;
        
  TIM3->ARR=arr;                  //éè&#182;¨&#188;&#198;êy&#198;÷×&#212;&#182;ˉ&#214;&#216;×°&#214;μ   
        TIM3->SC=psc;                  //&#212;¤·&#214;&#198;μ&#198;÷
        
        TIM3->CCMR2|=1<<0;        //&#209;&#161;&#212;&#241;ê&#228;è&#235;&#182;&#203;
         TIM3->CCMR2|=0<<4;         // &#197;&#228;&#214;&#195;ê&#228;è&#235;&#194;&#203;2¨&#198;÷ 2&#187;&#194;&#203;2¨
         TIM3->CCMR2|=0<<2;         //&#197;&#228;&#214;&#195;ê&#228;è&#235;·&#214;&#198;μ,2&#187;·&#214;&#198;μ

        TIM3->CCER|=0<<9;         //é&#207;éy&#209;&#216;2&#182;&#187;&#241;
        TIM3->CCER|=1<<8;         //&#212;êDí2&#182;&#187;&#241;&#188;&#198;êy&#198;÷μ&#196;&#214;μμ&#189;2&#182;&#187;&#241;&#188;&#196;′&#230;&#198;÷&#214;D

        TIM3->DIER|=1<<3;   //&#212;êDí2&#182;&#187;&#241;&#214;D&#182;&#207;                                
        TIM3->DIER|=1<<0;   //&#212;êDí&#184;üD&#194;&#214;D&#182;&#207;        
        
        TIM3->CR1|=0x01;    //ê1&#196;ü&#182;¨ê±&#198;÷3
        MY_NVIC_Init(2,1,TIM3_IRQn,2);
}
/**************************************************************************
oˉêy1|&#196;ü£o3&#172;éù2¨&#189;óê&#213;&#187;&#216;2¨oˉêy
è&#235;&#191;ú2&#206;êy£o&#206;T
·μ&#187;&#216;  &#214;μ£o&#206;T
**************************************************************************/
u16 TIM3CH3_CAPTURE_STA,TIM3CH3_CAPTURE_VAL;//ê&#228;è&#235;2&#182;&#187;&#241;×′ì&#172;&#161;¢ê&#228;è&#235;2&#182;&#187;&#241;&#214;μ-ó&#195;à′&#188;&#199;&#194;&#188;2&#182;&#187;&#241;μ&#189;&#207;&#194;&#189;μ&#209;&#216;ê±£&#172;TIM2_CNTμ&#196;&#214;μ
void Read_Distane(void)
{   
         PBout(1)=1;
         delay_us(10);  
         PBout(1)=0;        
                        if(TIM3CH3_CAPTURE_STA&0X80)//3é1|2&#182;&#187;&#241;μ&#189;á&#203;ò&#187;′&#206;&#184;&#223;μ&#231;&#198;&#189;
                {
                        Distance=TIM3CH3_CAPTURE_STA&0X3F;
                        Distance*=65536;                                                //ò&#231;3&#246;ê±&#188;&#228;×üoí
                        Distance+=TIM3CH3_CAPTURE_VAL;                //μ&#195;μ&#189;×üμ&#196;&#184;&#223;μ&#231;&#198;&#189;ê±&#188;&#228;
                        Distance=Distance*170/1000;
                        printf("Distance:%d \r\n",Distance);
//                        OLED_ShowNumber(5,20,98,6,12);
//                        OLED_ShowNumber(30,20,Distance,6,12);
                        
                        TIM3CH3_CAPTURE_STA=0;                        //&#191;a&#198;&#244;&#207;&#194;ò&#187;′&#206;2&#182;&#187;&#241;
                }                                
}
/**************************************************************************
oˉêy1|&#196;ü£o3&#172;éù2¨&#187;&#216;2¨&#194;&#246;&#191;í&#182;áè&#161;&#214;D&#182;&#207;
è&#235;&#191;ú2&#206;êy£o&#206;T
·μ&#187;&#216;  &#214;μ£o&#206;T
×÷    &#213;&#223;£o&#198;&#189;oaD&#161;3μ&#214;&#174;&#188;ò
**************************************************************************/
void TIM3_IRQHandler(void)
{                                                                  
        u16 tsr;
        tsr=TIM3->SR;
        if((TIM3CH3_CAPTURE_STA&0X80)==0)//&#187;1&#206;′3é1|2&#182;&#187;&#241;        
        {
                        if(tsr&0X01)//ò&#231;3&#246;
                        {            
                                        if(TIM3CH3_CAPTURE_STA&0X40)//ò&#209;&#190;-2&#182;&#187;&#241;μ&#189;&#184;&#223;μ&#231;&#198;&#189;á&#203;
                                        {
                                                if((TIM3CH3_CAPTURE_STA&0X3F)==0X3F)//&#184;&#223;μ&#231;&#198;&#189;ì&#171;3¤á&#203;
                                                {
                                                        TIM3CH3_CAPTURE_STA|=0X80;//±ê&#188;&#199;3é1|2&#182;&#187;&#241;á&#203;ò&#187;′&#206;
                                                        TIM3CH3_CAPTURE_VAL=0XFFFF;
                                                }else TIM3CH3_CAPTURE_STA++;
                                        }         
                        }
                        if(tsr&0x08)//2&#182;&#187;&#241;3·¢éú2&#182;&#187;&#241;ê&#194;&#188;t
                  {
                                if(TIM3CH3_CAPTURE_STA&0X40)                //2&#182;&#187;&#241;μ&#189;ò&#187;&#184;&#246;&#207;&#194;&#189;μ&#209;&#216;                 
                                {                                 
                                        TIM3CH3_CAPTURE_STA|=0X80;                //±ê&#188;&#199;3é1|2&#182;&#187;&#241;μ&#189;ò&#187;′&#206;&#184;&#223;μ&#231;&#198;&#189;&#194;&#246;&#191;í
                                        TIM3CH3_CAPTURE_VAL=TIM3->CCR3;        //&#187;&#241;è&#161;μ±&#199;°μ&#196;2&#182;&#187;&#241;&#214;μ.
                                        TIM3->CCER&=~(1<<9);                        //CC1P=0 éè&#214;&#195;&#206;aé&#207;éy&#209;&#216;2&#182;&#187;&#241;
                                 }
                                else                                                                  //&#187;1&#206;′&#191;aê&#188;,μúò&#187;′&#206;2&#182;&#187;&#241;é&#207;éy&#209;&#216;
                                {
                                        TIM3CH3_CAPTURE_STA=0;                        //&#199;&#229;&#191;&#213;
                                        TIM3CH3_CAPTURE_VAL=0;
                                        TIM3CH3_CAPTURE_STA|=0X40;                //±ê&#188;&#199;2&#182;&#187;&#241;μ&#189;á&#203;é&#207;éy&#209;&#216;
                                        TIM3->CNT=0;                                        //&#188;&#198;êy&#198;÷&#199;&#229;&#191;&#213;
                                        TIM3->CCER|=1<<9;                                 //CC1P=1 éè&#214;&#195;&#206;a&#207;&#194;&#189;μ&#209;&#216;2&#182;&#187;&#241;
                                }                    
                        }                                                                                    
        }
        printf("TIM3CH3_CAPTURE_VAL:%d \r\n",TIM3CH3_CAPTURE_VAL);               
        TIM3->SR=0;//&#199;&#229;3y&#214;D&#182;&#207;±ê&#214;&#190;&#206;&#187;              
}


这个是超声波的程序,但是只有第一次数据可以检测到,之后就一直都为0,请问各位大神,这个如何处理

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-4-24 01:46:49 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 04:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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