Cortex-M3/M4内核NVIC及HAL库函数详解(4):使用HAL库配置外部中断

这篇具有很好参考价值的文章主要介绍了Cortex-M3/M4内核NVIC及HAL库函数详解(4):使用HAL库配置外部中断。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

0 工具准备

Keil uVision5
Cortex M3权威指南(中文)
Cortex M3与M4权威指南
stm32f407的HAL库工程
STM32F4xx中文参考手册

1 使用HAL库配置外部中断

前面我们已经熟悉了有关内核部分的寄存器配置,接下来我们结合stm32f407的GPIO外设,从实战角度进一步加深对这些寄存器的认识。

1.1 原理图分析

Cortex-M3/M4内核NVIC及HAL库函数详解(4):使用HAL库配置外部中断,单片机开发,ARM内核,stm32,ARM,中断,HAL库
我们这里使用PA0作为输入引脚,可以看到SW1未按下时为低电平,按下时为高电平。我们我们想要在SW1按下时触发中断,只需要配置PA0端口为上升沿触发即可。

1.2 初始化PA0

/**
 * @brief 初始化SW1中断
 * 
 */
void init_sw1_interrupt(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;

    // 使能GPIOA时钟
    __GPIOA_CLK_ENABLE();

    GPIO_InitStructure.Pin = GPIO_PIN_0;
    // 配置上升沿触发
    GPIO_InitStructure.Mode = GPIO_MODE_IT_RISING;
    GPIO_InitStructure.Pull = GPIO_NOPULL;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);

    // 设置中断优先级为(2,2)
    HAL_NVIC_SetPriority(EXTI0_IRQn, 2, 2);
    // 清中断标志
    __HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_0);
    // 使能中断
    HAL_NVIC_EnableIRQ(EXTI0_IRQn);
}

该函数操作步骤如下:
(1)使能GPIOA时钟
(2)设置PA0为浮空输入模式,上升沿触发
(3)初始化PA0
(4)设置中断优先级分组为2
(5)设置中断优先级为(2,2)
(6)清中断标志
(7)失能EXTI0中断请求(PA0的中断请求是映射到EXTI0上的)

1.3 编写中断服务函数

/**
 * @brief EXIT0中断服务函数
 * 
 */
void EXTI0_IRQHandler(void)
{
    // 查看是否产生了有效中断
    if (__HAL_GPIO_EXTI_GET_IT(GPIO_PIN_0) != RESET)
    {
        printf("SW1 press down\r\n");
        // 清除中断标志位
        __HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_0);
    }
}

进入中断服务函数的首要工作就是检查是否产生了符合预期的中断,如果是的话则执行相应的操作,最后清除中断标志。

1.4 中断测试

完成PA0的初始化后,我们手动按下KEY1,可以看到打印出了中断服务函数内的信息:
Cortex-M3/M4内核NVIC及HAL库函数详解(4):使用HAL库配置外部中断,单片机开发,ARM内核,stm32,ARM,中断,HAL库
至此,使用HAL库配置外部中断大功告成。文章来源地址https://www.toymoban.com/news/detail-821467.html

