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 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化