有哪位大佬知道這里錯在哪里嗎?我這個設置是高電平進入中斷!但是低電平也會進入
- #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;
- }
復制代碼
|