STM32 关于外部中断线、中断源和中断服务函数的问题

发布者:老王古玩店最新更新时间:2021-10-09 来源: eefocus关键字:STM32  外部中断线  中断源  中断服务函数 手机看文章 扫描二维码
随时随地手机看文章

中断线问题:

上图可以看出,PA0、PB0...PG0共用的EXTI0中断线,PA1、PB1...PG1共用的EXTI1中断线,也就是 编程里面的(如下图库文件),对应16个中断线,后面三个是专用的中断线,不做讨论。

有人要问,假设:我设置的引脚是PB9和PE9都开启外部中断怎么办?小编告诉你,这还真办不了,我实测过。配置函数的时候后覆盖之前的函数的(如下图所示)

如果这样配置的话,会出现出货光电1的初始化覆盖掉编码盘的初始化,说白了就是编码盘的设置被覆盖掉了,结果是外部中断  出货光电1管脚会触发而编码盘就不起作用了,这也是STM32其中一个问题所在吧! 反过来,结果是外部中断  编码盘 管脚会触发 而 出货光电1管脚就不起作用了!


中断源问题:


  GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource0); //设置GPIOX中断源以及哪个中断脚

  EXTI_InitStructure.EXTI_Line = EXTI_Line0;//中断线

  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//设置为外部中断模式

  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;//上升沿触发

  EXTI_InitStructure.EXTI_LineCmd = ENABLE;//中断线使能

  EXTI_Init(&EXTI_InitStructure);//配置使能


中断服务函数:


简单的配置:


void EXTI15_10_IRQHandler(void)//中断服务函数,如果中断线是10-15。

