STM32F4xx中断系统

合集下载

STM32F4——NVIC中断优先级及外部中断

STM32F4——NVIC中断优先级及外部中断

STM32F4——NVIC中断优先级及外部中断NVIC 中断优先级一、简介:CM4 内核可以支持256 个中断,包括16 个内核中断和240 个外部中断,256 级的可编程中断设置。

对于STM32F4 没有用到CM4 内核的所有东西,只是用到了一部分,对于STM32F40 和41 系列共有92 个中断,其中有10 个内核中断和82 个可屏蔽中断,常用的为82 个可屏蔽中断。

二、相关寄存器:ISER[8]中断使能寄存器组,用来使能中断,每一位控制一个中断,由于上面已经说明了控制82 个可屏蔽的中断,因此利用ISER[0~2]这三个32 位寄存器就够了。

一下的几个寄存器同理。

ICER[8]中断除能寄存器组,用来消除中断。

ISPR[8]中断挂起控制寄存器组,用来挂起中断。

ICPR[8]中断解挂控制寄存器组,用来解除挂起。

IABR[8]中断激活标志寄存器组,对应位如果为1 则表示中断正在被执行。

IP[240]中断优先级控制寄存器组,它是用来设置中断优先级的。

我们只用到了IP[0]~IP[81],每个寄存器只用到了高4 位,这4 位又用来设置抢占优先级和响应优先级(有关抢占优先级和响应优先级后面会介绍到),而对于抢占优先级和响应优先级各占多少位则由AIRCR 寄存器控制,相关设置如下图所示:关于抢占优先级和响应优先级的理解,可以将它们简单的理解为两个级别,抢占优先级的级别要比响应优先级的级别高,简单的理解为一个为长辈的一个为晚辈的,晚辈要让着长辈,因此抢占优先级的中断可以打断响应优先级的中断,而同级别的中断就得有个先来后到的了,先来的先执行。

三、相关库函数应用1、中断优先级分组函数:voidNVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup),用来设置设置中断优。

stm32外部中断回传参数

stm32外部中断回传参数

stm32外部中断回传参数摘要:1.STM32外部中断基本概念2.STM32外部中断配置方法3.外部中断触发方式及应用场景4.实例:STM32外部中断回传参数正文:一、STM32外部中断基本概念STM32外部中断,又称IO中断或事件控制器(EXTI),是STM32微控制器提供的一种中断机制。

它允许外部信号(如GPIO引脚状态变化)触发中断请求,进而实现程序的跳转和执行。

STM32外部中断具有较高的灵活性和可靠性,广泛应用于各种智能硬件和嵌入式系统中。

二、STM32外部中断配置方法1.选择合适的外部中断线:STM32外部中断共支持19个边沿检测器,可根据实际需求选择相应的外部中断线。

2.配置触发事件:每个外部中断线都可以独立地配置其触发事件,包括上升沿、下降沿或双边沿。

3.屏蔽中断请求:可通过挂起寄存器单独地屏蔽或启用外部中断请求。

4.配置中断优先级:根据需要调整中断优先级,确保关键任务能够及时响应。

三、外部中断触发方式及应用场景1.上升沿触发:当GPIO引脚电平从低电平变为高电平时,触发中断。

2.下降沿触发:当GPIO引脚电平从高电平变为低电平时,触发中断。

3.双边沿触发:当GPIO引脚电平发生上升或下降沿时,均触发中断。

4.应用场景:外部中断广泛应用于传感器数据采集、通信接收、按键触发等领域。

四、实例:STM32外部中断回传参数以下是一个简单的STM32外部中断回传参数的实例:1.配置GPIO引脚为输入模式,并连接到外部中断线。

2.配置外部中断触发方式(如上升沿触发)。

3.编写中断处理函数,并在其中读取GPIO引脚状态。

4.在主循环中,检查外部中断触发次数,并根据需要执行相应操作。

5.为了确保实时性,可以使用中断优先级和嵌套中断机制。

通过以上步骤,您可以充分利用STM32外部中断实现各种智能控制和监测功能。

stm32cubemx 串口中断和回调函数运行机制

stm32cubemx 串口中断和回调函数运行机制

