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)
	    {
	        // 主循环无需处理,中断异步响应
	    }
	}
相关推荐
azwsm5 小时前
驱动第一阶段——启动流程
单片机·嵌入式硬件
单片机杂货铺7 小时前
基于单片机的自动开窗器设计
stm32·嵌入式硬件·51单片机·硬件工程
天天爱吃肉82189 小时前
商用车多体动力学实战笔记|第6篇:动力传动系统(发动机、变速箱、分动器、TCS、LSD限滑差速)
大数据·人工智能·笔记·python·嵌入式硬件·汽车
别催小唐敲代码9 小时前
STM32 I2C协议详解:从原理到实战
stm32·网络协议·协议
lhbweilai9 小时前
STM32 I2C(hal库)
stm32·单片机·嵌入式硬件
单片机杂货铺13 小时前
基于STM32的智能市政清洁小车系统设计
stm32·单片机·嵌入式硬件·物联网·硬件工程
单片机杂货铺13 小时前
基于STM32的智能书房系统的设计
stm32·单片机·嵌入式硬件·51单片机·硬件工程
&Hello Code13 小时前
3.解决STM32工程混乱:一套可复用六层架构,GPIO 、LED 实战演示
stm32·嵌入式硬件·架构
普科PRBTEK13 小时前
电流探头的常见应用场景
单片机·嵌入式硬件
qq_4017004114 小时前
3个常用的单片机实现隔离控制大电流负载例子
单片机·嵌入式硬件