{

if(EXTI_GetITStatus(EXTI_Line10) != RESET) 

{

Beep_ON;SOFT_DELAY; Beep_OFF;

EXTI_ClearITPendingBit(EXTI_Line10);     

}  

if(EXTI_GetITStatus(EXTI_Line11) != RESET) 

{

Beep_ON;SOFT_DELAY; Beep_OFF;

EXTI_ClearITPendingBit(EXTI_Line11);     

}  

if(EXTI_GetITStatus(EXTI_Line12) != RESET) 

{

Beep_ON;SOFT_DELAY;Beep_OFF;

EXTI_ClearITPendingBit(EXTI_Line12);     

}  

 

void EXTI9_5_IRQHandler(void)//中断服务函数,如果中断线是5-9。

{

if(EXTI_GetITStatus(EXTI_Line5) != RESET) 

{

Beep_ON;SOFT_DELAY; Beep_OFF;

EXTI_ClearITPendingBit(EXTI_Line5);     

}  

if(EXTI_GetITStatus(EXTI_Line8) != RESET) 

{

Beep_ON;SOFT_DELAY; Beep_OFF;

EXTI_ClearITPendingBit(EXTI_Line8);     

}  

if(EXTI_GetITStatus(EXTI_Line9) != RESET) 

{

Beep_ON;SOFT_DELAY;Beep_OFF;

EXTI_ClearITPendingBit(EXTI_Line9);     

}  


每个中断服务函数代表一个或者一类,上面的代码说明:只要是中断线在EXTI_Line   10-15 的,中断服务函数就只有一个,但是由于中断线只有唯一性,可以在中断服务函数里面判断到底是哪个中断线触发,这也保证不会误触发或者是占线的一系列的问题。


如上图,外部中断分为几类:如下:


DCD     EXTI0_IRQHandler           ; EXTI Line 0//只是管脚的中断服务函数,还有串口等等中断服务函数

  DCD     EXTI1_IRQHandler           ; EXTI Line 1             

  DCD     EXTI2_IRQHandler           ; EXTI Line 2

  DCD     EXTI3_IRQHandler           ; EXTI Line 3

  DCD     EXTI4_IRQHandler           ; EXTI Line 4

  DCD     EXTI9_5_IRQHandler         ; EXTI Line 9..5

  DCD     EXTI15_10_IRQHandler       ; EXTI Line 15..10

所以在配置外部中断服务函数或者其他中断服务函数的问题时,参照:库启动件 startup_stm32f10x_hd.s

关键字:STM32  外部中断线  中断源  中断服务函数 引用地址:STM32 关于外部中断线、中断源和中断服务函数的问题

上一篇:STM32_按键中断
下一篇:stm32中断服务函数c语言,STM32 外部中断详解

推荐阅读最新更新时间:2024-11-13 12:29

STM32入门系列-开发工具keil5安装
主要介绍如下三部分内容: keil5软件获取 keil5安装 安装STM32芯片包 软件获取 可以通过搜索引擎搜索关键字“KEIL5下载”,找到其官方网站http://www.keil.com。我们这里使用MDK5.14版本,如果后面出了更高的版本选择性升级即可,不过也没有必要什么都追求最新的,这一个软件用着习惯就行。 登录armkeil官方网站,网站首页有软件下载连接,在这里我们选择MDK-Arm。会让你先注册,注册完成之后就可以开始下载了。 软件安装 安装此软件时一定要注意以下几点: 安装路径不能带中文,必须是英文路径。 安装目录不能跟51的KEIL或者KEIL4冲突,三者目录必须分开。 KE
[单片机]
<font color='red'>STM32</font>入门系列-开发工具keil5安装
stm32输入捕获,捕获高电平
输入捕获就是用定时器检测引脚上的电平时间,可以检测高电平时间和低电平时间,然后可以算引脚上信号的频率和占空比。 基本思路就是利用定时器的输入捕获功能。 定时器捕获到高电平或低电平就会进入捕获中断 例如: 我们要捕获高电平时间 0 设置定时器计数频率和装载值,一般设置1MHz,65535 1 设置定时器捕获为高电平捕获 2 进入捕获中断后,获取CNT计数值或CCRx值,定时器捕获到电平后会把CNT的值保存到CCRx。 设置成低电平捕获。 3 再次进入捕获中断,获取CNT计数值-上次的CNT值=总高电平时间。 设置成高电平捕获。 4 重复2-3即可完成下一次捕获。当然还要考虑溢出的情况,
[单片机]
<font color='red'>stm32</font>输入捕获,捕获高电平
创建第一个stm32项目工程常见错误警告
.ObjectsLightOneLed.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f10x_hd.o). 意思是SystemInit这个函数未定义(在startup_stm32f10x_hd.o引用)。 在外部(其他任何.c文件里面)定义SystemInit这个函数,哪怕是个空函数也可以。 void SystemInit() { } usermain.c(26): warning: #1-D: last line of file ends without a newline int main() {
[单片机]
STM32串口IAP实验中的地址问题
if(((*(vu32*)(0X20001000+4))&0xFF000000)==0x08000000)和if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000)分析 首先要清楚:0x8000000是Flash的起始地址,0x20000000是SRAM的起始地址。jump2app()是一个虚拟函数(函数指针) (*(vu32*)(0X20001000+4))== (*(__IO uint32_t*)(0X20001000+4)) ==(*(volatile unsigned int*)(0X20001000+4)) (*(vu32*)(0X20001000+4)) 通过内存寻
[单片机]
<font color='red'>STM32</font>串口IAP实验中的地址问题
Event Recoder调试组件在stm32上的使用
本文目标:Event_Recoder调试组件在stm32上的使用 按照本文的描述,应该可以在你所处的硬件上跑通代码。 先决条件:装有编译和集成的开发环境,比如:Keil uVision5。 板子硬件要求:无,属于调试功能。 起源 因为做产品开发,设计东西有时候考虑得多,mcu的并没有多余的串口供使用调试,在调试一些初期进行验证时,必要的调试的打印信息是需要的。 Event Recoder调试组件简介 嵌入式的Event_Recoder调试组件是一种可以在MDK开发环境下使用的高级调试工具,它可以记录软件运行的一些标志信息,并以图形化的形式显示出来。它可以帮助你了解和分析内部操作,支持Keil RTX操作系统调试以及MDK自带的
[单片机]
Event Recoder调试组件在<font color='red'>stm32</font>上的使用
漫谈STM32的GPIO
简介:单片的输入输出不叫GPIO,仅仅是个io,稍微复杂点的就是串口,至于后面那些增强的1t的带da的单片机,都不属于入门学习范围.那些东西都是为了低成本而存在,对学习没有任何作用.只要初学者入门了,所有片内外设都非常简单的搞定.本文是一片基础学习文章.入门者的精神食粮. 理解gpio不仅仅是会配置寄存器,因为好多人根本不知道寄存器如何配置.如果不信的话那回答我这个问题,stm32的io频率到底该配置成多少Mhz? 上面这张图是来自stm32的中文版手册.我对这些模块进行了简单的标注.下面我就从外到内进行分析信号的流向以及每一部分存在/屏蔽的意义. 先看上半部分,就是io的I,input,输入功能.信号从io引脚流入,
[单片机]
漫谈<font color='red'>STM32</font>的GPIO
stm32定时器2输出10KHZ波形
紧接上一篇文章 /*! @function ******************************************************************************** PRE :RCC_Configuration ¹ : ---------------------------------------------------------------------------------- ² : : --------------------------------------------------------------------
[单片机]
意法半导体推出STM32微处理器专用高集成度电源管理芯片
优化的集成化电源管理芯片,内置保护功能,驱动MPU及外设 2024 年 10 月 18 日, 中国——意法半导体 STM32MP2 微处理器配套电源管理芯片STPMIC25 现已上市。 新产品在一个便捷封装内配备 16 个输出通道,可为MPU的所有电源轨以及系统外设供电,完成硬件设计仅需要少量的外部滤波和稳定功能组件。评估板STEVAL-PMIC25V1现已上市,开发者可立即开始开发应用。 新电源管理芯片包含七个 DC/DC 降压转换器和八个低压差 (LDO) 稳压器,还有一个额外的 LDO稳压器为系统 DDR3 和 DDR4 DRAM 提供参考电压 (Vref) 。在八个 LDO稳压器中有一个3.3V 通道专用稳压
[嵌入式]
意法半导体推出<font color='red'>STM32</font>微处理器专用高集成度电源管理芯片
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
更多往期活动

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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