stm32cubemx 串口中断和回调函数运行机制在STM32CubeMX 中配置串口中断和回调函数的运行机制涉及到STM32 微控制器的中断系统和HAL 库的使用。

下面是一个简要的概述:1. 配置串口硬件:首先,在STM32CubeMX 中,你需要配置串口硬件,选择串口的引脚、波特率等参数。

在配置过程中,你还可以选择是否启用串口的中断。

2. 生成代码:完成硬件配置后,通过STM32CubeMX 生成初始化代码。

这将生成包含初始化串口的HAL 库函数调用的 C 代码文件。

3. 中断配置:如果启用了串口中断,STM32CubeMX 将生成相应的中断处理函数的框架,但并不会直接实现中断处理的代码。

在生成的代码中,你会看到像`USARTx_IRQHandler` 这样的中断处理函数,其中`x` 是你所配置的串口号。

你需要在这个函数中实现具体的中断处理逻辑。

4. HAL_UART_IRQHandler 函数:在中断处理函数中,通常会调用HAL 库的相应函数,如`HAL_UART_IRQHandler`。

这个函数实际上是一个通用的串口中断处理函数,它会检查串口中断的原因并调用相应的回调函数。

5. 回调函数:在HAL 库中,你可以注册一个回调函数,该函数将在串口中断发生时被调用。

回调函数的注册通常在初始化串口时完成,使用的函数是`HAL_UART_Receive_IT` 或`HAL_UART_Transmit_IT`。

这两个函数中的`_IT` 表示启用中断。

以下是一个伪代码示例,演示了串口中断和回调函数的配置:```c// 串口接收缓冲区uint8_t rxBuffer[BufferSize];// 串口中断回调函数void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {// 处理接收完成中断// 处理完后重新启动接收HAL_UART_Receive_IT(&huart1, rxBuffer, BufferSize);}int main() {// STM32CubeMX 生成的初始化代码// 启动串口接收中断HAL_UART_Receive_IT(&huart1, rxBuffer, BufferSize);while (1) {// 主循环}}```在这个例子中,`HAL_UART_RxCpltCallback` 函数是串口接收完成中断的回调函数。

stm32外部中断实验报告-STM32实例外部中断实验

stm32外部中断实验报告-STM32实例外部中断实验

stm32外部中断实验报告_STM32实例外部中断实验上⼀篇⽂章我们介绍了 STM32F10x 的中断,这次我们就来学习下外部中断。

本⽂中要实现的功能与按键实验⼀样,即通过按键控制LED,只不过这⾥采⽤外部中断⽅式进⾏控制。

学习时可以参考《STM32F10x 中⽂参考⼿册》-9 中断和事件章节。

外部中断介绍EXTI 简介STM32F10x 外部中断/事件控制器(EXTI)包含多达 20 个⽤于产⽣事件/中断请求的边沿检测器。

EXTI 的每根输⼊线都可单独进⾏配置,以选择类型(中断或事件)和相应的触发事件(上升沿触发、下降沿触发或边沿触发),还可独⽴地被屏蔽。

EXTI 结构框图EXTI 框图包含了 EXTI 最核⼼内容,掌握了此框图,对 EXTI 就有⼀个全局的把握,在编程的时候思路就⾮常清晰。

从图中可以看到,有很多信号线上都有标号 9 样的“20”字样,这个表⽰在控制器内部类似的信号线路有 20 个,这与 STM32F10x 的 EXTI 总共有20 个中断/事件线是吻合的。

因此我们只需要理解其中⼀个的原理,其他的 19个线路原理都是⼀样的。

EXTI 分为两⼤部分功能,⼀个产⽣中断,另⼀个产⽣事件,这两个功能从硬件上就有所差别,这个在框图中也有体现。

从图中标号 3 的位置处就分出了两条线路,⼀条是 3-4-5 ⽤于产⽣中断,另⼀条是 3-6-7-8⽤于产⽣事件。

下⾯我们就来介绍下这两条线路:(1)⾸先看下产⽣中断的这条线路(1-2-3-4-5)1.标号 1 为输⼊线,EXTI 控制器有 20 个中断/事件输⼊线,这些输⼊线可以通过寄存器设置为任意⼀个 GPIO,也可以是⼀些外设的事件,这部分内容我们会在后⾯专门讲解。

输⼊线⼀般是存在电平变化的信号。

2.边沿检测电路,EXTI 可以对触发⽅式进⾏选择,通过上升沿触发选择寄存器和下降沿触发选择寄存器对应位的设置来控制信号触发。

边沿检测电路以输⼊线作为信号输⼊端,如果检测到有边沿跳变就输出有效信号 1 给红⾊框 3 电路,否则输出⽆效信号 0。

STM32F4 第9讲 NVIC中断优先级管理-M4

STM32F4 第9讲 NVIC中断优先级管理-M4
void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);
✓ 2. 中断优先级设置
中断使能寄存器组:ISER[8]
作用:用来使能中断
32位寄存器,每个位控制一个中断的使能。STM32F40x只 有82个可屏蔽中断,所以只使用了其中的ISER[0]~ISER[2]。
✓ 3. NVIC总结
中断优先级设置步骤
① 系统运行后先设置中断优先级分组。调用函数:
void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);
整个系统执行过程中,只设置一次中断分组。
②针对每个中断,设置对应的抢占优先级和响应优先级:
void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);
__IO uint32_t ICPR[8]; uint32_t RESERVED3[24];
__IO uint32_t IABR[8]; uint32_t RESERVED4[56];
__IO uint8_t IP[240]; uint32_t RESERVED5[644];
__O uint32_t STIR; } NVIC_Type;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
✓ 2. 中断优先级设置
分组设置好之后,怎么设置单个中断的抢占 优先级和响应优先级?
✓ 2. 中断优先级设置
中断设置相关寄存器
__IO uint8_t IP[240]; //中断优先级控制的寄存器组
__IO uint32_t ISER[8]; //中断使能寄存器组 __IO uint32_t ICER[8]; //中断失能寄存器组 __IO uint32_t ISPR[8]; //中断挂起寄存器组 __IO uint32_t ICPR[8]; //中断解挂寄存器组 __IO uint32_t IABR[8]; //中断激活标志位寄存器组

stm32f4 的 dma 中断函数

stm32f4 的 dma 中断函数

stm32f4 的 dma 中断函数STM32F4系列微控制器是ST公司推出的一款高性能、低功耗的32位ARM Cortex-M4内核微控制器。

它具有丰富的外设和强大的计算能力,广泛应用于各种嵌入式系统中。

其中,DMA(Direct Memory Access,直接存储器访问)是STM32F4中重要的特性之一,可以有效地提高数据传输的效率和性能。

DMA中断函数是在DMA传输过程中产生中断时执行的函数。

在STM32F4中,DMA控制器负责处理数据传输,而CPU可以在数据传输过程中执行其他任务。

当DMA传输完成或出现错误时,DMA控制器会触发中断,然后执行相应的中断函数。

在编写DMA中断函数之前,首先需要配置DMA控制器和相关外设。

以USART为例,下面是配置USART和DMA的简单示例代码:```c// 配置USARTUSART_InitTypeDef USART_InitStruct;USART_ART_BaudRate = 115200;USART_ART_WordLength = USART_WordLength_8b; USART_ART_StopBits = USART_StopBits_1;USART_ART_Parity = USART_Parity_No;USART_ART_HardwareFlowControl = USART_HardwareFlowControl_None;USART_ART_Mode = USART_Mode_Tx;USART_Init(USART1, &USART_InitStruct);USART_Cmd(USART1, ENABLE);// 配置DMADMA_InitTypeDef DMA_InitStruct;DMA_InitStruct.DMA_Channel = DMA_Channel_4;DMA_InitStruct.DMA_PeripheralBaseAddr = (uint32_t)&USART1->DR;DMA_InitStruct.DMA_Memory0BaseAddr = (uint32_t)buffer;DMA_InitStruct.DMA_DIR = DMA_DIR_MemoryToPeripheral;DMA_InitStruct.DMA_BufferSize = sizeof(buffer);DMA_InitStruct.DMA_PeripheralInc = DMA_PeripheralInc_Disable;DMA_InitStruct.DMA_MemoryInc = DMA_MemoryInc_Enable;DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;DMA_InitStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; DMA_InitStruct.DMA_Mode = DMA_Mode_Normal;DMA_InitStruct.DMA_Priority = DMA_Priority_High;DMA_InitStruct.DMA_FIFOMode = DMA_FIFOMode_Disable;DMA_InitStruct.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;DMA_InitStruct.DMA_MemoryBurst = DMA_MemoryBurst_Single;DMA_InitStruct.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;DMA_Init(DMA2_Stream7, &DMA_InitStruct);// 配置DMA中断NVIC_InitTypeDef NVIC_InitStruct;NVIC_InitStruct.NVIC_IRQChannel = DMA2_Stream7_IRQn;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStruct);```在上述代码中,首先配置了USART1的相关参数,然后配置了DMA2的Stream7通道,将USART1的数据寄存器和存储器进行连接。

