STM32单片机实战开发笔记-EXIT外部中断检测

发布于:2024-05-10 ⋅ 阅读:(20) ⋅ 点赞:(0)

嵌入式单片机开发实战例程合集:

链接:https://pan.baidu.com/s/11av8rV45dtHO0EHf8e_Q0Q?pwd=28ab
提取码:28ab

EXIT模块测试

  1. 功能描述

外部中断/事件控制器由19个产生事件/中断要求的边沿检测器组成。每个输入线可以独立地配置输入类型(脉冲或挂起)和对应的触发事件(上升沿或下降沿或者双边沿触发)。每个输入线都可以被独立的屏蔽。挂起寄存器保持着状态的中断要求。

  1. 主要特性

EXTI控制器的主要特性如下:

  1. 每个中断/事件都有独立的触发和屏蔽
  2. 每个中断线都有 专用的状态位
  3. 支持多达19个中断/事件请求
  4. 检测脉冲宽度低于APB2时钟宽度的外部信号。

外部中断/事件线路映像:

80通用I/O端口以下图的方式连接到19个外部中断/事件上:

另外三种其他的外部中断/事件控制器的连接如下:

  1. EXT1线16连接到PVD输出
  2. EXTI线17连接到RTC闹钟事件
  3. EXTI线18连接到USB唤醒事件

3、硬件电路

  1. 软件代码

/********************************************************************

* 文件 :EXTI.c

* 版本 :V1

* 描述 :STM32f103VCT6的中断配置

* 说明 :外部中断线6产生中断时,进入中断服务程序后让蜂鸣器响

********************************************************************/

#include"stm32f10x_lib.h"

void EXTI_Configuration(void)

{

       

        EXTI_InitTypeDef EXTI_InitStructure;

        GPIO_InitTypeDef GPIO_InitStructure;

        /* =======================开启时钟================*/

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE); // 使能APB2外设GPIOC时钟

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;                      //配置PB6为外部中断

        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;             //下拉输入

        GPIO_Init(GPIOB,&GPIO_InitStructure);

        GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource6);

        EXTI_DeInit();     //将EXIT寄存器重设置为缺省值

        EXTI_InitStructure.EXTI_Line = EXTI_Line6 ;              //中断线

        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt ;  //中断模式

        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;           //双边沿

        EXTI_InitStructure.EXTI_LineCmd = ENABLE;               //使能

        EXTI_Init(&EXTI_InitStructure);                             //初始化

}

void NVIC_Configuration(void)

{

        NVIC_InitTypeDef NVIC_InitStructure;

        #ifdef  VECT_TAB_RAM 

               NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);

        #else

               NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);  

        #endif

        NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel;

        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

        NVIC_Init(&NVIC_InitStructure);                

}


网站公告

今日签到

点亮在社区的每一天
去签到