查看: 18722|回复: 6

【望月追忆】带你入门STM32F0之四:按键----外部中断

[复制链接]
  • TA的每日心情
    奋斗
    2013-9-16 09:51
  • 签到天数: 16 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2012-12-7 21:42:54 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 xinxincaijq 于 2013-1-5 17:17 编辑

    按键中断,固件库已经把框架搭好了,我们要做的就是 1.初始化  2.填写中断服务程序
    一、首先了解一下STM32F051的中断结构
    1.STM32F051中断框架

    中断框架

    中断框架

    在STM32F05x 中,共有最多28 中断/ 事件线可用: 7 线内部( 包含一条保留) 和21 线外部。
    GPIO 口连接到16 个外部中断/ 事件线如下图:

    2.jpg
    板子上KEY1---->PF6    KEY2---->PF7  因此我们使用中断线路6、7
    STM32中,每一个GPIO都可以触发一个外部中断,但是,GPIO的中断是以组位一个单位的,同组间的外部中断同一时间只能使用一个。比如说,PA0,PB0,PC0,PD0,PE0,PF0,PG0这些为1组,如果我们使用PA0作为外部中断源,那么别的就不能够再使用了,在此情况下,我们智能使用类似于PB1,PC2这种末端序号不同的外部中断源。每一组使用一个中断标志EXTIx。EXTI0 – EXTI4这5个外部中断有着自己的单独的中断响应函数,EXTI5-9共用一个中断响应函数,EXTI10-15共用一个中断响应函数。

    2.初始化配置  下面仅仅设置KEY1按键,KEY2类似
    a.使能时钟  中断用到了 SYSCFG 也要使能SYSCFG
    1. /* GPIOC Periph clock enable */
    2.         RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOF, ENABLE);
    3.         /* SYSCFG Periph clock enable */
    4.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
    复制代码
    b.初始化GPIO   设置成输入状态
    1. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 ;
    2.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
    3.   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    4.         GPIO_InitStructure.GPIO_Speed =GPIO_Speed_Level_2;
    5.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
    6.   GPIO_Init(GPIOF, &GPIO_InitStructure);
    复制代码
    c.设置中断线路6   EXTI6
    1. /* Configure EXTI6 line */
    2.   EXTI_InitStructure.EXTI_Line = EXTI_Line6;
    3.   EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    4.   EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
    5.   EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    6.   EXTI_Init(&EXTI_InitStructure);
    复制代码
    d.设置NVIC
    1. /* Enable and set EXTI6 Interrupt */
    2.   NVIC_InitStructure.NVIC_IRQChannel = EXTI6_1_IRQn;
    3.   NVIC_InitStructure.NVIC_IRQChannelPriority = 0x00;
    4.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    5.   NVIC_Init(&NVIC_InitStructure);
    复制代码
    e.填写中断服务程序
    1. if(EXTI_GetITStatus(EXTI_Line6) != RESET)
    2.   {
    3. GPIO_WriteBit(GPIOA, GPIO_Pin_11,
    4.                              (BitAction)((1-GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_11))));
    5.     GPIO_WriteBit(GPIOA, GPIO_Pin_12,
    6.                              (BitAction)((1-GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_12))));*/
    7.     EXTI_ClearITPendingBit(EXTI_Line6);
    8.   }
    复制代码
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-11-4 08:32
  • 签到天数: 773 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2012-12-12 20:30:56 | 显示全部楼层
    沙发抢一回...
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2016-11-17 13:26
  • 签到天数: 410 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2015-8-10 16:06:48 | 显示全部楼层
    很棒~~ 楼主大爱!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2023-7-25 22:49
  • 签到天数: 385 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2015-8-10 17:31:31 | 显示全部楼层
    感谢分享。。。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2014-12-11 14:40
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2015-12-29 13:58:17 | 显示全部楼层
    非常感谢。学习中
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2016-1-28 17:05:08 | 显示全部楼层
    非常感谢LZ
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2020-4-6 00:02
  • 签到天数: 1330 天

    连续签到: 4 天

    [LV.10]以坛为家III

    发表于 2016-1-28 18:19:09 | 显示全部楼层
    学习,收藏!谢谢!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-11-25 09:28 , Processed in 0.157027 second(s), 28 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.