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)
	    {
	        // 主循环无需处理,中断异步响应
	    }
	}
相关推荐
Molesidy1 小时前
【Embedded Development】【Zephyr】【Windows】基于STM32的Zephyr移植
stm32·led·zephyr
易水寒陈2 小时前
stm32使用Jlink进行GDB脚本调试
stm32·单片机·嵌入式硬件
weixin_452077642 小时前
LVGL移植到STM32教程(附源码) ----兼容正点原子精英板
stm32·单片机·嵌入式硬件
Zyed3 小时前
[STM32]Day13修改主频、睡眠模式+串口发送、停止模式+对射式红外传感器计次、待机模式+实时时钟
stm32·单片机·嵌入式硬件
硬件工程师宝典3 小时前
I2C从入门到精通之一:I2C的历史起源和综合简介
服务器·嵌入式硬件·硬件架构·i2c
金色光环3 小时前
DSP28335 SPI通信实验:从零到实战
单片机·嵌入式硬件·物联网
Zyed5 小时前
[STM32]Day14独立看门狗+窗口看门狗
stm32·单片机·嵌入式硬件
H__Rick5 小时前
C51学习-DAY7
单片机·嵌入式硬件·学习·51单片机
济6175 小时前
BMS系统专栏:认知电池管理系统BMS的知识与功能
嵌入式硬件·嵌入式·ros2·机器人开发·机器人方向
欢乐熊嵌入式编程5 小时前
第2讲:什么是优秀的软件架构?
stm32·单片机·freertos·低功耗蓝牙·嵌入式架构·efr32