关于STM32的外部引脚中断的问题

今天想用自己以前的比较干净的工程模板做一个东西,,,,,,,在添加上引脚中断的时候,,突然想知道自己配置的中断优先级是否正确执行,,,,,

以前刚学习32的时候测试过是可以的,,不过今天发现了一个大问题,,,,,,,,,

大家都知道32有抢占式优先级和响应式优先级,,,常理来讲,,,,,,

如果两个的抢占式优先级不相同,谁的级别高就优先执行谁,,,,级别高的可以打断级别低的

如果两个的抢占式优先级相同,谁先来就先执行完谁,,如果同时到来,那就看谁的响应式优先级高就先执行谁,,,,,,

那只是常理来讲,,,,,,,,,,,,,,以前也是按照常理来讲,,,,,,做程序,,,不过今天发现一个,,,,,,特殊来讲

今天我用PB0  和  PB2做实验---

第一种,,,,,,

我现在把PB0 和 PB2短接在一块,,用一根线连接,,然后把这根线在低电平和高电平之间切换

11111111111说明,,上拉模式下,下降沿触发,,抢占式优先级相同,,响应式优先级不相同,,谁的响应式优先级高就执行谁,,,,,,,,符合常规

然后,,改一下

因为,因为

22222222222222 说明,,上拉模式下,上升沿触发,,抢占式优先级相同,,响应式优先级不相同,,,,,,,,,,触发时不符合常规

然后我再改一下

3333333333333说明,,上拉模式下,上升沿触发,,抢占式优先级不相同,,响应式优先级不相同,,,谁的抢占式优先级别高就先执行谁,,,,,,,符合常规

然后我再改一下

444444444444444 说明,,上拉模式下,下降沿触发,,抢占式优先级不相同,,响应式优先级不相同,,,谁的抢占式优先级别高就先执行谁,,,,,,,符合常规

我再改一下

5555555555555555 说明,,下拉模式下,下降沿触发,,抢占式优先级相同,,响应式优先级不相同,,,谁的响应式式优先级别高就先执行谁,,,,,,,符合常规

我再改

6666666666666666666 说明,,下拉模式下,上升沿触发,,抢占式优先级相同,,响应式优先级不相同,,,,,,,,执行的不符合常规

我再改一下抢占式优先级

然后在交换一下触发方式

说明,,上拉模式下,下降沿触发,,抢占式优先级相同,,响应式优先级不相同,,谁的响应式优先级高就执行谁,,,,,,,,符合常规

说明,,上拉模式下,上升沿触发,,抢占式优先级相同,,响应式优先级不相同,,,,,,,,,,触发时不符合常规

说明,,上拉模式下,上升沿触发,,抢占式优先级不相同,,响应式优先级不相同,,,谁的抢占式优先级别高就先执行谁,,,,,,,符合常规

说明,,上拉模式下,下降沿触发,,抢占式优先级不相同,,响应式优先级不相同,,,谁的抢占式优先级别高就先执行谁,,,,,,,符合常规

说明,,下拉模式下,下降沿触发,,抢占式优先级相同,,响应式优先级不相同,,,谁的响应式式优先级别高就先执行谁,,,,,,,符合常规

说明,,下拉模式下,上升沿触发,,抢占式优先级相同,,响应式优先级不相同,,,,,,,,执行的不符合常规

说明,,下拉模式下,上升沿触发,,抢占式优先级不相同,,响应式优先级不相同,,,谁的抢占式优先级别高就先执行谁,,,,,,,符合常规

说明,,下拉模式下,下降沿触发,,抢占式优先级不相同,,响应式优先级不相同,,,谁的抢占式优先级别高就先执行谁,,,,,,,符合常规

不知道亲们遇没遇到这样的问题,,,,,,,, 这是我的程序

链接:http://pan.baidu.com/s/1pLzxnN9 密码:mbbl

上面的两条不符合常规不知道是什么原因,,,现在就是要注意额,,,,,,,,

上拉配下降,,,,下降还下降,,,,,,,,,,,,,,,,,,,,,,,,,,,

时间: 2024-08-24 04:12:15

关于STM32的外部引脚中断的问题的相关文章

外部SRAM实验,让STM32的外部SRAM操作跟内部SRAM一样(转)

