STM32学习笔记整理之(2)——外部中断

发布者:知者如渊最新更新时间:2022-06-16 来源: eefocus关键字:STM32  外部中断  NVIC配置 手机看文章 扫描二维码
随时随地手机看文章

学习STM32也快一年了,现在工作的内容跟用的是STM32平台的,趁着年前工作量比较小,总结一下STM32的基础知识,不出意外的话将会连续发布完整的笔记整理,学习的时候主要是跟着野火教程学的,然后在整理出适合自己的笔记。

2.1 NVIC配置

1、中断分组

在配置优先级的时候,NVIC 只可以配置 16 种中断向量的优先级,抢占优先级和响应优先级的数量由一个 4 位的数字来决定,把这个 4 位数字的位数分配成抢占优先级部分和响应优先级部分。

有 5 组分配方式:

第0组:所有4位用来配置响应优先级。

第1组:最高1位配抢占优先级,低3位配响应优先级。2^1=2 种抢占优先级(0,1),2^3=8 种响应优先级,

第2组:2位配抢占优先级,2位配响应优先级。4种抢占优先级,4种响应优先级。

第3组:高3位配抢占优先级,1位配响应优先级。8 种抢占优先级,2种响应优先级。

第4组:所有4位配抢占优先级,16 种中断向量都是抢占属性,没有响应属性。


2、中断优先级

1、STM32中断向量有抢占属性和响应属性,编号越小,级别越高。

2、抢占,是指打断其他中断的属性,即因为具有这个属性会出现嵌套中断

3、响应,当两个中断向量的抢占优先级相同时,如两个中断同时到达,则先处理响应优先级高的中断


3、中断通道

中断服务函数的名字必须要与启动文件startup_stm32f10x_hd.s 中的中断向量表定义一致(以下是相对应的表)

 

中断通道 中断服务函数 中断线路 中断引脚

EXTI0_IRQn   EXTI0_IRQHandler  ; EXTI Line 0 PA0~PG0

EXTI1_IRQn   EXTI1_IRQHandler; EXTI Line 1 PA1~PG1

EXTI2_IRQn   EXTI2_IRQHandler          ; EXTI Line 2 PA2~PG2

EXTI3_IRQn   EXTI3_IRQHandler          ; EXTI Line 3 PA3~PG3

EXTI4_IRQn   EXTI4_IRQHandler          ; EXTI Line 4 PA4~PG4

EXTI9_5_IRQn   EXTI9_5_IRQHandler        ; EXTI Line 9..5

EXTI15_10_IRQn   EXTI15_10_IRQHandler ; EXTI Line 15..10


4、代码

static void NVIC_A11exti_inti(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);   //选择中断分组1

  NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;   //选择中断通道0
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//抢占式中断优先级设置
  NVIC_InitStructure.NVIC_IRQChannelSubPriority =0; //响应式中断优先级设置
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;   //使能中断
  NVIC_Init(&NVIC_InitStructure);
}


2.1 外部中断配置

1、使能 EXTIx 线的时钟和第二功能 AFIO 时钟

2、配置 EXTIx 线的中断优先级(NVIC)

3、配置GPIO引脚

4、配置为 EXTI模式和中断线路


void EXTI_PA0_inti(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //定义GPIO宏操作的结构体
EXTI_InitTypeDef EXTI_InitStructure;//定义EXTI宏操作的结构体
EXTI_ClearITPendingBit(EXTI_Line0);//清空中断标志

/*config the exitline clock and AFIO clock*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,ENABLE);//使能GPIO时钟


/*config the NVIC*/
NVIC_A11exti_inti();//配置中断


/*EXTI line gpio config*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;  //选定引脚号     
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;//上拉输入
GPIO_Init(GPIOA, &GPIO_InitStructure);//配置输出

/*EXYI line mode config*/
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);//选择中断引脚
EXTI_InitStructure.EXTI_Line = EXTI_Line0;//选择中断线路0
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//设置为中断请求,非事件请求
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿中断

EXTI_InitStructure.EXTI_LineCmd = ENABLE;//外部中断使能
EXTI_Init(&EXTI_InitStructure); 
}


2.1 服务函数

void EXTI0_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line0) != RESET) 

//uart_sendStr(USART1,"q ");
EXTI_ClearITPendingBit(EXTI_Line0);
}  
}


关键字:STM32  外部中断  NVIC配置 引用地址:STM32学习笔记整理之(2)——外部中断

上一篇:【STM32】SRAM启动
下一篇:HAL库对于中断的理解【STM32L051C8T6】

推荐阅读最新更新时间:2024-11-05 21:02

