当前位置: 首页 > 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…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

Bean 作用域有哪些?如何答出技术深度?

导语&#xff1a; Spring 面试绕不开 Bean 的作用域问题&#xff0c;这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开&#xff0c;结合典型面试题及实战场景&#xff0c;帮你厘清重点&#xff0c;打破模板式回答&#xff0c…...