STM32外部中断实验

2020-8-15发布 4316 0 0

sixunjin

保密 | 这个家伙很懒,什么都没有留下
今天我来介绍一下外部中断。先打开数据手册我用的时f103这款。不过大体上都差不多。首先介绍什么是外部中断。所有的GPIO口都要外部中断功能。如果要使用,必须使用外部中断线(把GPIO口看做是中断线),而且必须配置为输入模式。EXIT控制器有如下特点:每个中断都有独立的触发和屏蔽;中断线都有对应得状态位;多达20个中断请求;检测的脉冲信号低于APB2时钟的脉冲宽度。主要分析流程图。

分析完流程图就知道编程思路,顺腾摸瓜,从引脚开始,
1)配置数输入,复用为中断线,既然是复用肯定要开AFIO时钟,
2)把IO复用为中断线
3)来到了边沿选择寄存器。按键选择上升沿,或者下降沿。
4)开启EXIT中断使能
5)开启NVIC中断
6)编写中断服务函数(3步曲:判断中断标志位,清中断标志位,完成需要的功能)


void My_EXIT_Init()
{
//按键初始化

KEY_Init();
//开启时钟

RCC->APB2ENR |= (1<<0);

//PA0映射到EXTI0
AFIO->EXTICR[0] &=~(0xf<<(4*0));

//PE2-4映射到EXIT2-4

AFIO->EXTICR[0] &=~(0xf<<(4*2));
AFIO->EXTICR[0] |=(0x4<<(4*2));

AFIO->EXTICR[0] &=~(0xf<<(4*3));
AFIO->EXTICR[0] |=(0x4<<(4*3));

AFIO->EXTICR[1] &=~(0xf<<(4*0));
AFIO->EXTICR[1] |=(0x4<<(4*0));
//边沿选择寄存器,根据你需要的配置
  EXTI->RTSR |= (1<<0);
EXTI->FTSR |=  (1<<2)|(1<<3)|(1<<4);
/开启EXIT中断
EXTI->IMR |= ((1<<0)|(1<<2)|(1<<3)|(1<<4));
//开启中断

My_NVIC_Init(EXTI0_IRQn,7-3,6,1);
My_NVIC_Init(EXTI2_IRQn,7-3,5,1);
My_NVIC_Init(EXTI3_IRQn,7-3,4,1);
My_NVIC_Init(EXTI4_IRQn,7-3,3,1); 
}

//中断服务函数,注意要在.S文件找该函数名,不然可能写错
void EXTI0_IRQHandler()
{

  if(EXTI->PR & (1<<0))   //判断标志位
  {
    
   if( K_UP)
   delay_ms(100);
     LED1_ON;
    EXTI->PR |= (1<<0);  //清标志位

  }


}


定时器中断,软件中断和这个套路差不多。都是一个套路。


原文链接:http://www.51hei.com/bbs/dpj-177517-1.html

本文章采集网络,如有侵犯请谅解!可以联系本站删除。。谢谢!