基于STM32的CMMB智能网络监测系统的设计与实现
中国移动多媒体广播(CMMB)是我国自主研发的、具有完全自主知识产权的移动多媒体广播标准。目前,全国各大城市的CMMB网络正在建设和完善当中,而CMMB信号的覆盖测试为网络优化和调整提供了重要的数据依据。数字电视广播网络的建设是一个长期复杂的过程,需要经过不断地调整和优化才能达到一个理想的效果。而只有有效、精确的网络覆盖测试才能为调整、优化提供可靠的依据。一个成熟稳定的CMMB网络覆盖测试系统,对于CMMB的发展具有重大意义。因此,有必要设计一款针对CMMB网络的覆盖测试系统。 本设计基于高性能单片机STM32和GPRS无线通信方案实现了对测试点CMMB网络覆盖情况的实时监测,并利用GPS接收器将测试终端的地理位子信息上传到服务器
[单片机]
基于<font color='red'>STM32</font>的CMMB智能网络监测系统的设计与实现
stm32入门笔记(二)DMA接受中断的问题
在32的点子哥的例程当中,我发现DMA的例程,竟然是没有写DMA的接受的中断问题,这是一件让人很烦恼的问题。 于是我想,能不能自己写一个DMA的接受中断。 然后有了这样的一段中断函数的代码: void DMA1_Channel2_IRQHandler(void) {undefined if(DMA_GetITStatus(DMA1_FLAG_TC3)==SET) {undefined DMA_ClearFlag(DMA1_FLAG_GL3); } } 那么问题就会出现啦,你会发现,标志位总是没有置位。 那么为什么了? 因为DMA的发送是空闲中断,标志位。 而接受中断标志位则是
[单片机]
STM32烧录出现The core is locked up的解决办法
出现问题: STM32的RT-thread工程,编译成功,烧录出现警告:The core is locked up,尝试控制台显示给出的两种办法,依然无法解决 问题出现的原因: 在RT-thread Studio中创建RT-thread的STM32工程。在使用CubeMX配置后,编译出现很多报错,为了解决报错,我们需要把CubeMX生成的一些文件排除构建,由于我学得不精和失误操作,误把STM32的启动文件排除构建,而导致以上问题的出现。 解决办法: 在“导航器”视图窗口中,找到STM32的启动文件,将其添加构建。
[单片机]
<font color='red'>STM32</font>烧录出现The core is locked up的解决办法
STM32在MDK下的一种通用建立库函数工程的方法(标准库)
物料准备 MDK4或者(MDK5+Legacy支持包) ST官方下载的库文件(STM32F10x_StdPeriph_Lib_V3.5.0) 下载地址 http://pan.baidu.com/s/1cyxwXS 库函数主要文件夹简介 需要的用的库文件都在STM32F10x_StdPeriph_Lib_V3.5.0Libraries文件夹下,它又包含了以下两个文件夹 CMSIS(一些核心和库文件代码,CMSIS主要代码) CM3DeviceSupportSTSTM32F10x文件夹 system_stm32f10x.c(STM32F10x CMSIS Cortex-M3设备访问层的系统源文件) system_stm32f10
[单片机]
<font color='red'>STM32</font>在MDK下的一种通用建立库函数工程的方法(标准库)
stm32时钟相关
我在原创的基础又从另一位博主处 引用 了一些内容。 时钟系统是处理器的核心,所以在学习STM32所有外设之前,认真学习时钟系统是必要的,有助于深入理解STM32。 下面是从网上找的一个STM32时钟框图,比《STM32中文参考手册》里面的是中途看起来清晰一些: 重要的时钟:PLLCLK,SYSCLK,HCKL,PCLK1,PCLK2 之间的关系要弄清楚; 1、HSI:高速内部时钟信号 stm32单片机内带的时钟 (8M频率) 精度较差 2、HSE:高速外部时钟信号 精度高 来源(1)HSE外部晶体/陶瓷谐振器(晶振) (2)HSE用户外部时钟 3、LSE:低速外部晶体
[单片机]
<font color='red'>stm32</font>时钟相关
STM32入门学习之DMA(STM32F030F4P6基于CooCox IDE)
本代码基于STM32F030F4P6,用例为DMA控制串口发送,需要注意以下几点 1、注意串口IO配置,包括IO配置和复用功能选择 2、STM32F030系列的DMA不支持外设到外设,STM32F030只有DMA1,没有DMA2 3、注意不同外设对应不同DMA通道,而且不同芯片的通道也不一定相同,注意看数据手册 直接代码如下: #include stm32_lib/inc/stm32f0xx_rcc.h #include stm32_lib/inc/stm32f0xx_gpio.h #include stm32_lib/inc/stm32f0xx_usart.h #include stm32_lib/in
[单片机]
STM32 学习十 Flash下载与调试
一、启动模式 三、FLASH下载与调试 选择调试模式: 1.RAM调试:0x20000000 2.FLASH调试:0x8000000 CM3的Flash烧写次数:1000次 安装Setup_JLinkARM_V408h 连接j-Link-ARM到电脑。我使用虚拟机做开发,这时候需要把USB连接到虚拟机上。 把开发板连接到jLink并上电。 下载操作: 1.新增下载模式 2.设置Options 这里注意与芯片参数要一致。 下载: 下载结束,操作成功。
[单片机]
<font color='red'>STM32</font> 学习十 Flash下载与调试
STM32 ADC
STM32 ADC 简介 STM32 拥有 1~3 个 ADC (STM32F101/102 系列只有 1 个 ADC) ,这些 ADC 可以独立使用,也可以使用双重模式(提高采样率)。STM32 的 ADC 是 12 位逐次逼近型的模拟数字转换器。它有 18 个通道,可测量 16 个外部和 2 个内部信号源。各通道的 A/D 转换可以单次、连续、扫描或间断模式执行。 ADC 的结果可以左对齐或右对齐方式存储在 16 位数据寄存器中。 模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。 STM32F103 系列最少都拥有 2 个 ADC,我们选择的 STM32F103ZET 包含有 3 个 ADC。STM32
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved