找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1784|回复: 0
打印 上一主题 下一主题
收起左侧

stm32f4 HCSR04的中断输入程序,低电平也会进入

[复制链接]
跳转到指定楼层
楼主
ID:343923 发表于 2018-10-13 23:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有哪位大佬知道这里错在哪里吗?我这个设置是高电平进入中断!但是低电平也会进入
  1. #include "stm32f4xx.h"
  2. #include "sys.h"
  3. #include "ULT.h"
  4. #include "systick.h"
  5. #include <stdio.h>
  6. float UltrasonicWave_Distance;
  7. void Ultrasonic_init(void)
  8. {
  9.   GPIO_InitTypeDef GPIO_InitStructure;
  10.   EXTI_InitTypeDef  EXTI_InitStruct;

  11.   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);

  12. /* 配置PG6为输出模式,让这根引脚具有输出高低电平的功能 */
  13.   GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_5;    //第5号引脚
  14.   GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_OUT;   //输出模式
  15.   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;   //推挽输出,增强驱动能力,引脚的输出电流更大
  16.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;  //引脚的速度最大为100MHz
  17.   GPIO_InitStructure.GPIO_PuPd  =  GPIO_PuPd_UP;   //使用内部上拉电阻
  18.   GPIO_Init(GPIOE, &GPIO_InitStructure);
  19.   GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_6;    //第6号引脚
  20.   GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IN;   //输入
  21.    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  //引脚的速度最大为100MHz
  22.   GPIO_InitStructure.GPIO_PuPd  =  GPIO_PuPd_UP;   //使用内部上拉电阻
  23.   GPIO_Init(GPIOE, &GPIO_InitStructure);


  24.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
  25.   SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource6);
  26.   
  27.   EXTI_InitStruct.EXTI_Line     = EXTI_Line6;//设置EXTI6
  28.   EXTI_InitStruct.EXTI_LineCmd  = ENABLE; //开放EXTI6的中断请求(不能屏蔽EXTI0的中断请求)
  29.   EXTI_InitStruct.EXTI_Mode     = EXTI_Mode_Interrupt;//是中断而不是事件
  30.   EXTI_InitStruct.EXTI_Trigger  = EXTI_Trigger_Rising;//确定EXTI0触发中断的方式为下降沿
  31.   EXTI_Init(&EXTI_InitStruct);

  32.    PEout(5) = 0;

  33. }
  34. void EXTI9_5_IRQHandler(void)
  35. {
  36.    uint32_t t=0;
  37.     delay_nus(10);
  38.   if(EXTI_GetITStatus(EXTI_Line6))
  39.   {
  40.     while(PEout(6) != 0)                  //等待低电平
  41.       {
  42.       t++;
  43.      delay_nus(8);
  44.     }  
  45.      t = t/2;
  46.     UltrasonicWave_Distance = t*3;          //计算距离&&UltrasonicWave_Distance<150   
  47.     printf("temp=%d\r\n",t);
  48.     EXTI_ClearITPendingBit(EXTI_Line6);  //清除EXTI6线路挂起位
  49.   }
  50. }
  51. void UltrasonicWave_StartMeasure(void)
  52. {
  53.   PEout(5) = 1;     //送>10US的高电平RIG_PORT,TRIG_PIN这两个在define中有?
  54.   delay_nus(20);                        //延时20US
  55.   PEout(5) = 0;
  56. }

复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表