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

学习CubeIDE——外设中断开发

实验现象:使用按键(KEY_2)来产生中断,中断程序是LED灯翻转

在我看来,外设中断就是芯片与人们对其进行操作和控制的一种交互方式。芯片内的程序是循环执行下去的,我们通过一些操作,比如键盘按键,鼠标等让CPU意识到有指令进来,放下手头的工作来响应我们。

1、ioc设置

将PC13 设置GPIO_EXTI 模式

(1)在GPIO mode 中选择 “下降沿触发中断模式”,选择接“上拉电阻” 。

(2) 在NVIC中点击Enable,使能中断。

2、程序

中断的过程可以简单地理解为: 外设中断触发——中断处理函数——中断操作

中断处理函数,分为优先级选择——>中断源选择——>回调函数。这里为什么要打箭头呢?

优先级选择:EXTI15_10_IRQHandler()   位于 “stm32f1xx_it.c”  

 中断源选择: HAL_GPIO_EXTI_IRQHandler(KEY_2_Pin) 位于“stm32f1xx_hal_gpio.c”。

 弱回调函数:__weak void HAL_GPIO_EXTI_Callback()  位于“stm32f1xx_hal_gpio.c”。

 可以看到这三个函数是依次包含。回调函数一般是我们来写,这里的弱回调是为了在没有回调函数时让程序正常执行。

我们写的回调函数:

回调函数

 这里的 HAL_NVIC_DisableIRQ(KEY_2_EXTI_IRQn); 是在按键处理期间禁止再次触发KEY2键的外部中断。HAL_NVIC_EnableIRQ(KEY_2_EXTI_IRQn); 结束后开启中断允许。

以上是笔者的理解,理解有误不要细究。

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 活动目录安全
  • go注册中心Eureka,注册到线上和线下,都可以访问
  • 聊聊Thread Local Storage
  • uni-app页面调用接口和路由(四)
  • 【ShuQiHere】 探索计算机视觉的世界:从基础到应用
  • 在线安全干货|如何更改IP地址?
  • 2024年最新苹果cms升级插件【泛目录专用】
  • 笔记整理—内核!启动!—linux应用编程、网络编程部分(1)API概述与文件I/O
  • 是德科技Keysight N4433D ECal模块 26.5GHz 4端口3.5毫米
  • ChatGPT搭上langchain的知识库RAG应用,效果超预期
  • 对接阿里asr和Azure asr
  • C++_CH18_构造函数与析构函数
  • PyQt5库学习之QFileDialog.getExistingDirectory函数
  • Qt Linguist 短语书批量导入翻译.ts导入.qph
  • 我Github的问题解决了!
  • android 一些 utils
  • CSS魔法堂:Absolute Positioning就这个样
  • Effective Java 笔记(一)
  • Intervention/image 图片处理扩展包的安装和使用
  • Just for fun——迅速写完快速排序
  • Linux gpio口使用方法
  • Lucene解析 - 基本概念
  • mysql 数据库四种事务隔离级别
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • Phpstorm怎样批量删除空行?
  • tweak 支持第三方库
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 利用DataURL技术在网页上显示图片
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 设计模式(12)迭代器模式(讲解+应用)
  • 深入 Nginx 之配置篇
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 思否第一天
  • 协程
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • #QT(一种朴素的计算器实现方法)
  • #数据结构 笔记一
  • (2024)docker-compose实战 (8)部署LAMP项目(最终版)
  • (2024,Flag-DiT,文本引导的多模态生成,SR,统一的标记化,RoPE、RMSNorm 和流匹配)Lumina-T2X
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (算法)区间调度问题
  • (贪心 + 双指针) LeetCode 455. 分发饼干
  • (转)jQuery 基础
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • *Django中的Ajax 纯js的书写样式1
  • .Family_物联网
  • .gitignore不生效的解决方案
  • .Net 4.0并行库实用性演练
  • .net core 6 集成和使用 mongodb
  • .NET 中的轻量级线程安全
  • .net生成的类,跨工程调用显示注释
  • /boot 内存空间不够
  • [ 代码审计篇 ] 代码审计案例详解(一) SQL注入代码审计案例