STM32CubeHAL库中断处理机制,以及回调函数实现原理

STM32CubeHAL库中断处理机制,以及回调函数实现原理————————————————版权声明:本⽂为CSDN博主「ybhuangfugui」的原创⽂章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原⽂出处链接及本声明。

原⽂链接:https:///ybhuangfugui/article/details/887040131写在前⾯很多⼈都知道STM32CubeMX这套⼯具的⼀个⽬的:减少开发者对STM32底层驱动的开发时间,把重⼼放在应⽤代码上。

但是,STM32CubeMX只是⽣成了底层驱动的初始化代码。

所以,我们还需要掌握:应⽤层代码如何调⽤HAL库函数接⼝,以及HAL库中断处理机制等相关知识。

HAL库牵涉的内容较多,本⽂拿HAL库中断处理来讲解,以及相关的回调函数。

2HAL库中断处理机制之前使⽤标准外设库开发时,中断程序(函数)由我们⾃⼰实现。

⽽HAL库的中断处理函数是按照HAL处理机制来实现,如USART1,统⼀由HAL_UART_IRQHandler来进⾏处理,如下图:其它⼤部分外设(TIM、SPI、CAN...)中断都类似,HAL进⾏统⼀处理。

也就是说,HAL已经帮我们把中断处理函数写好了,我们只需要调⽤相应函数来编写应⽤程序就⾏了。

HAL_xxx_IRQHandler⾥⾯做了哪些处理?我们以STM32F1的HAL_UART_IRQHandler为例:1void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)2 {3 uint32_t isrflags = READ_REG(huart->Instance->SR);4 uint32_t cr1its = READ_REG(huart->Instance->CR1);5 uint32_t cr3its = READ_REG(huart->Instance->CR3);6 uint32_t errorflags = 0x00U;7 uint32_t dmarequest = 0x00U;8910/* If no error occurs */11 errorflags = (isrflags & (uint32_t)(USART_SR_PE | USART_SR_FE | USART_SR_ORE | USART_SR_NE));12if(errorflags == RESET)13 {14/* UART in mode Receiver -------------------------------------------------*/15if(((isrflags & USART_SR_RXNE) != RESET) && ((cr1its & USART_CR1_RXNEIE) != RESET))16 {17 UART_Receive_IT(huart);18return;19 }20 }212223/* If some errors occur */24if((errorflags != RESET) && (((cr3its & USART_CR3_EIE) != RESET) || ((cr1its & (USART_CR1_RXNEIE | USART_CR1_PEIE)) != RESET))) 25 {26/*27 ·28 ·删减了部分代码29 ·30 */31 } /* End if some error occurs */323334/* UART in mode Transmitter ------------------------------------------------*/35if(((isrflags & USART_SR_TXE) != RESET) && ((cr1its & USART_CR1_TXEIE) != RESET))36 {37 UART_Transmit_IT(huart);38return;39 }40/* UART in mode Transmitter end --------------------------------------------*/41if(((isrflags & USART_SR_TC) != RESET) && ((cr1its & USART_CR1_TCIE) != RESET))42 {43 UART_EndTransmit_IT(huart);44return;45 }46 }其实,⼤家认真看⼀下代码应该能明⽩,这些和我们编写的中断处理函数是不是有类似之处?这是⽆⾮就是接收中断、发送中断、错误中断等⼀系列处理。

gd32f4 串口空闲中断问题

GD32F4串口空闲中断问题近年来,GD32F4系列芯片逐渐成为了嵌入式系统设计领域中备受关注的芯片之一。

