OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2224|回复: 1

外部中断计数,一进入中断就卡死,是什么原因啊!!!

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2020-1-16
在线时间
2 小时
发表于 2020-1-16 10:36:30 | 显示全部楼层 |阅读模式
#include "exti.h"
#include "delay.h"

u16 wind = 0 ;
u8 exit_cnt =0 ;
void EXTIX_Init(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        EXTI_InitTypeDef EXTI_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
          RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

          GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource1);

          EXTI_InitStructure.EXTI_Line=EXTI_Line1;       
          EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;       
          EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
          EXTI_InitStructure.EXTI_LineCmd = ENABLE;
          EXTI_Init(&EXTI_InitStructure);                
          NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;                       
          NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;       
          NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;                               
          NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                                       
          NVIC_Init(&NVIC_InitStructure);         

}

void EXTI1_IRQHandler(void){
        if(EXTI_GetITStatus(EXTI_Line1 != RESET)){
                if(wind_in == 0){
                                delay_ms(10);
                                if(wind_in == 0) {
                                        wind++;
                                }
                }
                EXTI_ClearITPendingBit(EXTI_Line1);
        }
}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

57

帖子

0

精华

高级会员

Rank: 4

积分
971
金钱
971
注册时间
2020-1-6
在线时间
124 小时
发表于 2020-3-20 11:52:43 | 显示全部楼层
本帖最后由 方正波 于 2020-3-20 11:56 编辑

  if(wind_in == 0){
                                delay_ms(10);
                                if(wind_in == 0) {
                                        wind++;
                                }
                }
你做中断外部计数,为什么要加这句话干什么???而且这句话看上去很奇怪,直接触发一次中断就标志位+1就是咯
你这如果是下降沿触发,你就给gpio口一个上啦,我没看到在哪?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-23 04:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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