嵌入式笔记 | 正点原子STM32F103ZET6 4 | 中断补充

1. 外设引脚重映射

1.1 定义

在STM32中,每个外设的引脚都有默认的GPIO端口,但有些引脚可以通过重映射寄存器将功能映射到其他端口。这种机制称为引脚重映射,主要用于解决引脚复用冲突或优化PCB布线。

1.2 重映射的类型

  • 部分重映射(Partial Remap):某些外设引脚被重新映射,而部分仍使用默认引脚。
  • 完全重映射(Full Remap):外设的所有相关引脚都被重新映射到新的端口。

1.3 引脚重映射的配置过程(以串口1为例)

为了实现串口1的引脚重映射,需要按照以下步骤进行:

  1. 使能GPIO时钟 (针对重映射后的IO端口):

    复制代码
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 使能GPIOA时钟
  2. 使能功能外设时钟 (例如串口1):

    复制代码
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); // 使能USART1时钟
  3. 使能AFIO时钟 (复用辅助功能时钟)。
    重映射必须使能AFIO时钟

    复制代码
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
  4. 开启重映射

    复制代码
    GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);

    其中,第一个参数决定了是部分重映射 还是完全重映射

1.4 什么时候需要开启AFIO辅助功能时钟?

在对以下寄存器进行读写操作前,必须先打开AFIO时钟

  • AFIO_MAPR:配置复用功能重映射。
  • AFIO_EXTICRx:配置外部中断线映射。
  • AFIO_EVCR:配置EVENTOUT事件输出。

2. STM32 中断优先级管理

2.1 STM32 中断概述

STM32 具有 84 个中断,其中:

  • 16 个内核中断(系统级中断)。
  • 68 个可屏蔽中断(外部中断)(STM32F103 系列只有 60 个可屏蔽中断,而 STM32F107 才有 68 个)。

这些外部中断可以被屏蔽,并且支持可编程的优先级管理。

2.2 NVIC(嵌套向量中断控制器)

STM32 的 NVIC 支持 16 级中断优先级,用于管理不同外设和系统的中断响应顺序。

2.3 NVIC 中断优先级分组

STM32 的 NVIC 允许对中断优先级进行分组,每个中断都有:

  • 主优先级(Preempt Priority):决定是否可以抢占低优先级中断。
  • 子优先级(Sub Priority):决定在相同主优先级情况下,哪个中断先被执行。

STM32 提供了 5 种优先级分组模式 (由 SCB->AIRCR 配置):

分组模式 主优先级位数 子优先级位数
0 0 位 4 位
1 1 位 3 位
2 2 位 2 位
3 3 位 1 位
4 4 位 0 位

2.4 设置 NVIC 优先级

使用 NVIC_PriorityGroupConfig() 设置 NVIC 分组:

复制代码
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 设置 2 级抢占优先级,2 级子优先级

设置某个外设中断的优先级:

复制代码
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;    // 选择串口1中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // 抢占优先级 1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;        // 子优先级 2
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;    // 使能该中断
NVIC_Init(&NVIC_InitStructure); // 配置 NVIC
  • **抢占优先级(Preemption Priority)**越小,优先级越高,可以打断低优先级的中断。
  • **子优先级(Sub Priority)**决定相同抢占优先级的情况下,哪个中断先执行。
相关推荐
Wilber的技术分享15 分钟前
【LeetCode高频手撕题 2】面试中常见的手撕算法题(小红书)
笔记·算法·leetcode·面试
愚昧之山绝望之谷开悟之坡43 分钟前
合格境外投资者
笔记
liwulin05062 小时前
【ESP32-S3】通过ROS2使用YDLIDAR X2进行SLAM、自主导航方案选择
单片机·嵌入式硬件
寒秋花开曾相惜3 小时前
(学习笔记)3.8 指针运算(3.8.3 嵌套的数组& 3.8.4 定长数组)
java·开发语言·笔记·学习·算法
Truffle7电子3 小时前
STM32理论 —— FreeRTOS:任务
stm32·嵌入式·rtos
廷华电子3 小时前
SSI接口板设计
stm32·电机控制
是翔仔呐3 小时前
第11章 显示外设驱动:I2C协议OLED屏、SPI协议LCD屏字符/图片/中文显示
c语言·开发语言·stm32·单片机·嵌入式硬件·学习·gitee
_李小白3 小时前
【AI大模型学习笔记之平台篇】第五篇:Trae常用模型介绍与性能对比
人工智能·笔记·学习
承渊政道4 小时前
【优选算法】(实战体会位运算的逻辑思维)
数据结构·c++·笔记·学习·算法·leetcode·visual studio
承渊政道4 小时前
【优选算法】(实战推演模拟算法的蕴含深意)
数据结构·c++·笔记·学习·算法·leetcode·排序算法