zoukankan      html  css  js  c++  java
  • stm32学习笔记:GPIO外部中断的使用

    源起:项目中需要使用统一的时间触发信号使得采样时间同步,因此需要某一个管脚来进行触发。

    硬件情况:采用PA11管脚

    需要明确的是,PxN管脚共用外部中断线EXTIN和外部中断向量EXTIN_IRQn和中断服务程序入口EXTIN_IRQHandler,但是需要注意的是[9...5]共用EXTI9_5_IRQn和EXTI9_5_IRQHandler、[15...10]共用EXTI15_10_IRQn和EXTI15_10_IRQHandler

    基本过程:

    1、设置时钟

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
    

     注意需要打开AFIO时钟

    2、配置GPIO

    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_Init(GPIOA, &GPIO_InitStructure);
    

    采用模拟输入方式

    3、将GPIO管脚与外部中断线连接

    GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource11);
    

      相当重要

    4、配置EXTI

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

    包括触发方式等等

    6、配置NVIC

    	NVIC_InitTypeDef NVIC_InitStructure;	
    	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
    
    	NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; //PPP外部中断线
    	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    	NVIC_Init(&NVIC_InitStructure);
    

    7、写中断服务程序

    void EXTI15_10_IRQHandler(void)
    {
    	if (EXTI_GetITStatus(EXTI_Line11) != RESET)
    	{
    		EXTI_ClearITPendingBit(EXTI_Line11); //清除标志
    		...
    	}
    }
    

      

    另外,简单的滤波方法可以在主逻辑中实现

  • 相关阅读:
    ABP框架理论研究总结(典藏版)
    ABP系列文章总目录:
    使用NServiceBus开发分布式应用
    shell脚本进阶 详解及其实例(一)
    linux模拟实现主机跨路由通信
    网络管理之基础知识详解
    RAID RAID 大揭秘~
    磁盘管理(一)磁盘结构
    如何在centos7上安装源码包
    压缩与解压缩
  • 原文地址:https://www.cnblogs.com/zjgtan/p/2923482.html
Copyright © 2011-2022 走看看