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); //清除标志
    		...
    	}
    }
    

      

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

  • 相关阅读:
    Python实现TCP服务端的并发
    python程序中的线程操作
    jmeter命令行执行脚本_动态参数设置
    App客户端性能测试点总结
    App功能测试点总结
    jmeter中生成UUID作为唯一标识符
    Python Unittest进行接口测试的简单示例
    jmeter接口测试中的用例数据分离
    博客园看板娘的简单添加
    (转)后端服务性能压测实践
  • 原文地址:https://www.cnblogs.com/zjgtan/p/2923482.html
Copyright © 2011-2022 走看看