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

      

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

  • 相关阅读:
    jmeter(六)元件的作用域与执行顺序
    通过数据自动生成流程图(前端方向) dagred3
    jmeter(二)录制脚本
    最准的中文文本相似度计算工具
    BERT文本相似度实战
    Jmeter 字符串拼接参数
    常见数据库字段类型与java.sql.Types的对应
    jmeter(二十七)分布式压测注意事项
    词法分析利用Jieba实现高频词提取(Python)
    jmeter(二十一)jmeter常用插件介绍
  • 原文地址:https://www.cnblogs.com/zjgtan/p/2923482.html
Copyright © 2011-2022 走看看