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

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...