源:外部SRAM实验,让STM32的外部SRAM操作跟内部SRAM一样 前几天看到开源电子论坛(openedv.com)有人在问这个问题,我特意去做了这个实验,这样用外部SRAM就跟用内部SRAM一样,不用自己去申请内存,也不用考虑什么内存地址,一切让编译器自己去解决. 废话不多说,我直接拿原子哥的战舰开发板库函数版的外部SRAM实验来修改.在库函数的system_stm32f10x.c这个初始化文件当中其实就已经有外部SRAM的初始化,我们只要增加“#define DATA_IN_ExtSRA

3-MSP430引脚中断

为了写一篇文章做铺垫--提醒着自己,,,,,, 这两天一直在寻找 #pragma vector = PORT1_VECTOR __interrupt void P1_Interrupt()//P1口中断函数 { } 对于这两句话的解释,最起码让自己感觉能说服自己 看了好多后自己的理解 #pragma vector = PORT1_VECTOR 通俗来讲这句话是告诉C编译器,你下面的函数是P1口的中断函数,P1口有中断发生时就进入下面这个函数 __interrupt void P1_Interru

STM32之外部中断控制

一.STM32外部中断 1.STM32外部中断结构图 如上图所示: 主要包括四个环节,GPIO.AFIO.EXTI.NVIC. 2.STM32外部中断软件配置步骤 ① 配置NVIC控制器 ② 使能GPIO和AFIO时钟 ③ 配置GPIO (复用功能的输入输出配置) ④ 配置AFIO (选定要配置为EXTI的I/O口线) ⑤  EXTI控制器的配置 配置寄存器就好像是我们在更改STM32的硬件电路,让它们处于一种新的工作状态--外部中断模式. 二.STM32外部中断软件配置细节 以PA0引脚的外部

STM32之外部中断

图1.0 图1.1 中断控制器支持23条中断线,其中16条是IO管脚中断线,分别是EXTI0~EXTI15:  图 1.2 另外七根中断线如下图: 中断线和管脚的对应关系:EXTI0~EXTI15 和GPIOx0~15一一对应,x:A~G. 每条中断线控制着7个管脚的中断跳变沿的输入,通过寄存器SYSCFG_EXTICRx(x:1~4)来进行多选1. 举例:中断线0,即EXTI0控制着7个管脚的中断源输入,分别是PA0,PB0,PC0,PD0,PE0,PF0,PG0. 外部中断寄存器配置SYSC

stm32定时器外部计数

当使用外部计数时,要用到ETR引脚. 并且使用这两个函数 TIM_ETRClockMode2Config(TIM4,TIM_ExtTRGPSC_OFF,TIM_ExtTRGPolarity_NonInverted,0);//时钟源为外部触发 TIM_SetCounter(TIM4,0);//计数器初始计数从0开始

STM32串口之空闲中断

NBiot模块一般都是串口接口,使用AT指令集,对接中国移动onenet平台.先用串口助手去测试,流程测试OK之后需要在MCU上重新写一遍. STM32串口 IDLE中断 IDLE其实是空闲的意思.IDLE中断叫空闲中断,不叫帧中断.那么什么叫空闲,怎么定义空闲呢?在实际发送数据的时候,比如一串字符串,我们会采用如下方式发送 void uart1_putc(char dat) { SBUF = dat; while (!TI); TI = 0; } void uart1_puts_n(char

TI CC2541的引脚中断.

分别是P0, P1, P2中断使能.

STM32 Timer (2) 定时器中断代码框架

3. 代码框架 3.1 分频系数的计算 x1/x2 /N(预分频) APB1时钟------->F(CK_PSC)--------------->CK_CNT 如果APB1的分频系数为1, CK_INT的倍频系数就是x1 如果APB1的分频系数不为1, CK_INT的倍频系数就是x2   STM32F1(MHz) STM32F4(MHz) STM32F7(MHz) SYSCLK 72 168 216 AHB 72 168 216 APB1 (AHB/4) 18 42 54 CK_INT(x1/

STM32的串口空闲中断及接受数据

源程序: IO口定义: void GPIO_ConfiguraTIon(void) { GPIO_InitTypeDef GPIO_InitStructure; /* 第1步:打开GPIO和USART部件的时钟 */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); /* 第2步:将US