首页 > 其他分享 >【ARM课】3-外部中断

【ARM课】3-外部中断

时间:2024-04-01 19:29:05浏览次数:45  
标签:HAL PIN 中断 外部 GPIO ARM EXTI define

1. cubemx设置

参考文章

【STM32】HAL库——按键外部中断

时钟设置

在这里插入图片描述
将HCLK设置为最大频率72MHz

在这里插入图片描述

GPIO设置

按键引脚

GPIO

模式——下降沿触发

上拉

在这里插入图片描述

NVIC

在这里插入图片描述
勾选以及如是填写中断抢占优先级,具体原因在“一个老是掉进去的坑”中叙述。

LED引脚(同上一篇文章)

输出电平——PA8 高 PA9 低 PA10 高 PA11低 PA12高

输出模式——推挽输出

在这里插入图片描述

2. 使用函数

电平翻转
void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)

电平读取
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)

延时
__weak void HAL_Delay(uint32_t Delay)

中断回调函数
__weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);

3. 代码

外部中断不用手动添加中断开启函数,因此main函数里面不用添加东西。

中断函数

关于中断函数,比较容易犯以下两个错误:

  1. 重复定义:其他地方也调用了;
  2. 文章第5节的坑。
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	if(HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_GPIO_PIN) == GPIO_PIN_SET)
		return;
		HAL_Delay(50);
	if(HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_GPIO_PIN) == GPIO_PIN_SET)
		return;
		HAL_GPIO_TogglePin(LED4_GPIO_Port,LED4_GPIO_PIN);
		HAL_GPIO_TogglePin(LED5_GPIO_Port,LED5_GPIO_PIN);
}

宏定义

   	#define LED1_GPIO_Port	GPIOA
    #define LED2_GPIO_Port	GPIOA
    #define LED3_GPIO_Port	GPIOA
    #define LED4_GPIO_Port	GPIOA
    #define LED5_GPIO_Port	GPIOA

    #define LED1_GPIO_PIN	GPIO_PIN_8
    #define LED2_GPIO_PIN	GPIO_PIN_9
    #define LED3_GPIO_PIN	GPIO_PIN_10
    #define LED4_GPIO_PIN	GPIO_PIN_11
    #define LED5_GPIO_PIN	GPIO_PIN_12

    #define KEY_GPIO_Port	GPIOA
    #define KEY_GPIO_PIN	GPIO_PIN_8

4. 效果展示

<iframe allowfullscreen="true" data-mediaembed="csdn" frameborder="0" id="oWoD9tBg-1711961441873" src="https://live.csdn.net/v/embed/375413"></iframe>

外部中断

按的第三下按键掉出来了

标签:HAL,PIN,中断,外部,GPIO,ARM,EXTI,define
From: https://blog.csdn.net/aabbcce_/article/details/137238535

相关文章

  • PyCharm安装教程
    PyCharm安装教程PyCharm是一款强大的Python集成开发环境(IDE),它提供了代码编辑、调试、语法高亮、项目管理、代码跳转、智能提示、测试、自动完成等功能,是Python专业开发人员和初学者常用的工具。下面将详细介绍PyCharm的安装步骤,以帮助用户顺利完成安装。一、PyCharm的下载首......
  • pycharm available packages为空且找不到manage repositories
    解决办法点击PythonPackage->设置 点击加号 在RepositoryURL中写上以下任意国内镜像源http://pypi.douban.com/simple/http://mirrors.aliyun.com/pypi/simple/https://repo.continuum.io/pkgs/free/https://repo.continuum.io/pkgs/free/https://repo.conti......
  • 鸿蒙HarmonyOS实战-ArkUI组件(Button)
    ......
  • 【题解】Codeforces 1942E - Farm Game
    题目链接:https://codeforces.com/contest/1942/problem/E题目大意:输入一个\(l\)和一个\(n\),其中\((1\leql\leq10^6,2n<=l)\),表示有\(l\)个不同的空位(分别是\([1,l]\))和\(2n\)头完全一样的牛。Alice和Bob分别有\(n\)头牛,并且他们的牛是间隔排列的。每一次......
  • ARM GPU资源同步 shareable coherent等
    1.背景介绍之前在Vulkan内存与资源管理 提到VK_MEMORY_PROPERTY_HOST_COHERENT_BIT:该标志位表示CPU的write数据flush给GPU时,无需调用vkFlushMappedMemoryRanges;GPU的write的数据想要对CPU可见时,无需调用vkInvalidateMappedMemoryRanges。解析:CPU的write数据是暂存在CPU......
  • STM32和GD32内部时钟与外部时钟讲解
    STM32F103为例:1.当HSI被用作PLL时钟输入时,可以实现的最大系统时钟频率为64MHz。2.要使USB功能可用,必须同时启用HSE和PLL,并使USBCLK运行在48MHz。3.要实现ADC转换时间为1µs,APB2必须为14MHz、28MHz或56MHz。①.HSE=高速外部时钟信号②......
  • 2024年3月31日-UE5-导入外部资源
    新建一个外部资源的文件夹 然后去https://www.mixamo.com下模型 下载下来后直接拖到UE5里,把导入动画打钩 把骨骼拖到工程里然后就能看到了然后选动画资产     图片同理,直接拖,音乐的OGG格式也可以直接拖打开主界面的UI,把图片拖下来, 点笔刷,然后点箭头,直......
  • CF1942E Farm Game 题解
    我们先默认第一头牛是John的,另一种情况本质相同,最后答案乘上\(2\)就可以了。先说结论:我们将相邻两头牛配对,那么最终答案即满足至少一对牛间隔了奇数个空位的方案数。证明很简单,分\(3\)种情况讨论:每对牛间都间隔了奇数个空位。那么John开始时让所有牛往右行动,在Nhoj行......
  • ubuntu使用-ubuntu23.10中使QEMU的虚拟机与外部网络通信
    ubuntu使用-ubuntu23.10中使QEMU的虚拟机与外部网络通信ubuntuqemu银河麒麟参考了文档/网络/NAT和qemuaarch64虚拟机创建好后,使用NAT连接网络两个网页。一、概述要配置NAT网络,首先创建一个脚本/etc/qemu-ifup,这个脚本的作用是创建一个与任何物理端口都无关的网桥。给这个网......
  • 中断和异常,系统调用
    中断和异常中断的错误CPU上会运行两种程序,一种是操作系统内核程序,一种是应用程序在合适的情况下,操作系统内核会把CPU的使用权主动让给应用程序(第二章进程管理相关内容)“中断”是让操作系统内核夺回CPU使用权的唯一途径“中断”会使CPU由用户态变为内核态,使操作系统重新夺回......