STM32_外部中断_寄存器操作

文章目录

  • 一、EXTI寄存器
    • [   1.中断屏蔽寄存器(EXTI_IMR)](#   1.中断屏蔽寄存器(EXTI_IMR))
    • [   2.事件屏蔽寄存器(EXTI_EMR)](#   2.事件屏蔽寄存器(EXTI_EMR))
    • [   3.上升沿触发选择寄存器(EXTI_RTSR)](#   3.上升沿触发选择寄存器(EXTI_RTSR))
    • [   4.下降沿触发选择寄存器(EXTI_FTSR)](#   4.下降沿触发选择寄存器(EXTI_FTSR))
    • [   5.软件中断事件寄存器(EXTI_SWIER)](#   5.软件中断事件寄存器(EXTI_SWIER))
    • [   6.挂起寄存器(EXTI_PR)](#   6.挂起寄存器(EXTI_PR))
    • [   7.外部中断/事件寄存器映像](#   7.外部中断/事件寄存器映像)
  • 二、ARIO寄存器
    • [   1.事件控制寄存器(AFIO_EVCR)](#   1.事件控制寄存器(AFIO_EVCR))
    • [   2.复用重映射和调试I/O配置寄存器(AFIO_MAPR)](#   2.复用重映射和调试I/O配置寄存器(AFIO_MAPR))
    • [   3.外部中断配置寄存器 1(AFIO_EXTICR1)](#   3.外部中断配置寄存器 1(AFIO_EXTICR1))
    • [   4.外部中断配置寄存器 2(AFIO_EXTICR2)](#   4.外部中断配置寄存器 2(AFIO_EXTICR2))
    • [   5.外部中断配置寄存器 3(AFIO_EXTICR3)](#   5.外部中断配置寄存器 3(AFIO_EXTICR3))
    • [   6.外部中断配置寄存器 4(AFIO_EXTICR4)](#   6.外部中断配置寄存器 4(AFIO_EXTICR4))
  • 三、实例代码_外部中断(按键触发)
    • [   以 PA0 按键触发上升沿中断、翻转 PC13 LED 为例。](#   以 PA0 按键触发上升沿中断、翻转 PC13 LED 为例。)

一、EXTI寄存器

   1.中断屏蔽寄存器(EXTI_IMR)

     偏移地址:0x00

     复位值:0x0000 0000

    

   2.事件屏蔽寄存器(EXTI_EMR)

     偏移地址:0x04

     复位值:0x0000 0000

    

   3.上升沿触发选择寄存器(EXTI_RTSR)

     偏移地址:0x08

     复位值:0x0000 0000

    

   4.下降沿触发选择寄存器(EXTI_FTSR)

     偏移地址:0x0C

     复位值:0x0000 0000

    

   5.软件中断事件寄存器(EXTI_SWIER)

     偏移地址:0x10

     复位值:0x0000 0000

    

   6.挂起寄存器(EXTI_PR)

     偏移地址:0x14

     复位值:0xXXXX XXXX

    

   7.外部中断/事件寄存器映像

    

二、ARIO寄存器

   1.事件控制寄存器(AFIO_EVCR)

     地址偏移:0x00

     复位值:0x0000 0000

    

   2.复用重映射和调试I/O配置寄存器(AFIO_MAPR)

     地址偏移:0x04

     复位值:0x0000 0000

    

    

    

   3.外部中断配置寄存器 1(AFIO_EXTICR1)

     地址偏移:0x08

     复位值:0x0000

    

    

   4.外部中断配置寄存器 2(AFIO_EXTICR2)

     地址偏移:0x0C

     复位值:0x0000

    

   5.外部中断配置寄存器 3(AFIO_EXTICR3)

复制代码
	地址偏移:0x10 
	复位值:0x0000 

   6.外部中断配置寄存器 4(AFIO_EXTICR4)

     地址偏移:0x14

     复位值:0x0000

    

三、实例代码_外部中断(按键触发)

   以 PA0 按键触发上升沿中断、翻转 PC13 LED 为例。

c 复制代码
	#include "stm32f10x.h"
	
	/**
	 * @brief  GPIO初始化:PA0(中断输入)、PC13(LED输出)
	 */
	void GPIO_Init_Exti(void)
	{
	    // 1. 开启GPIOA、GPIOC、AFIO时钟(EXTI必须开启AFIO)
	    RCC->APB2ENR |= RCC_APB2ENR_IOPAEN | RCC_APB2ENR_IOPCEN | RCC_APB2ENR_AFIOEN;
	
	    // 2. 配置PA0为下拉输入(按键按下→高电平)
	    GPIOA->CRL &= ~(GPIO_CRL_MODE0 | GPIO_CRL_CNF0);  // 清空模式/配置位
	    GPIOA->CRL |= GPIO_CRL_CNF0_1;                    // 下拉输入(CNF0[1:0]=10)
	    GPIOA->ODR &= ~GPIO_ODR_ODR0;                     // 下拉(ODR0=0)
	
	    // 3. 配置PC13为推挽输出(LED)
	    GPIOC->CRH &= ~(GPIO_CRH_MODE13 | GPIO_CRH_CNF13); // 清空模式/配置位
	    GPIOC->CRH |= GPIO_CRH_MODE13_0;                  // 10MHz输出模式
	    GPIOC->ODR |= GPIO_ODR_ODR13;                     // 初始LED熄灭
	}
	
	/**
	 * @brief  EXTI0中断配置(PA0触发)
	 */
	void EXTI0_Init(void)
	{
	    // 1. 绑定PA0到EXTI0(AFIO_EXTICR1寄存器)
	    AFIO->EXTICR[0] &= ~AFIO_EXTICR1_EXTI0;
	    AFIO->EXTICR[0] |= AFIO_EXTICR1_EXTI0_PA;
	
	    // 2. 配置上升沿触发
	    EXTI->RTSR |= EXTI_RTSR_TR0;  // 开启上升沿触发
	    EXTI->FTSR &= ~EXTI_FTSR_TR0; // 关闭下降沿触发
	
	    // 3. 开启EXTI0中断请求(屏蔽位)
	    EXTI->IMR |= EXTI_IMR_MR0;
	
	    // 4. 配置NVIC(EXTI0对应6号中断通道)
	    SCB->AIRCR = 0x05FA0800;      // 优先级分组2:2位抢占+2位子优先级
	    NVIC->IP[6] &= ~0xFF;         // 清空优先级
	    NVIC->IP[6] |= 0x20;          // 抢占优先级2,子优先级0(高4位有效)
	    NVIC->ISER[0] |= (1 << 6);    // 使能6号中断
	}
	
	/**
	 * @brief  EXTI0中断服务函数(必须与启动文件中名称一致)
	 */
	void EXTI0_IRQHandler(void)
	{
	    // 检查中断标志位,避免误触发
	    if(EXTI->PR & EXTI_PR_PR0)
	    {
	        // 业务逻辑:翻转PC13 LED
	        GPIOC->ODR ^= GPIO_ODR_ODR13;
	
	        // 清除中断标志位(写1清除,关键!)
	        EXTI->PR |= EXTI_PR_PR0;
	    }
	}
	
	// 主函数
	int main(void)
	{
	    GPIO_Init_Exti();
	    EXTI0_Init();
	
	    while(1)
	    {
	        // 主循环无需处理,中断异步响应
	    }
	}
相关推荐
FreakStudio11 天前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
✎ ﹏梦醒͜ღ҉繁华落℘16 天前
单片机基础知识---stm32单片机的优先级
stm32·单片机·mongodb
u1521096484916 天前
S.S.Audio PRO A2音频隔离器
嵌入式硬件·音视频·实时音视频·视频编解码·视频
zd84510150016 天前
RS485 总线详解
单片机·嵌入式硬件
半条-咸鱼17 天前
【STM32】I2C协议原理、HAL读写与OLED显示操作
嵌入式硬件·c·信息与通信
牛根生同志17 天前
SPI数据收发的时候 TXE与RXNE标志位置位的时机
stm32·spi·transfer
wohoo_wangzi17 天前
苏州晟雅泰电子:关于W25Q128JVSIQ这个芯片物料的参数,规格及应用领域
嵌入式硬件
goldenrolan17 天前
学习型红外控制系统稳定性挂测工装专项总结
软件测试·python·stm32·嵌入式·红外
✎ ﹏梦醒͜ღ҉繁华落℘17 天前
编程基础 --高内聚,低耦合
c语言·单片机
科芯创展17 天前
1A,1MHz,30VIN,XZ4115,降压恒流LED驱动芯片
单片机·嵌入式硬件