当前位置: 首页 > news >正文

最详细STM32,cubeMX外部中断

这篇文章将详细介绍 cubeMX外部中断的配置,实现过程。

文章目录

  • 前言
  • 一、外部中断的基础知识。
  • 二、cubeMX 配置外部中断
  • 三、自动生成的代码解析
  • 四、代码实现。
  • 总结


前言

  • 实验开发板:STM32F103C8T6。
  • 所需软件:keil5 , cubeMX 。
  • 实验目的:外部中断的意义,cubeMX配置和实现 等 。

一、外部中断的基础知识。

对于外部中断的基础知识,可以参考我之前的文章:STM32 EXTI外部中断

二、cubeMX 配置外部中断

  1. 选择芯片。
    在这里插入图片描述
  2. 配置仿真。(如果不配置,程序将无法下载到板子上)
    在这里插入图片描述
  3. 配置系统时钟,选择 HSE , 高速时钟。
    在这里插入图片描述
  4. 设置时钟树,这里直接填写最大频率 72MHZ,然后 enter 双击即可。(系统自动生成相应时钟)
    在这里插入图片描述
  5. 设置工程的名字,路径,以及工具链。
    在这里插入图片描述
  6. 设置自动生成 .c/.h 文件。
    在这里插入图片描述
  7. 选择引脚设置成中断模式。(PA0 接的是按键)
    在这里插入图片描述
  8. 设置上升/下降/双边沿触发,选择是否上拉/下拉 电阻。
    (上拉/下拉 根据具体电路图确定。当电平发生变化时,触发中断,会调用中断回调函数。)
    在这里插入图片描述
  9. 使能中断。在这里插入图片描述
  10. 生成工程。
    在这里插入图片描述

三、自动生成的代码解析

看过我之前文章的应该一眼就能看懂 cubeMX 自动生成的代码。5个步骤,我再来讲解一下。
在这里插入图片描述

  1. 首先定义一个 GPIO_InitTypeDef 的结构体对象。
    可以看到该结构包含了 引脚,工作模式,是否 上拉/下拉 电阻,速度 。通过这个结构体就可以对各个外设进行初始化设置。
    在这里插入图片描述
  2. 第二步 是使能 gpio 端口
    根据外设的GPIO端口来分别使能。(这里按键对应的是 PA0 , 所以使能 GPIOA )
__HAL_RCC_GPIOA_CLK_ENABLE();
  1. 配置引脚。
    就是对我们第一步 创建的结构体进行初始化。
    分别 配置引脚端口号 GPIO_PIN_0 , 设置上升沿触发中断 , 下拉电阻。最后调用 HAL_GPIO_Init( ) 函数初始化 GPIO 。
  GPIO_InitStruct.Pin = GPIO_PIN_0;GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;GPIO_InitStruct.Pull = GPIO_PULLDOWN;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  1. 设置 优先级。
    优先级分为:抢占优先级,子优先级。都是 值越小,优先级越大。即 为0 时,优先级最大。
HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0);

也可以通过 cubeMX 配置。
在这里插入图片描述

  1. 使能中断。
HAL_NVIC_EnableIRQ(EXTI0_IRQn);

四、代码实现。

当触发中断时,会调用 中断回调函数来进行处理。
所以我们可以在 中断回调函数 中实现想要的功能即可。

/* 中断回调函数  */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
}

注意
我们在工程中编写代码时,尽量在 类似 BEGIN 0END 0 之间写,这样当我们修改 cubeMX 中的配置,再次生成代码时,就不会将之前我们编写的代码清除。

/* USER CODE BEGIN 0 */int count = 0;/*  每按下按键,触发一次中断,count 增加一次 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{if(GPIO_Pin == GPIO_PIN_0){count++;}
}/* USER CODE END 0 */

这里的 函数参数是某个引脚,当相应引脚的按键按下时,即执行里面的函数。


总结

下一篇文章为大家介绍如何不使用 cubeMX ,手动写一个外部中断的程序。

相关文章:

最详细STM32,cubeMX外部中断

