小弟是菜鸟,头一次玩超声波测距仪。按照这个技术要求进行了编程,先产生了一个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); //等待高电平并开始计时 } } |
欢迎光临 智能车制作 (http://dns.znczz.com/) | Powered by Discuz! X3.2 |