m0_62443382 2021-10-04 13:49 采纳率: 100%
浏览 30
已结题

STM32单片机外部中断,不会写

img

  • 写回答

1条回答 默认 最新

  • ⁽⁽ଘ晴空万里ଓ⁾⁾ 嵌入式领域新星创作者 2021-10-04 15:10
    关注
    int flag = 0;
    int main()
    {
        SysTick_Init(72);
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //中断优先级分组 分2组
        LED_Init();
        KEY_Init();
        My_EXTI_Init();  //外部中断初始化
        while(1)
        {
            if(flag==1)
            {
                GPIO_ResetBits(GBIOA,GPIO_Pin_1);
                delay_ms(1000);    
               GPIO_SetBits(GBIOA,GPIO_Pin_1); 
                delay_ms(1000);    
              GPIO_ResetBits(GBIOA,GPIO_Pin_2);
                delay_ms(1000);    
               GPIO_SetBits(GBIOA,GPIO_Pin_2); 
                delay_ms(1000);    
              GPIO_ResetBits(GBIOA,GPIO_Pin_3);
                delay_ms(1000);    
               GPIO_SetBits(GBIOA,GPIO_Pin_3); 
             
            }
        
        }
    }
    
    
    
    void LED_Init()
    {
        GPIO_InitTypeDef GPIO_InitStructure;//定义结构体变量
        
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
        
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;  //选择你要设置的IO口
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;     //设置推挽输出模式
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;      //设置传输速率
        GPIO_Init(GPIOA,&GPIO_InitStructure);        /* 初始化GPIO */
        
        GPIO_SetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);   //将LED端口拉高,熄灭所有LED
    }
    
    void KEY_Init(void)
    {
        GPIO_InitTypeDef GPIO_InitStructure; //定义结构体变量    
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
    
        
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;    //上拉输入
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GBIOB,&GPIO_InitStructure);
    }
    
    
    void My_EXTI_Init(void)
    {
        NVIC_InitTypeDef NVIC_InitStructure;
        EXTI_InitTypeDef  EXTI_InitStructure;
        
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
       GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource1);//选择GPIO管脚用作外部中断线路
        
        
        //EXTI1 NVIC 配置
        NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;//EXTI1中断通道
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//抢占优先级
        NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;        //子优先级
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;            //IRQ通道使能
        NVIC_Init(&NVIC_InitStructure);    //根据指定的参数初始化VIC寄存器
    
        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);
    
    extern int flag;
    void EXTI1_IRQHandler(void)
    {
        if(EXTI_GetITStatus(EXTI_Line1)==1)
        {
                flag = 1;
        }
        EXTI_ClearITPendingBit(EXTI_Line1);
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月16日
  • 已采纳回答 10月8日
  • 创建了问题 10月4日

悬赏问题

  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?