找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2406|回复: 2
收起左侧

STM32外部中断实验

[复制链接]
ID:319895 发表于 2019-12-28 17:31 | 显示全部楼层 |阅读模式

今天我来介绍一下外部中断。先打开数据手册我用的时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);  //清标志位

  }


}


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



EXIT框图.png
回复

使用道具 举报

ID:475247 发表于 2019-12-29 10:32 | 显示全部楼层
建议最少整个仿真出来,那样才说明你讲的东东是大家值得看的!
回复

使用道具 举报

ID:319895 发表于 2019-12-29 13:02 | 显示全部楼层
还有谁? 发表于 2019-12-29 10:32
建议最少整个仿真出来,那样才说明你讲的东东是大家值得看的!

没必要,我自己画的板子都实验过了。我也是刚刚接触,发这个只不过是加强记忆,并不是为了给人看,当然有人指出错误就更好了

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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