这篇文章将详细介绍 cubeMX外部中断的配置,实现过程。 文章目录 前言一、外部中断的基础知识。二、cubeMX 配置外部中断三、自动生成的代码解析四、代码实现。总结 前言 实验开发板:STM32F103C8T6。所需软件:keil5 , cubeMX 。实…...

云栖大会?全部免费!!抢先一步看!

2023云栖大会定档10月31日! 点击链接免费预约云栖门票: 2023云栖大会-领票页面 2023 云栖大会将于 10.31-11.2 在杭州云栖小镇举办,深度拥抱大数据AI 核心技术,见证阿里云大数据AI产品年度重磅发布及创新。开放融合的科技展示平…...

Linux常用的调试工具

在开发和调试Linux的过程中,经常会遇到各种各样的问题,如程序崩溃、性能低下、内存泄漏等。这时候,调试就显得尤为重要。调试技巧和工具能够帮助开发人员快速定位问题并快速解决。在本文中,我们将介绍一些常用的Linux调试技巧和工…...

PX4-Autopilot下载与编译

文章目录 1 Git clone 代码2 下载子模块3 编译4 可能遇到的问题参考 1 Git clone 代码 Github Repository 链接:PX4-Autopilot 查看现有版本: 在终端用命令下载,-b表示branch git clone -b v1.14.0 https://github.com/PX4/PX4-Autopilot.…...

关于数据可视化那些事

干巴巴的数据没人看,数据可视化才能直观展现数据要点,提升数据分析、数字化运营决策效率。那关于可视化的实现方式、技巧、工具等,你了解几分?接下来,我们就来聊聊数据可视化那些事。 1、什么是数据可视化&#xff1f…...

【Java小知识点】类加载器的区别

🎄欢迎来到边境矢梦的csdn博文🎄 🎄本文主要梳理Java类加载器的区别🎄 🌈我是边境矢梦,一个正在为秋招和算法竞赛做准备的学生🌈 🎆喜欢的朋友可以关注一下🫰&#x1faf…...

分布式微服务技术栈-SpringCloud<Eureka,Ribbon,nacos>

微服务技术栈 一、微服务 介绍了解1 架构结构案例与 springboot 兼容关系拆分案例拆分服务拆分-服务远程调用 2 eureka注册中心Eureka-提供者与消费者Eureka-eureka原理分析Eureka-搭建eureka服务Eureka-服务注册Eureka-服务发现 3 Ribbon组件 负载均衡Ribbon-负载均衡原理Ribb…...

Unity解决:导出AndroidStudio工程 出现如下报错的解决方法

unity2019.4+ androidStudio2023.x+ 问题1: cvc-complex-type.2.4.a: 发现了以元素 base-extension 开头的无效内容。应以 {layoutlib} 之一开头。 解决:第一个Build.gradle更改如下 // GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING …...

Mac电脑怎么在Dock窗口预览,Dock窗口预览工具DockView功能介绍

DockView是一款Mac电脑上的软件,它可以增强Dock的功能,让用户更方便地管理和切换应用程序。 DockView的主要功能是在 DockQ,栏上显示每个窗口的缩略图,并提供了一些相关的操作选项。当用户将鼠标悬停在Dock栏上的应用程序图标上时…...

Hadoop3教程(三十):(生产调优篇)纠删码

文章目录 (155)纠删码原理纠删码原理纠删码相关命令纠删码策略解释 (156)纠删码案例实操参考文献 (155)纠删码原理 纠删码原理 默认情况下,一个文件在HDFS里会保留3个副本,以此提高…...

用nodejs爬虫台湾痞客邦相册