然而,在实际的开发过程中,许多开发者都曾遇到过串口空闲中断问题。

本文将针对这一问题展开全面评估,并提供一些解决方案和个人观点。

1. 问题背景GD32F4系列芯片由我国的龙芯公司生产,其性能优异、价格适中,在市场上具有一定竞争力。

而在实际的应用中,串口通信作为嵌入式系统中最为常见的通信方式之一,也是广泛使用的功能模块之一。

然而,在使用GD32F4系列芯片进行串口通信时,一些开发者发现在配置串口空闲中断时出现了一些问题。

这一问题不仅影响了开发者对GD32F4系列芯片的使用体验,也在一定程度上影响了产品的开发和上市进程。

2. 问题解析串口空闲中断问题的出现,主要是由于对GD32F4串口空闲中断功能的配置不当所致。

在实际的开发中,为了及时接收串口传来的数据,一些开发者会选择配置串口空闲中断,以便在接收数据完整时触发中断,进行处理。

然而,由于对串口空闲中断配置的不够熟悉或者理解不够深入,就可能会出现串口空闲中断无法正常触发,导致数据接收不完整或者丢失的问题。

3. 解决方案针对串口空闲中断问题,我们可以从以下几个方面进行解决:1)熟悉GD32F4系列芯片的手册和参考资料,深入理解串口空闲中断的相关配置和使用方法;2)根据实际情况,对串口空闲中断的配置进行调整和优化,确保中断能够在数据接收完整时及时触发;3)在串口空闲中断触发时,及时对接收到的数据进行处理,确保数据的完整性和正确性。

4. 个人观点在解决串口空闲中断问题的过程中,我认为更加深入地理解GD32F4系列芯片的串口空闲中断功能是至关重要的。

只有了解其工作原理和配置方法,才能更加灵活地应对各种实际的应用场景,并更好地发挥其性能优势。

5. 总结回顾通过深入分析GD32F4系列芯片串口空闲中断问题的背景、解析、解决方案和个人观点,相信读者对该问题已有了全面、深刻和灵活的理解。

STM32Cube学习之五:定时器中断

STM32Cube学习之五:定时器中断假设已经安装好STM32CubeMX和STM32CubeF4支持包。

Step1.打开STM32CubeMX,点击“New Project”,选择芯片型号,STM32F407ZETx。

Step2.在Pinout界面下配置PF9,PF10为输出模式,并输入用户标签LED0,LED1。

Step3.配置TIM1,使用内部时钟源。

Step4.配置时钟树,在此使用默认值,16MHz。

Step5.配置TIM1参数和GPIO的参数。

在configuration界面中点击TIM1按钮,可以进入参数配置界面。

在Parameter Settings页配置预分频系数为15999,计数周期(自动加载值)为999,定时器溢出频率就是16MHz/(15999+1)/(999+1) = 1Hz。

在NVIC页面使能TIM1的更新中断。

在configuration界面中点击GPIO按钮,配置GPIO的上拉电阻。

在此GPIO配置默认即可。

Step6.生成源代码。

点击生成源代码按钮。

在设置界面中输入工程名,保存路径,工程IDE类型,点OK即可。

生成代码完成后可直接打开工程。

弹出如下对话框时,如果已经安装了F4的支持包,则点击OK关闭。

如果没有安装,则点击界面中的/...链接,找到芯片的支持包,然后安装。

关闭后面的界面。

点击“是”,然后选择芯片型号。

可以在搜索框中输入关键字,加快选择速度。

Step7.添加功能代码。

在main文件/* USER CODE BEGIN 4 */和/* USER CODE END 4 */注释之间加入下面代码。

在main函数的while(1)之前启动TIM1并使能其中断功能。

至此,完成整个工程。

编译下载,现象就是LED0和LED1同步循环闪烁,亮1秒灭1秒。

特别说明:CubeMX生成的MDK工程已经包含了配置中用到的外设相关文件,如下图:打开stm32f4xx_hal_tim.c,并点击右键,选择相应条目即可打开stm32f4xx_hal_tim.h文件,在HAL_开头的函数中,找到使能定时器中断的函数,如下图:定时器周期中断回调函数,在1304行。

