HAL库对于中断的理解【STM32L051C8T6】

发布者:快乐旅行最新更新时间:2022-06-17 来源: eefocus关键字:HAL库  中断 手机看文章 扫描二维码
随时随地手机看文章

我们先看一张图:

我们由两张原理图可知, 按键如果按下去就触发中断要使用下降沿触发,如果松开按钮后在进行中断即可以上升沿触发; 


我们由【STM32L05C8T6】的HAL库文件可知,


EXTI0_1_IRQ 的线为 【1:0】;


EXTI2_3_IRQn的线为【2:   3】;


 


EXTI4_15_IRQn的线为【4:15】;


我们按键上


K1: PB2    // 最后的 2 对应的线为 EXTI2_3_IRQn


K2:PB1    // 最后的 1 对应的线为 EXTI0_1_IRQ 


K3:  PB0    // 最后的 0 对应的线为 EXTI0_1_IRQ 


K4:   PA7    // 最后的 7 对应的线为 EXTI4_15_IRQn


上面的那个对应清楚了,那么我们的中断函数就可以这样写了:


void EXTI0_1_IRQHandler(void)

{

    //确保是否产生了 EXTI Line 中断

 

    if (__HAL_GPIO_EXTI_GET_IT(KEY2_PIN) != RESET) {

 

  

        /*//

                    这里放你要中断执行的函数

        // */

 

        //清除中断标志位

        __HAL_GPIO_EXTI_CLEAR_IT(KEY2_PIN);

    }

 

    //确保是否产生了 EXTI Line 中断

 

    if (__HAL_GPIO_EXTI_GET_IT(KEY3_PIN) != RESET) {

 

        /*//

          这里放你要中断执行的函数

        // */

 

        //清除中断标志位

        __HAL_GPIO_EXTI_CLEAR_IT(KEY3_PIN);

        }

    }

 

 

void EXTI2_3_IRQHandler(void)

{

    //确保是否产生了 EXTI Line 中断

 

    if (__HAL_GPIO_EXTI_GET_IT(KEY1_PIN) != RESET) {

 

    /*//

                    这里放你要中断执行的函数

     // */

 

 

    //清除中断标志位

    __HAL_GPIO_EXTI_CLEAR_IT(KEY1_PIN);

    }

}

 

 

void EXTI4_15_IRQHandler(void)

{

    //确保是否产生了 EXTI Line 中断

 

    if (__HAL_GPIO_EXTI_GET_IT(KEY4_PIN) != RESET) {

 

 

    /*//

          这里放你要中断执行的函数

    // */

 

                

    //清除中断标志位

    __HAL_GPIO_EXTI_CLEAR_IT(KEY4_PIN);

    }

}

关键字:HAL库  中断 引用地址:HAL库对于中断的理解【STM32L051C8T6】

上一篇:STM32学习笔记整理之(2)——外部中断
下一篇:STM32踩坑记录(1):编写代码时遇到STM32无法进入外部中断的原因及解决方法

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

stm32 freertos 之串口中断
一、中断处理函数 void USART1_IRQHandler(void) { BaseType_t xHigherPriorityTaskWoken; xHigherPriorityTaskWoken = pdFALSE; u8 cChar; if(USART_GetITStatus (USART1,USART_IT_RXNE)!=RESET) { cChar=USART_ReceiveData(USART1); xQueueSendToBackFromISR (xQueueRx,&cChar,&xHigherPriorityTaskWoken); portYIELD_FROM_ISR(xHigherPri
[单片机]
stm32F429中断优先级相关知识
最近用到f429比较多,故对相关中断知识点作下梳理,随时更行。。。 1 .systick的优先级到底比外设高还是低呢? 1、只要内核的优先级可以配置,那么内核的优先级就不是一定比外设的高,而是要先比较软件优先级,如果软件优先级一样,那么就比较他们的硬件的中断编号,编号就是在中断向量表中的位置,越小,优先级越高。 2、以systick为例,在systick的固件库初始化函数:SysTick_Config(uint32_t ticks) 中,调用了NVIC_SetPriority (SysTick_IRQn, (1 __NVIC_PRIO_BITS) - 1); ,这里面把 systick的 优先级配置为 :1 4-1 = 15,这里
[单片机]
AVR128的程序——外部中断
#include iom128v.h #include macros.h #define uchar unsigned char #define uint unsigned int void main(void) { uchar i,temp; DDRA = 0XFF; PORTA = 0XFF; DDRC = 0XFF; PORTC = 0XFF; DDRF |= 0X0E; PORTF |= 0X0E; PORTF &= 0xF8; DDRB |= 0
[单片机]
s3c2440中断学习笔记
进入异常时cpu将做如下工作 1.将中断时pc的值copy到lr(此时pc的值为中断指令位置+8,所以返回的指令地址应该是当前pc值+4) 2.CPSR- SPSR_(irq)  (相当于bl跳转) 3.强制进入irq,ARM工作模式 4.跳转到异常制定的指令位置 进入异常时应该保护寄存器:stmdb sp!, { r0-r12,lr } 退出时恢复寄存器:    ldmia  sp!,  {r0-r12,pc}^   ^ :当 register list 中有pc寄存器时,表示执行指令后spsr中的值自动复制到cpsr中,如果没有pc寄存器是,^表示操作的是用户模式下的寄存器,而不是当前特权模式的寄存器,也就是说在特权模式下
[单片机]
PIC 中断 服务程序
中断服务程序有一个特殊的定义方法: void interrupt ISR(void)其中的函数名 ISR 可以改成任意合法的字母或数字组合,但其入口参数和返回参数类型必须是 void 型,亦即没有入口参数和返回参数,且中间必须有一个关键词 interrupt 中断函数可以被放置在原程序的任意位置。因为已有关键词 interrupt 声明,PICC 在最后进行代码连接时会自动将其定位到0x0004 中断入口处,实现中断服务响应。编译器也会实现中断函数的返回指令 retfie 。 一个简单的中断服务示范函数如下: void interrupt ISR(void) { //中断服务程序 if (T0IE &
[单片机]
STM32的串口中断配置
STM32的串口中断配置,也是很简单的. 首先是配置UART的GPIO口 /********************************************** * Name : UART1_GPIO_Configuration * Deion : Configures the uart1 GPIO ports. * Input : None * Output : None * Return : None **********************************************************/ void UART1_GPIO_Configuration(void) { GPIO_InitTyp
[单片机]
关于ARM2440中断源个数的一点想法
S3c2440支持多达36个内部中断源和24个外部中断源,分别使用内部终端屏蔽寄存器INTMSK和外部中断寄存器MSK进行屏蔽控制。其中,外部中断源通过GPIO以复用的方式成为内部中断源的一部分。 但是我们清楚,INTMSK是一个32位的寄存器,最多只能支持32中断,它是如何对应这么多中断的呢? 首先我们先看INTMSK对应的位。 INTERRUPT MASK (INTMSK) REGISTER (Continued) INT_ADC 0 = Service available, 1 = Masked 1 INT_RTC 0 = Service available, 1 = Masked 1 INT_SPI1 0 = Se
[单片机]
ARM-Linux s3c2440 之中断分析(三)
Linux通过以下函数来注册中断以及中断相关的入口函数handle,只有先注册IRQ,才能正常使用。 int set_irq_chip(unsigned int irq, structirq_chip *chip) static inline void set_irq_handler(unsigned intirq, irq_flow_handler_t handle) static inline void set_irq_chained_handler(unsignedint irq, irq_flow_handler_t handle) 实现的代码如下: for(irqno = IRQ_E
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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