情景:是这样的,我想保存一些喜欢的小伙伴的照片,一张张保存太慢了, 所以我写了个js,放在国外服务器爬,国内的自己解决~ 使用方法 1.点相册随便一张, 复制url, 这张开始接下来的图片都会保存 /*** 2023年10月23日 22:58:44* 支持解析痞客邦相册* 只需要复制相册第一张图片的ur…...

物联网_01_物理设备的网络接入

设备的网络接入及物理层使用到的传输协议 现在物理设备有两种接入方式,一种是直接接入另一种是网关接入 直接接入 给物理设备添加NB-IOT通信模组等设备使之具有直接接入网络的能力 网关接入 物理设备在本地组网后通过统一的网关接入到网络(ZigBee无线组网网关).网关是处在本地…...

AD9371 官方例程之 tx_jesd 与 xcvr接口映射

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 : AD9371 官方例程构建及单音信号收发 AD9371 官方例程 时钟间的关系与生成 : AD9371 官方例程HDL详解之JESD204B TX侧时钟生成(一) AD9371 官方例程 时钟间的关系与生成 &…...

UserWarning: CUDA initialization: CUDA unknown error

CUDA在suspend之后不可用问题 问题描述 一觉醒来,电脑cuda不可用 /home/你的电脑/pytorch/lib/python3.8/site-packages/torch/cuda/__init__.py:107: UserWarning: CUDA initialization: CUDA unknown error - this may be due to an incorrectly set up enviro…...

C算法:使用选择排序实现从(大到小/从小到大)排序数组,且元素交换不可使用第三变量。

需求&#xff1a; 使用选择排序实现从(大到小/从小到大)排序&#xff0c;且元素交换不可使用第三变量 (异或交换法) 代码实现&#xff1a; #include <stdio.h> void maopao(int* array,int len,int(*swap)(int a,int b)) {int i,j;for(i0;i<len-1;i){for(ji1;j<…...

用mysql客户端操作时,一直提示 Lost connection to MySQL server during query

问题&#xff1a;ERROR 2013 (HY000): Lost connection to MySQL server during query :查询期间失去与 MySQL 服务器的连接 原因&#xff1a;如果客户端如果太长时间没动静&#xff0c;连接器就会自动将连接断开&#xff0c; 这个时间是由参数wait_timeout控制的&#xff0c;…...

KubeSphere一键安装部署K8S集群(单master节点)-亲测过

1. 基础环境优化 hostnamectl set-hostname master1 && bash hostnamectl set-hostname node1 && bash hostnamectl set-hostname node2 && bashcat >> /etc/hosts << EOF 192.168.0.34 master1 192.168.0.45 node1 192.168.0.209…...

vue3 element-plus 组件table表格 勾选框回显(初始化默认回显)完整静态代码

<template><el-table ref"multipleTableRef" :data"tableData" style"width: 100%"><el-table-column type"selection" width"55" /><el-table-column label"时间" width"120">…...

Redis --- 安装教程

Redis--- 特性&#xff0c;使用场景&#xff0c;安装 安装教程在Ubuntu下安装在Centos7.6下安装Redis5 特性在内存中存储数据可编程的扩展能力持久化集群高可用快速 应用场景实时数据存储作为缓存或者Session存储消息队列 安装教程 &#x1f680;安装之前切换到root用户。 在…...

代码阅读:LanGCN

toc 1训练 1.1 进度条 import tqdm as tqdm for i, data in tqdm(enumerate(train_loader),disablehvd.rank()):1.2 多进程通信 多线程通信依靠共享内存实现&#xff0c;但是多进程通信就麻烦很多&#xff0c;因此可以采用mpi库&#xff0c;如果是在python中使用&#xff0…...

SpringBoot3与OAuth2.1实战:从/oauth/token到/oauth2/token的平滑迁移指南

1. 为什么需要从/oauth/token迁移到/oauth2/token 最近在升级SpringBoot3项目时&#xff0c;遇到了一个棘手的问题&#xff1a;原先运行良好的OAuth2认证接口突然失效了。仔细排查后发现&#xff0c;原来是Spring Security 6.x彻底重构了OAuth2的实现方式&#xff0c;最直观的…...

AudioSeal部署教程:HTTPS反向代理配置(Nginx)保护7860端口Web访问

AudioSeal部署教程&#xff1a;HTTPS反向代理配置&#xff08;Nginx&#xff09;保护7860端口Web访问 1. 项目概述 AudioSeal是Meta开源的专业语音水印系统&#xff0c;主要用于AI生成音频的检测和溯源。这个工具能够帮助用户&#xff1a; 在音频中嵌入不可见的水印信息从音…...

Qwen-Image-2512-Pixel-Art-LoRA 在嵌入式设备上的应用展望:边缘计算与像素艺术

Qwen-Image-2512-Pixel-Art-LoRA 在嵌入式设备上的应用展望&#xff1a;边缘计算与像素艺术 1. 从云端到指尖&#xff1a;像素艺术的边缘化想象 最近在玩一些像素风的独立游戏&#xff0c;看着那些由简单色块构成的精致画面&#xff0c;我就在想&#xff0c;要是能随时随地、…...

全国首个!深开鸿与前海供电公司打造的数据中心电鸿变配电室正式投运

不久前&#xff0c;我国首个专为数据中心设计的用户专用电力开源鸿蒙变配电室在深圳前海投入使用。该项目由深开鸿与深圳前海供电公司打造&#xff0c;以电鸿物联操作系统为核心&#xff0c;融合感知终端、电力物联、数字孪生、人工智能四大能力&#xff0c;为前海信息枢纽大厦…...

5分钟部署MinerU 2.5-1.2B:PDF转Markdown零门槛入门教程

5分钟部署MinerU 2.5-1.2B&#xff1a;PDF转Markdown零门槛入门教程 1. 为什么选择MinerU处理PDF文档 在日常工作和学习中&#xff0c;我们经常需要处理PDF文档。无论是技术文档、学术论文还是商业报告&#xff0c;PDF格式因其良好的跨平台兼容性而广受欢迎。然而&#xff0c…...

STM32CubeMX+正点原子LCD代码移植保姆级教程(STM32F103ZET6精英版实测)

STM32CubeMX与正点原子LCD代码无缝整合实战指南 第一次接触STM32CubeMX和正点原子开发板时&#xff0c;最令人头疼的莫过于将两者代码完美融合。特别是当你想使用正点原子那套经过千锤百炼的LCD驱动库&#xff0c;却发现它与CubeMX生成的HAL库存在各种兼容性问题。本文将手把手…...

OpenClaw技能扩展:Qwen3.5-9B代码生成+本地执行实战

OpenClaw技能扩展&#xff1a;Qwen3.5-9B代码生成本地执行实战 1. 为什么需要代码生成与自动执行&#xff1f; 作为一名长期与数据打交道的开发者&#xff0c;我每天要处理大量重复性脚本编写任务&#xff1a;数据清洗、格式转换、日志分析...这些工作往往占用了70%以上的编码…...

基于CBLOF算法的用电异常用户识别:原理、实践与工程落地(上篇)

目录 摘要 关键词 一、引言:用电异常检测的业务痛点与技术挑战 1.1 传统阈值法的局限性 1.2 有监督学习方法的适配性不足 1.3 传统离群检测算法的不足 1.4 CBLOF算法的适配性优势 二、CBLOF算法核心原理深度剖析 2.1 算法核心流程(完整版) 步骤1:数据预处理 步骤…...

OpenClaw多任务队列:千问3.5-35B-A3B-FP8批量处理100+图片分析

OpenClaw多任务队列&#xff1a;千问3.5-35B-A3B-FP8批量处理100图片分析 1. 为什么需要批量图片处理方案 上周我接手了一个自媒体团队的素材整理需求——他们积压了300多张未分类的配图需要紧急处理。手动操作需要完成以下工作&#xff1a;按主题分类图片、提取图中的文字信…...

EEPROM页写机制导致的I2C数据异常解析

1. EEPROM读写异常问题深度解析最近在嵌入式开发群里有位工程师反馈了一个典型问题&#xff1a;使用I2C接口对AT24C02 EEPROM进行连续8字节读写时&#xff0c;发现最后两个字节数据出现异常。写入数据为0x10-0x08&#xff0c;但读取时最后两个字节变成了0xFF。这个问题看似简单…...