STM32按键中断(HAL库版)

STM32按键中断(HAL库版)
本文将介绍如何使用STM32F4的IO口作为中断触发源,通过串口显示按键被按下的日志。

一、运用到的资源、工具:
1.1开发板芯片STM32F407,PI9作为外部中断源、USART3串口向屏幕传输信息
1.2编译工具:MDK-ARM V5(keil5)
1.3辅助工具:STM32CubeMX
二、硬件设计
2.1原理图:
三、软件设计
3.1STM32cubeMX配置工程文件
选择Key1作为外部中断源、选择中断触发方式为下降沿触发、并设置中断优先级分组选择优先级
使能USART3串口配置为异步通信
最后生成工程文件
3.2串口输出重定向(重写fputc函数)
int fputc(int ch, FILE *p)
{
while(!(USART3->SR & (1 << 7)));USART3->DR = ch;
return ch;
}
3.3在中断回调函数中,打印KEY1 DOWN\n
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == GPIO_PIN_9)
{
HAL_Delay(40);
if(HAL_GPIO_ReadPin(GPIOI, GPIO_PIN_9) == 0)
{
printf("KEY1 DOWN\n");
}
}
}
四、代码及运行结果
4.1运行结果按下KEY1、打印一次KEY1 DOWN。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.为什么需要中断?(问题的引入)
2.ARMv7-m异常处理
3.STM32F4xx中断处理逻辑(总概述图)
4.启动文件及中断处理函数实现
5.外部中断
STM32F4的每个IO都可以作为外部中断输入。

STM32F4的中断控制器支持23个外部中断/事件请求:
EXTI线0~15:对应外部IO口的输入中断。

EXTI线16:连接到PVD输出。

EXTI线17:连接到RTC闹钟事件。

EXTI线18:连接到USB OTG FS唤醒事件。

EXTI线19:连接到以太网唤醒事件。

EXTI线20:连接到USB OTG HS(在FS中配置)唤醒事件。

EXTI线21:连接到RTC入侵和时间戳事件。

EXTI线22:连接到RTC唤醒事件。

对于每个外部中断线可以独立的配置触发方式(上升沿,下降沿或者双边沿触发),触发/屏蔽,专用的状态位。

STM32F4供IO使用的中断线只有16个,但是STM32F4xx系列的IO口多达上百个,STM32F407ZET6 共有9组IO,如何中断线对应呢?
GPIOx.0映射到EXTI0
GPIOx.1映射到EXTI1

GPIOx.15映射到EXTI15
注意:一条中断线的在同一时间只能被一个IO口映射。

SYSCFG 相关寄存器
(1)SYSCFG_EXTICR1
SYSCFG 外部中断配置寄存器 1 ,偏移地址:0x08,复位值:0x0000 。

位31:16 保留,必须保持复位值。

位15:0 EXTIx[3:0]:EXTI x 配置(x = 0 到3)(EXTI x configuration (x = 0 to 3)) 这些位通软件写入,以选择EXTIx 外部中断的源输入。

0000:PA[x] 引脚
0001:PB[x] 引脚
0010:PC[x] 引脚
0011:PD[x] 引脚
0100:PE[x] 引脚
0101:PF[C] 引脚
0110:PG[x] 引脚
0111:PH[x] 引脚
1000:PI [x] 引脚
(2)SYSCFG_EXTICR2
SYSCFG 外部中断配置寄存器 2,偏移地址:0x0C,复位值:0x0000。

位31:16 保留,必须保持复位值。

位15:0 EXTIx[3:0]:EXTI x 配置(x = 4 到7)(EXTI x configuration (x = 4 to 7)) 这些位通过软件写入,以选择EXTIx 外部中断的源输入。

0000:PA[x] 引脚
0001:PB[x] 引脚
0010:PC[x] 引脚
0011:PD[x] 引脚
0100:PE[x] 引脚
0101:PF[x] 引脚
0110:PG[x] 引脚
0111:PH[x] 引脚
1000:PI [x] 引脚
(3)SYSCFG_EXTICR3
SYSCFG 外部中断配置寄存器 3,偏移地址:0x10,复位值:0x0000。

位31:16 保留,必须保持复位值。

