STM32的外部中断配置及使用

配置1:GPIO;

配置外部中断为输入模式;

配置2:EXTI;

配置外部中断线和触发模式;

配置3:NVIC;

配置外部中断源和中断优先级;

需要注意的是:RCC_APB2Periph_AFIO 时钟必须打开,容易忽略的一点;

 void EXTI_PORTC_CONFIG(void)
 {
         GPIO_InitTypeDef GPIO_InitStructure;
         EXTI_InitTypeDef EXTI_InitStructure;
         NVIC_InitTypeDef NVIC_InitStructure;

         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO,ENABLE);

         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ; //内部上拉
         GPIO_Init(GPIOC, &GPIO_InitStructure);

         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ; //内部上拉
         GPIO_Init(GPIOC, &GPIO_InitStructure);

         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ; //内部上拉
         GPIO_Init(GPIOC, &GPIO_InitStructure);

         GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource2);
         GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource3);
         GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource5);

         EXTI_InitStructure.EXTI_Line = EXTI_Line2;
         EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
         EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
         EXTI_InitStructure.EXTI_LineCmd = ENABLE;
         EXTI_Init(&EXTI_InitStructure);

         EXTI_InitStructure.EXTI_Line = EXTI_Line3;
         EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
         EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
         EXTI_InitStructure.EXTI_LineCmd = ENABLE;
         EXTI_Init(&EXTI_InitStructure);

         EXTI_InitStructure.EXTI_Line = EXTI_Line5;
         EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
         EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
         EXTI_InitStructure.EXTI_LineCmd = ENABLE;
         EXTI_Init(&EXTI_InitStructure);

         NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;
         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = ;
         NVIC_InitStructure.NVIC_IRQChannelSubPriority = ;
         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
         NVIC_Init(&NVIC_InitStructure);

         NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;
         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = ;
         NVIC_InitStructure.NVIC_IRQChannelSubPriority = ;
         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
         NVIC_Init(&NVIC_InitStructure);

         NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = ;
         NVIC_InitStructure.NVIC_IRQChannelSubPriority = ;
         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
         NVIC_Init(&NVIC_InitStructure);
 }

STM32的外部中断配置及使用的更多相关文章

  1. STM32之外部中断

    图1.0 图1.1 中断控制器支持23条中断线,其中16条是IO管脚中断线,分别是EXTI0~EXTI15:  图 1.2 另外七根中断线如下图: 中断线和管脚的对应关系:EXTI0~EXTI15 和 ...

  2. STM32 GPIO外部中断总结

    一.STM32中断分组: STM32 的每一个GPIO都能配置成一个外部中断触发源,这点也是 STM32 的强大之处.STM32 通过根据引脚的序号不同将众多中断触发源分成不同的组,比如:PA0,PB ...

  3. STM32之外部中断控制

    一.STM32外部中断 1.STM32外部中断结构图 如上图所示:主要包括四个环节,GPIO.AFIO.EXTI.NVIC.以STM32F103VE(100脚)为例说明硬件模块的数量: GPIO:   ...

  4. STM32之EXTI——外部中断

    互联网的广大网友,大家早上中午晚上好.EXTI...故名思义..EX表外,出..I表示Intrrupt..所以合起来就是外部中断...说到这..我觉得我最近的六级水平(背单词)又进了一步,稍微自夸了下 ...

  5. 转别人的 STM32外部中断使用注意事项

    前言:这些问题都是我之前在工作中遇到的,后来觉得需要总结,自己记忆不好,所以在这个给自己打个mark. 一:触发方式 STM32 的外部中断是通过边沿来触发的,不支持电平触发: 二:外部中断分组 ST ...

  6. stm32寄存器版学习笔记03 外部中断

    stm32的每个I/O口都可以作为中断输入,要把I/O口设置为外部中断输入,必须将I/O口设置为上拉/下拉输入 或 浮空输入(但浮空的时候外部一定要带上拉或下拉电阻,否则可能导致 中断不停的触发),干 ...

  7. stm32 外部中断学习

    今天我们看看STM32的外部中断实验. STM32 供 IO 口使用的中断线只有 16 个,但是 STM32 的 IO 口却远远不止 16 个,那么 STM32 是怎么把 16 个中断线和 IO 口一 ...

  8. STM32f103之外部中断

    一.背景 有个需求,IO口检测上升沿,然后做相应的动作.在此记录STM32F103的外部中断结构及配置方法, 以备下次快速上手使用. 有许多不太明白,又是老司机(:-D)帮忙,真的是站在别人的肩膀上会 ...

  9. STM32F103外部中断编程

    STM32F103外部中断编程   中断,顾名思义就是停下手头的活,去干另外一件急活,干完急活然后回来继续干手头的活. 单片机和人一样,有时候也有更急的程序需要执行,执行完之后再回来执行之前正在执行的 ...

随机推荐

  1. 如何在一个页面上让多个jQuery

    如何在一个页面上让多个jQuery共存呢?比如jquery-1.5和jquery-1.11. 你可能会问,为什么需要在一个页面上让多个jQuery共存?直接引用最新版本的jQuery不行吗? 答案是, ...

  2. 前端学习之touch.js与swiper学习

    Touch.js是移动设备上的手势识别与事件库,改框架基于原生js,操作简单,主要分drag,swipe,rotate,scale,tab,hold,touch操作. swiper是一个移动端触摸滑动 ...

  3. 【BZOJ-3438】小M的作物 最小割 + 最大权闭合图

    3438: 小M的作物 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 825  Solved: 368[Submit][Status][Discuss ...

  4. 使用ThreadSanitizer线程检查工具

    ThreadSanitizer又叫TSan,是一个检查线程Data Race的C/C++工具.它集成在新版的gcc和clang中,通过编译时加-fsanitize=thread,可以在运行时检测出Da ...

  5. MYSQL: Cannot delete or update a parent row: a foreign key constraint fails

    这可能是MySQL在InnoDB中设置了foreign key关联,造成无法更新或删除数据.可以通过设置FOREIGN_KEY_CHECKS变量来避免这种情况. SET FOREIGN_KEY_CHE ...

  6. windows 下nginx 虚拟主机搭建

    需要在 nginx.conf里面引入刚才配置的那个文件   第一步 加东西 http的节点里面加上 一定要注意的是:必须以  ;  结尾 include D:/phpen/nginx-1.3.6/co ...

  7. 记一次node进程无法kill 问题

    起因 开发反馈测试环境某 node 进程使用 pm2 log 查看日志提示端口冲突,pm2 restart 重启进程问题依旧,但该服务可正常访问. 处理过程: 访问该服务 URL 业务正常,查看 Ng ...

  8. swift hidesBottomBarWhenPushed 设置界面

    方法一(推荐):一级界面push的时候设置,子页面无需设置 let vc = JYMyCommissionController() vc.hidesBottomBarWhenPushed = true ...

  9. Installation Oracle11gR2 RAC---常见报错处理

    第六章.报错处理 6.1 root.sh脚本执行失败处理 安装grid时,执行rootsh脚本报错如下: Adding Clusterware entries to inittab USM drive ...

  10. printDocument设置适应边框打印 特重要 找了半天 设置一个属性即可

    private void pd_PrintPage(object sender, PrintPageEventArgs e) { e.Graphics.SmoothingMode = System.D ...