Heyyana 2022-11-21 10:09 采纳率: 100%
浏览 15
已结题

输入捕获的超声波测距一直为0

最近在搞一个rct6超声波测距有关的项目 结果调了一天 测出来的距离一直都是0 一开始是用外部中断 后来改成了输入捕获 结果还是输出0
这是定时器输入捕获的代码

void TIM3IC_Init()
{
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    
    GPIO_InitTypeDef  GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA,&GPIO_InitStructure);
    
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

    TIM_InternalClockConfig(TIM3);
    
    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
    TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
    TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInitStructure.TIM_Period = 65535 - 1;
    TIM_TimeBaseInitStructure.TIM_Prescaler = 720 - 1 ;
    TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
    
    TIM_ICInitTypeDef TIM_ICInitStructure;
    TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;
    TIM_ICInitStructure.TIM_ICFilter = 0xF;
    TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
    TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
    TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
    TIM_PWMIConfig(TIM3,&TIM_ICInitStructure);
    
    
    TIM_SelectInputTrigger(TIM3,TIM_TS_TI1FP1);
    TIM_SelectSlaveMode(TIM3,TIM_SlaveMode_Reset);
    
    TIM_ITConfig(TIM3,TIM_IT_CC2|TIM_IT_CC1,ENABLE);
    TIM_SetCounter(TIM2,0);
    
    
    TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);

    NVIC_InitTypeDef NVIC_InitStructure;
    NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
    NVIC_Init(&NVIC_InitStructure);
    
  TIM_Cmd(TIM3,ENABLE);
    
}

void TIM3_IRQHandler()
{

    if(TIM_GetITStatus(TIM3,TIM_IT_CC2)!=RESET)
        {           
           Distance = (TIM_GetCapture2(TIM3)+1) * 340/20000.0; 
             Flag = 1;
       //printf("Distance = %f m\r\n",Distance);            
        }
    TIM_ClearITPendingBit(TIM2, TIM_IT_CC2);
}

这是配置超声波引脚的代码

float Distance;
int Flag = 1,ICAP1value,ICAP2value;
 
 
void HC_SR04_init(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure;
 
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);     
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;                 
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;         
    GPIO_Init(GPIOA, &GPIO_InitStructure);                                         
 
}
    

void HC_SR04_start(void)
{
    GPIO_SetBits(GPIOA,GPIO_Pin_4);
    Delay_us(20);
    GPIO_ResetBits(GPIOA,GPIO_Pin_4);
    Delay_ms(60);
}

输出结果一直为0 串口方面测试过是没问题的 引脚也可以正常输出 但不知道自己的逻辑错在哪了 希望带佬们指导一下

  • 写回答

3条回答

      报告相同问题?

      相关推荐 更多相似问题

      问题事件

      • 系统已结题 11月30日
      • 已采纳回答 11月22日
      • 修改了问题 11月21日
      • 赞助了问题酬金20元 11月21日
      • 展开全部

      悬赏问题

      • ¥15 SQL查询一个表格的数据
      • ¥20 PCL库处理梯子点云获取其几何参数
      • ¥30 医疗资料ROI mask转YOLO的bounding box
      • ¥15 docx4j word转pdf
      • ¥15 MATLAB-GUI数据图表
      • ¥15 Qt Vs2017使用Charts异常
      • ¥15 将位图选入内存DC失败,但没有出错信息
      • ¥20 如何从 .html url 启动/激活 .py 文件(sql debug)
      • ¥15 c#调用soap出错,soapui中可以
      • ¥100 CBIS-DDSM kaggle 资料处理