有哪位大佬知道这里错在哪里吗?我这个设置是高电平进入中断!但是低电平也会进入
- #include "stm32f4xx.h"
- #include "sys.h"
- #include "ULT.h"
- #include "systick.h"
- #include <stdio.h>
- float UltrasonicWave_Distance;
- void Ultrasonic_init(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- EXTI_InitTypeDef EXTI_InitStruct;
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
- /* 配置PG6为输出模式,让这根引脚具有输出高低电平的功能 */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //第5号引脚
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //输出模式
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出,增强驱动能力,引脚的输出电流更大
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //引脚的速度最大为100MHz
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //使用内部上拉电阻
- GPIO_Init(GPIOE, &GPIO_InitStructure);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //第6号引脚
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; //输入
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //引脚的速度最大为100MHz
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //使用内部上拉电阻
- GPIO_Init(GPIOE, &GPIO_InitStructure);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
- SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource6);
-
- EXTI_InitStruct.EXTI_Line = EXTI_Line6;//设置EXTI6
- EXTI_InitStruct.EXTI_LineCmd = ENABLE; //开放EXTI6的中断请求(不能屏蔽EXTI0的中断请求)
- EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;//是中断而不是事件
- EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising;//确定EXTI0触发中断的方式为下降沿
- EXTI_Init(&EXTI_InitStruct);
- PEout(5) = 0;
- }
- void EXTI9_5_IRQHandler(void)
- {
- uint32_t t=0;
- delay_nus(10);
- if(EXTI_GetITStatus(EXTI_Line6))
- {
- while(PEout(6) != 0) //等待低电平
- {
- t++;
- delay_nus(8);
- }
- t = t/2;
- UltrasonicWave_Distance = t*3; //计算距离&&UltrasonicWave_Distance<150
- printf("temp=%d\r\n",t);
- EXTI_ClearITPendingBit(EXTI_Line6); //清除EXTI6线路挂起位
- }
- }
- void UltrasonicWave_StartMeasure(void)
- {
- PEout(5) = 1; //送>10US的高电平RIG_PORT,TRIG_PIN这两个在define中有?
- delay_nus(20); //延时20US
- PEout(5) = 0;
- }
复制代码
|