原创 【博客大赛】STM32学习-EXTI的使用

2013-4-7 17:31 4178 13 16 分类: MCU/ 嵌入式 文集: STM32F1学习笔记

 

使用GPIO作为中断源,即EXTI,在程序中通过以下步骤实现:
1. 使能EXTIx线的时钟和第二功能AFIO时钟。
   //本实验中使用PB0作为EXTI输入
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);
   GPIO被配置成EXTI输入,是复用功能,所以要将AFIO时钟打开。
 
2. 配置EXTIx中断优先级。
   NVIC_Configuration();
   这是通过配置NVIC(Nested Vector Interrupt Controller)来实现,其实就是通过对NVIC的初始化(NVIC_Init())。
   static void NVIC_Configuration(void)
   {
     NVIC_InitTypeDef NVIC_InitStructure;
  
     /* Configure one bit for preemption priority */
     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  
     /* 配置P[A|B|C|D|E]0为中断源 */
     NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
     NVIC_Init(&NVIC_InitStructure);
   }
  对NVIC初始化就是定义并填充一个NVIC_InitTypeDef类型的结构体。
  typedef struct
  {
    uint8_t NVIC_IRQChannel;
    uint8_t NVIC_IRQChannelPreemptionPriority;
    uint8_t NVIC_IRQChannelSubPriority;
    FunctionalState NVIC_IRQChannelCmd;
  } NVIC_InitTypeDef; 
  由NVIC_IRQChannel成员来选择要配置的中断向量,由NVIC_IRQChannelPreemptionPriority来配置中断的抢占优先级,由NVIC_IRQChannelSubPriority来配置中断的响应优先级,由NVIC_IRQChannelCmd来打开(使能,ENABLE)或关闭(DISABLE)该中断。关于两种中断优先级的问题,可以参考后面野火的参考文档。
 
3. 配置EXTI中断IO.
  首先这是一个GPIO,要先进行如下配置
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;       
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; // 上拉输入
  GPIO_Init(GPIOB, &GPIO_InitStructure);
  再进行中断配置
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource0); 
  EXTI_InitStructure.EXTI_Line = EXTI_Line0;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿中断
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure); 
 
4. 编写中断服务程序。在这里是通过接在PB0上的按键来控制接在PB5上的LED亮灭。
 
参考文档和代码
PARTNER CONTENT

文章评论3条评论)

登录后参与讨论

飞言走笔 2013-3-15 15:57

你是老五?

飞言走笔 2013-3-15 09:27

您是?

用户1648394 2013-3-15 08:53

木子飞??
相关推荐阅读
飞言走笔 2017-01-06 21:56
2017,新的博客旅程
EDNChina 改版终于成功了!祝贺! 2017年,开始新的旅程~ ...
飞言走笔 2016-06-01 10:17
【博客大赛】《白鹿原》读后
《白鹿原》这本书已经买了很久,多次以来,都是只翻看几页,顶多几章就放下了,觉得这是一个大部头,得有足够的时间才行。前几天陈忠实先生去世的消息传来,让我很震惊和惭愧。 一口气读完这本书,畅快淋漓,又意...
飞言走笔 2016-03-26 16:42
【博客大赛】《毛斯朝》读后
这本书最早是在凤凰卫视曾子墨主持的一期关于沈志华先生的《世纪大讲堂》节目中知晓的。但是一直拖到今天才读完。 说实话,书的主要内容与当前官方的宣传口径有很多不一致的地方,而沈先生作为中国掌握苏联档...
飞言走笔 2016-03-08 13:46
【博客大赛】蓝牙4.0低功耗技术及其认证要求
详见附件 ...
飞言走笔 2016-02-02 14:20
【转】蓝牙4.0协议官方手册(一)——通用属性配置文件
转自:http://blog.csdn.net/jinzhichaoshuiping/article/details/43370009 通用属性配置文件 (GATT)——该说明书定义了通用属性配置...
飞言走笔 2016-01-31 23:24
【博客大赛】脑洞大开、三观重塑——《人类简史》读后
终于读完了《人类简史》,没有把这本书拖到二月份,这也是2016年读完的第一本书。之前也有所耳闻,但是没有太在意,倒是罗胖子的跨年演讲上偶然提到,不知怎么就勾起了阅读此书的欲望。 本文的标题用了“脑洞...
EE直播间
更多
我要评论
3
13
关闭 站长推荐上一条 /3 下一条