IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32入门(十四)----EXTI -> 正文阅读

[嵌入式]STM32入门(十四)----EXTI

EXTI简介

EXTI:External interrupt/event controller 外部 中断/时间 控制器
在这里插入图片描述

EXTI功能框图

在这里插入图片描述

  1. 选择输入线
  2. 配置上升沿/下降沿触发选择寄存器
  3. 配置软件中断事件寄存器
  4. 配置中断屏蔽寄存器
  5. 配置NVIC中断控制器

输入线总共有19条(非互联型)
在这里插入图片描述
通过配置外部中断配置寄存器(AFIO_EXTICR1)来选择线路在这里插入图片描述
PA0:EXTI0:0000
在这里插入图片描述
把KEY_UP配置为下拉输入;
如果没有按下,KEY_UP端(PA0)一直是低电平;
如果按下,PA0变为高电平;
配置为上升沿触发。
在这里插入图片描述
TR0:1 允许输入线0上的上升沿触发(中断和事件)。

软件中断事件寄存器
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

MR0:1 开放来自线0上的中断请求

KEY_UP按键触发中断

stm32f10x_exti.h中的初始化结构体以及初始化结构体里面的成员可以选择的值,还有初始化函数。

typedef struct
{
  uint32_t EXTI_Line;               /*!< Specifies the EXTI lines to be enabled or disabled.
                                         This parameter can be any combination of @ref EXTI_Lines  EXTI_Linex(x:0~15)
                                         选择输入线
                                         用于产生 中断/事件 线
                                         EXTI_Linex(x:0~15)*/
   
  EXTIMode_TypeDef EXTI_Mode;       /*!< Specifies the mode for the EXTI lines.
                                         This parameter can be a value of @ref EXTIMode_TypeDef
                                         选择中断或者事件
                                         EXTI模式(中断/事件) */

  EXTITrigger_TypeDef EXTI_Trigger; /*!< Specifies the trigger signal active edge for the EXTI lines.
                                         This parameter can be a value of @ref EXTIMode_TypeDef 
                                         确定输入线的触发模式
                                         触发(上/下/上下)*/

  FunctionalState EXTI_LineCmd;     /*!< Specifies the new state of the selected EXTI lines.
                                         This parameter can be set either to ENABLE or DISABLE 
                                         确定选的输入线是否使能
                                         这个是配置中断/事件屏蔽寄存器的
                                         使能或者失能(IMR/EMR)
                                         ENABLE or DISABLE*/ 
}EXTI_InitTypeDef;

typedef enum
{
  EXTI_Mode_Interrupt = 0x00,
  EXTI_Mode_Event = 0x04
}EXTIMode_TypeDef;

typedef enum
{
  EXTI_Trigger_Rising = 0x08,
  EXTI_Trigger_Falling = 0x0C,  
  EXTI_Trigger_Rising_Falling = 0x10
}EXTITrigger_TypeDef;

void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);
stm32f10x_gpio.h中的选择GPIO端口作为输入线的函数
void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);

程序

1-初始化要连接到EXTI的GPIO
2-初始化EXTI用于产生中断/事件
3-初始化NVIC,用于处理中断
4-编写中断服务函数
5-main函数

exti.h
#ifndef __EXTI_H
#define __EXTI_H
#include "stm32f10x.h"

#define KEY_UP_INT_GPIO_PIN   GPIO_Pin_0
#define KEY_UP_INT_GPIO_PORT  GPIOA
#define KEY_UP_INT_GPIO_CLK   RCC_APB2Periph_GPIOA


void EXTI_Key_Config(void);
#endif


exti.c
#include "exti.h"

void EXIT_NVIC_Config(void)
{
	NVIC_InitTypeDef NVIC_InitStruct;
	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
	NVIC_InitStruct.NVIC_IRQChannel=EXTI0_IRQn;
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1;
	NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;
	NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
	NVIC_Init(&NVIC_InitStruct);
}


void EXTI_Key_Config(void)
{
	//定义变量
	GPIO_InitTypeDef GPIO_InitStruct;
	EXTI_InitTypeDef EXTI_InitStruct;
	
	//配置中断优先级
	EXIT_NVIC_Config();
	//初始化GPIO
	RCC_APB2PeriphClockCmd(KEY_UP_INT_GPIO_CLK,ENABLE);
	
	GPIO_InitStruct.GPIO_Pin=KEY_UP_INT_GPIO_PIN;
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPD;
	GPIO_Init(KEY_UP_INT_GPIO_PORT,&GPIO_InitStruct);
	
	
	//初始化EXTI
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
	
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);//选择输入线
	
	EXTI_InitStruct.EXTI_Line=EXTI_Line0;
	EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;
	EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Rising_Falling;
	EXTI_InitStruct.EXTI_LineCmd=ENABLE;
	EXTI_Init(&EXTI_InitStruct);
}
main.c
#include "stm32f10x.h"
#include "bsp_led.h"
#include "key.h"
#include "delay.h"
#include "exti.h"
int main(void)
{
	#if 0
	uint8_t a;
	LED_GPIO_Config();
	Key_GPIO_Config();
	delay_init();
	LED_0(OFF);
	LED_1(OFF);
	while(1)
	{
		a=Key_Scan();
		if(a!=0)
		{
			if(a==1){LED_0_TOGGLE;}
			else if(a==2){LED_1_TOGGLE;}
			else if(a==3){LED_0_TOGGLE;LED_1_TOGGLE;}
		}
	}
	#else
	LED_GPIO_Config();
	Key_GPIO_Config();
	EXTI_Key_Config();
	while(1)
	{
		
	}
	#endif
}
  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-07-16 11:27:52  更:2021-07-16 11:28:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 19:40:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码