到了这里,关于Cortex-M3/M4内核NVIC及HAL库函数详解(4):使用HAL库配置外部中断的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【ARM Cortex-M 系列 1 -- Cortex-M0, M3, M4, M7, M33 差异】

    请阅读 【ARM Coresight | AMBA BUS| Armv8/v9 | GCC 专栏导读】 下篇文章:ARM Cortex-M 系列 2 – CPU 之 Cortex-M7 介绍 Cortex-M0/M0+ 介绍 Cortex-M0 是 ARM 公司推出的一款微控制器(MCU)核心。这个核心是基于 ARMv6-M 架构设计的, 只支持 56 条指 令的小指令集,大部分指令是 16 位指令, 是 ARM Cor

    2024年02月17日
    浏览(47)
  • 【ARM Cortex-M 系列 1 -- Cortex-M0, M3, M4, M7, M33, M35P 差异】

    请阅读 【ARM Coresight | AMBA BUS| Armv8/v9 | GCC 专栏导读】 下篇文章:ARM Cortex-M 系列 2 – CPU 之 Cortex-M7 介绍 Cortex-M0/M0+ 介绍 Cortex-M0 是 ARM 公司推出的一款微控制器(MCU)核心。这个核心是基于 ARMv6-M 架构设计的, 只支持 56 条指 令的小指令集,大部分指令是 16 位指令, 是 ARM Cor

    2024年02月05日
    浏览(45)
  • ARM Cortex-M3内核

    目录 ARM Cortex-M3内核 存储器系统 外设接口 时钟和电源管理 中断控制器 DMA控制器 STM32F1系列微控制器是一款基于ARM Cortex-M3内核的嵌入式芯片,其架构组成主要包括以下几个方面:  ARM Cortex-M3内核:STM32F1系列微控制器采用了ARM Cortex-M3内核,该内核是一种高性能、低功耗的32位

    2024年02月07日
    浏览(44)
  • ARM Cortex-M 内核调试相关

    推荐博文1: SWD协议通信的简单总结 根据《ARM Technical Reference Manual cortex_m3_r1p1_trm》和《Arm® Debug Interface Architecture Specification ADI v6.0.pdf》进行梳理。 Cortex-M3 处理器实现了ARM v7-M架构。这包括整个 16 位的Thumb指令集和基本的 Thumb-2 32位指令集架构。处理器无法执行ARM指令。 Thumb

    2024年02月03日
    浏览(48)
  • ARM Cortex-M3内核理解

    做一个对社会有用的人!不抱怨,不气馁! 目录 前言 1 ARM处理器家族 2 什么是ARM Cortex-M处理器 2.1 Cortex-M3 2.2 M3处理器到微控制器 2.3 ARM处理器的发展 2.4 Thumb ISA的架构版本 2.4.1 指令集的概念 2.5 软件开发流程  2.5.1 轮询 3、技术综述 3.1、Cortex-M3简介 3.1.1 处理器类型 3.1.2 指令

    2024年02月08日
    浏览(38)
  • FreeRTOS在Cortex-M系列内核中遇到的关于系统滴答中断的问题

    众所周知,在Cortex-M内核中,系统节拍由Systick时钟提供,当配置好系统滴答时钟后,每次时钟中断就会触发中断处理函数 xPortSysTickHandler(),   这部分主要是依靠  xTaskIncrementTick(), 来判断任务切换是否在此次系统时钟中断时被需要。如果是,则PendSV标记置位,等待触发PendS

    2024年02月08日
    浏览(45)
  • 中断相关操作函数HAL_NVIC_SetPriority()、HAL_NVIC_EnableIRQ()

    HAL_NVIC_SetPriority() 函数是一个用于 设置中断优先级的函数 ,其定义如下: 其中,参数含义如下: IRQn :指定要设置优先级的中断号,类型为IRQn_Type,定义在stm32f4xx.h头文件中; PreemptPriority :指定抢占优先级,取值范围为0~15,其中0表示最高优先级,15表示最低优先级; SubP

    2024年02月07日
    浏览(34)
  • SUB-1G SOC芯片DP4306F 32 位 ARM Cortex-M0+内核替代CMT2380F32

    DP4306F是一款高性能低功耗的单片集成收发机,集成MO核MCU,工作频率可覆盖200MHiz^ 1000MHz。 支持230/408/433/470/868/915频段。该芯片集成了射频接收器、射频发射器、频率综合器、GFSK调制器、GFSK解调器等功能模块。通过SPI接口可以对输出功率、频道选择以及数据包格式进行灵活配

    2024年02月07日
    浏览(40)
  • STM32 hal库 NVIC初始化函数梳理

    使用的是stm32f407vg,代码来源stm32cubemx。 已经配置了中断的是GPIOD_pin6和TIM2。  这个是STM32CubeMX里面NVIC的控制面板;其中最上面priority grope是优先级组,我设置的是4位抢占优先级,0位响应优先级,就和以前刚学中断时中断嵌套那样。 下面是有哪些中断源,勾上之后,在最下面

    2024年01月18日
    浏览(52)
  • STM32 HAL库配置 NVIC Settings 作用

    tim 1 break interrupt and tim15 global interrupt tim 1 update interrupt and tim16 global interrupt tim1 trigger and commutation interrupt and tim17 global interrupt tim1 capture compare interrupt 这四个有什么用,具体怎么选择 这四个中断与TIM1定时器相关,具体作用如下: 1.TIM1 Break Interrupt(TIM1BRKIRQHandler)和TIM15 Globa

    2024年04月09日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包