位15:0 EXTIx[3:0]:EXTI x 配置(x = 8 到11)(EXTI x configuration (x = 8 to 11)) 这些位通过软件写入,以选择EXTIx 外部中断的源输入。

0000:PA[x] 引脚
0001:PB[x] 引脚
0010:PC[x] 引脚
0011:PD[x] 引脚
0100:PE[x] 引脚
0101:PF[x] 引脚
0110:PG[x] 引脚
0111:PH[x] 引脚
1000:PI [x] 引脚
(4)SYSCFG_EXTICR4
SYSCFG 外部中断配置寄存器 4,偏移地址:0x14,复位值:0x0000。

位31:16 保留,必须保持复位值。

位15:0 EXTIx[3:0]:EXTI x 配置(x = 12 到15)(EXTI x configuration (x = 12 to 15)) 这些位通过软件写入,以选择EXTIx 外部中断的源输入。

0000:PA[x] 引脚
0001:PB[x] 引脚
0010:PC[x] 引脚
0011:PD[x] 引脚
0100:PE[x] 引脚
0101:PF[x] 引脚
0110:PG[x] 引脚
0111:PH[x] 引脚
注意:PI[15:12] 未使用。

EXTI相关寄存器:
(1)EXTI_IMR
中断屏蔽寄存器,偏移地址:0x00,复位值:0x0000 0000。

位31:23 保留,必须保持复位值。

位22:0 MRx:x 线上的中断屏蔽(Interrupt mask on line x)
0:屏蔽来自x 线的中断请求
1:开放来自x 线的中断请求
(2)EXTI_EMR
事件屏蔽寄存器,偏移地址:0x04,复位值:0x0000 0000。

位31:23 保留,必须保持复位值。

位22:0 MRx:x 线上的事件屏蔽(Event mask on line x)
0:屏蔽来自x 线的事件请求
1:开放来自x 线的事件请求
(3)EXTI_RTSR
上升沿触发选择寄存器,偏移地址:0x08,复位值:0x0000 0000。

位31:23 保留,必须保持复位值。

位22:0 TRx:线x 的上升沿触发事件配置位(Rising trigger event configuration bit of line x) 0:禁止输入线上升沿触发(事件和中断)
1:允许输入线上升沿触发(事件和中断)
注意:外部唤醒线配置为边沿触发时,在这些线上不能出现毛刺信号。

如果在向 EXTI_RTSR 寄存器写入值的同时外部中断线上产生上升沿,挂起位将被置位。

在同一中断线上,可以同时设置上升沿和下降沿触发。

即任一边沿都可触发中断。

(4)EXTI_FTSR
下降沿触发选择寄存器,偏移地址:0x0C,复位值:0x0000 0000
位31:23 保留,必须保持复位值。

位22:0 TRx:线x 的下降沿触发事件配置位(Falling trigger event configuration bit of line x) 0:禁止输入线下降沿触发(事件和中断)
1:允许输入线下降沿触发(事件和中断)
注意:外部唤醒线配置为边沿触发时,在这些线上不能出现毛刺信号。

如果在向 EXTI_FTSR 寄存器写入值的同时外部中断线上产生下降沿,挂起位不会被置位。

在同一中断线上,可以同时设置上升沿和下降沿触发。

即任一边沿都可触发中断。

(5)EXTI_SWIER
软件中断事件寄存器,偏移地址:0x10复位值:0x0000 0000。

位31:23 保留,必须保持复位值。

位22:0 SWIERx:线x 上的软件中断(Software Interrupt on line x) 当该位为“0”时,写“1”将设置EXTI_PR 中相应的挂起位。

如果在EXTI_IMR 和EXTI_EMR 中允许产生该中断,则产生中断请求。

通过清除EXTI_PR 的对应位(写入“1”),可以清除该位为“0”。

(6)EXTI_PR
挂起寄存器,偏移地址:0x14,复位值:未定义。

位31:23 保留,必须保持复位值。

位22:0 PRx:挂起位(Pending bit)
0:没有发生触发请求
1:发生了选择的触发请求
当在外部中断线上发生了选择的边沿事件,该位被置“1”。

在此位中写入“1”可以清除它,也可以通过改变边沿检测的极性清除。

相关文档
最新文档