智能车制作

标题: HCSR04超声波传感器无法抓到ECHO的高电平 [打印本页]

作者: inborn    时间: 2016-7-13 20:48
标题: HCSR04超声波传感器无法抓到ECHO的高电平

小弟是菜鸟,头一次玩超声波测距仪。按照这个技术要求进行了编程,先产生了一个1Hz的方波,理应满足了10us以上的脉冲,示波器也读的到波形。这个时候理应ECHO向一个设为输入的IO口发一个高电平,但是我读取这个引脚上的电平状态,却一直是0,想了很长时间没有想明白,我把程序贴出来,还请大家帮我看看什么地方出了问题。

static void PIT_ISR(void)
{
    /*翻转电平/
    GPIO_ToggleBit(HW_GPIOC, 4);
}

int main(void)
{
        //PTC4发脉冲,配置为输出引脚
        SIM->SCGC5 |= SIM_SCGC5_PORTC_MASK;   
        PORTC->PCR[4] |= PORT_PCR_MUX(1);  
        PTC->PDOR |= GPIO_PDOR_PDO(0);     //复位引脚
        PORTC->PCR[4] |= PORT_PCR_IRQC_MASK;  //中断使能
        
        //-OPP模式
        PORTC->PCR[4] &= ~PORT_PCR_PE_MASK;           // 禁止PTC上下拉电阻功能
        PORTC->PCR[4] &= ~PORT_PCR_ODE_MASK;    // 禁用开漏输出
        PTC->PDDR |= GPIO_PDDR_PDD_MASK;        // 数据方向为输出
        
        //PTD4收脉冲,输入引脚
        SIM->SCGC5 |= SIM_SCGC5_PORTD_MASK;
        PORTD->PCR[4] |= PORT_PCR_MUX(1);  
        PTD->PDOR |= GPIO_PDOR_PDO(0);     //复位引脚
        PORTD->PCR[4] |= PORT_PCR_IRQC_MASK;  //中断使能
        PORTD->PCR[4] |= PORT_PCR_IRQC(1011);    // PORTD跳变沿产生中断
        //IPD模式
        PORTD->PCR[4] |= PORT_PCR_PE_MASK;           //开启PTD上下拉电阻功能
        PORTD->PCR[4] &= ~PORT_PCR_PS_MASK;           // 开启下拉电阻
        PORTD->PCR[4] &= ~PORT_PCR_ODE_MASK;    // 禁用开漏输出
        PTD->PDDR &= ~GPIO_PDDR_PDD_MASK;        // 数据方向为输入
        /* 初始化PIT */
  PIT_InitTypeDef PIT_InitStruct1;  
  PIT_InitStruct1.chl = HW_PIT_CH0;
  PIT_InitStruct1.timeInUs = 1000*1000; /* 定式周期1s */
  PIT_Init(&PIT_InitStruct1);
  /* 注册中断回调函数*/
  PIT_CallbackInstall(HW_PIT_CH0, PIT_ISR); //0号定时器的中断处理
  /* 开启PIT0的定时器中断 */
  PIT_ITDMAConfig(HW_PIT_CH0, kPIT_IT_TOF, true);

while(1)
{
            uint8_t status ;
        status = GPIO_ReadBit(HW_GPIOD, 4); //读取PTD4输入引脚上的电平状态
               
        while(!status == 1);     //等待高电平并开始计时

}
}


作者: 蓝耀    时间: 2018-5-6 20:08
同样的问题,用定时器定时,ECHO口响应高电平中断后瞬间就成低电平




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2