用STM32CubeIDE软件实现STM32外部中断实例

发布者:码字奇才最新更新时间:2023-05-06 来源: elecfans关键字:STM32  外部中断 手机看文章 扫描二维码
随时随地手机看文章

本文用STM32CubeIDE软件实现STM32外部中断实例。

新建工程

“File”-“New”-“STM32 Project”。

7b81411a-22d2-11ed-ba43-dac502259ad0.png

输入芯片型号STM32F103ZE。

7b901488-22d2-11ed-ba43-dac502259ad0.png

选择相应封装,下一步。

7ba59dd0-22d2-11ed-ba43-dac502259ad0.png

填写项目名,选择工程位置,下一步。

7bbd5a4c-22d2-11ed-ba43-dac502259ad0.png

配置时钟、调试模式

选择高速外部时钟。

7be491a2-22d2-11ed-ba43-dac502259ad0.png

HCLK总线时钟处输入72,回车,配置使用最高时钟频率。

7bf80282-22d2-11ed-ba43-dac502259ad0.png

调试模式选择串行,方便下载程序。

7c18918c-22d2-11ed-ba43-dac502259ad0.png

配置管脚外设

本实例中用到了LED1与KEY_LEFT,找到相应电路图

7c2a1600-22d2-11ed-ba43-dac502259ad0.png

7c4a2e54-22d2-11ed-ba43-dac502259ad0.png

7c5b86c2-22d2-11ed-ba43-dac502259ad0.png

可见LED1对应PC0管脚,低电平点亮。按键K1对应PE2管脚,低电平有效。

PC0配置为GPIO_Output,GPIO输出模式

7c850d80-22d2-11ed-ba43-dac502259ad0.png

PE2配置为GPIO_EXTI2,GPIO中断线2。

7c97c81c-22d2-11ed-ba43-dac502259ad0.png

对GPIO进行配置,可以看到PC0、PE2两个管脚。

PC0管脚的配置:

GPIO输出电平,“High”,复位后高电平,LED1熄灭状态。

GPIO模式,“OutputPushPull”,推挽输出,相关文章:梳理清楚推挽、开漏、OC、OD。

GPIO上拉下拉,“Pull-up”,上拉,默认高电平,避免管脚电平状态不稳定

7ca8f7ae-22d2-11ed-ba43-dac502259ad0.png

PE2管脚的配置,GPIO模式这里有6个选项,分别是:

上升沿触发的外部中断

下降沿触发的外部中断

上升/下降沿触发的外部中断

上升沿触发的事件中断

下降沿触发的事件中断

上升/下降沿触发的事件中断

“外部中断”与“事件中断”的区别:

“事件中断”可以由硬件自动完成这个事件产生的结果,比如引起DMA操作、AD转换等,响应速度更快。

而本例中需要中断服务函数才能完成中断后产生的结果,是“外部中断”

由电路图可知,KEY1按键按下时为低电平,过程中会产生一个下降沿,所以选择“下降沿外部中断”这一项。

按键低电平有效,选择上拉,给管脚一个稳定的电平状态,不按下时为默认的高电平。

7cc38042-22d2-11ed-ba43-dac502259ad0.png

配置NVIC嵌套向量中断控制器

NVIC就是用来控制中断响应的,如下图列出了各个中断。可以分别配置其使能状态、抢占优先级与响应优先级。

7ce2dbe0-22d2-11ed-ba43-dac502259ad0.png

因为PE2配置为GPIO_EXTI2中断,它出现在了列表中。同时出现的还有SysTick,它是HAL_Delay的时基来源,如下图note处所说的,每隔一个固定时间产生一次中断。

因为下文中断服务函数代码中用到了HAL_Delay延时函数,把SysTick与EXTI2的抢占优先级分别设置为0与2。在这里,数值越大优先级越小。

7cf4ea24-22d2-11ed-ba43-dac502259ad0.png

配置中断服务函数

进行上述配置之后,点击生成代码。

7d186a76-22d2-11ed-ba43-dac502259ad0.png

本实例中的中断类型是“外部中断”,通过中断服务函数来实现。

打开stm32f1xx_it.c文件,找到中断服务函数,它调用了GPIO中断服务函数。

7d2c3952-22d2-11ed-ba43-dac502259ad0.png

F3找到这个函数的定义,在清除中断标志位后,进入了Callback回调函数。

7d40ee60-22d2-11ed-ba43-dac502259ad0.png

这个Callback函数也是一个弱化函数,,可以重写,如下图的__weak标识。

7d4f0a04-22d2-11ed-ba43-dac502259ad0.png

回到stm32f1xx_it.c文件,在末尾user code处写上中断发生时要实现的结果。

7d648000-22d2-11ed-ba43-dac502259ad0.png


关键字:STM32  外部中断 引用地址:用STM32CubeIDE软件实现STM32外部中断实例

上一篇:解析STM32的启动过程及STM32 启动文件选择
下一篇:关于STM32的入门问题

推荐阅读最新更新时间:2024-11-12 15:43

STM32存储架构
看了一段时间的相关资料,将自已了解的知识写出来,以求备忘。在此文中若有错误之处,请指出,将不胜感激。 STM32F103ZET6是Cortex-M3内核的ARM类型的单片机,它属于STM32的大密度器件,对于STM32的存储架构是差不多的 STM32的程序存储区,数据存储区,寄存器统一编制,最大为4G的空间。使用的是小端存储模式。 整个4G的空间被分成8个main blocks,每一块是512MB,现在把对应的地址空间列出 0x0000 0000 ~ 0x2000 0000 根据启动引脚的状态决定哪个存储空间被映射到此处。 片内系统存储区起始地址: 0x1fff 0000(2K字节的空间) 引脚状态存储空间名地址X0Ma
[单片机]
如何利用VSCode 搭建STM32开发环境
众所周知,Keil是一款收费软件,虽然可以Po解使用,但很多公司还是有点害怕,想必有不少读者都收到过**函。 之前,开发单片机项目,可以说 Keil 是最佳选择之一,但VSCode横空问世之后,这种格局被打破。 因为 VSCode 免费且好用,可以安装各种插件,很多工程师逐渐从Keil 转向了 VSCode。而且,VSCode还能实现 Keil 不能实现的一些功能。 下面就给大家分享一下 VSCode 搭建 STM32 开发环境的一些常规且使用的功能。 一、需要的软件和工具 下载最新版VS Code: 安装好插件,具有良好的代码补全与调试功能。 VS Code下载地址:https://code.visualstud
[单片机]
如何利用VSCode 搭建<font color='red'>STM32</font>开发环境
ST-LINK V2 无法下载程序相关问题
1.两种STLINK 2.针对第一款ST-LINK connection error 和 No ST-LINK connected 其实并没有那么多的麻烦 只需要检查这几点 检查连线是否正确 检查驱动是否安装 更新下ST-LINK固件版本 不要使用拓展坞(分线器) 开发板一定要先独立供电后,再将ST-LINK插到电脑端 3.针对第二款ST-LINK相关问题 正常现象 2.不正常现象 这种情况建议换台电脑试一下,指示灯不亮的情况下很大可能ST-LINK已损坏,一直闪烁时估计是内部电路出现了问题。 大部分情况下,损坏的原因是ST-LINK单独长时间供电导致的,要避免这种情况的发生。 4.安装驱动
[单片机]
ST-LINK V2 无法下载程序相关问题
STM32学习008_ARM产品浅析
ARM是英国Acorn有限公司设计的基于RSIC的一款微处理器,全称为Acorn RISC Machine,ARM处理器本身是32位设计,但也配备16位指令集,一般来讲比等价32位代码节省达35%,却能保留32位系统的所有优势。 ARM处理器的三大特点是:耗电少功能强、16位/32位双指令集和合作伙伴众多。 1、体积小、低功耗、低成本、高性能; 2、支持Thumb(16位)/ARM(32位)双指令集,能很好的兼容8位/16位器件; 3、大量使用寄存器,指令执行速度更快; 4、大多数数据操作都在寄存器中完成; 5、寻址方式灵活简单,执行效率高; 6、指令长度固定。 ARM处理器共有37个寄存器,被分为若干个组(BANK),这
[单片机]
<font color='red'>STM32</font>学习008_ARM产品浅析
STM32的Flash写了保护怎么办?
关于STM32对内部Flash的保护 为了防止对Flash的非法访问,所有STM32的芯片都提供对Flash的保护,具体分为写保护和读保护。 如果对Flash设置了写保护,那就无法对Flash进行编程和擦除。在开发STM32的时候,如果出现这种情况,通常仿真器都支持对Flash进行解锁,像jlink,stlink等仿真器都支持这个功能。 在使用MDK进行调试的时候,可能会遇到如下图所示的报错信息,这时候就要排查Flash是不是被保护起来了。 读保护即大家通常说的“加密”,是作用于整个Flash存储区域,相关文章:STM32等单片机程序加密的方法。一旦设置了Flash的读保护,内置的Flash存储区只能通过程序的正常执行
[单片机]
<font color='red'>STM32</font>的Flash写了保护怎么办?
STM32 ST-LINK 下载后不明原因的无法启动
更换ST-LINK 后,下载程序无法启动,程序下载正常,就是无法启动,换了一块不同的板子还是这个现象 纠结于: 1. 晶振没有正常起震 2. ST-LINK 驱动问题 3. 程序出错 4.... 一万个草泥马飘过 搜索度娘的方法,都没有效果,用MDK在线调试,显示启动后莫名复位,有一种程序跑飞的感觉 后来偶然发现有网友提到 WDG_SW st-link utility 文档上解释如下 如果不选择该项,上电将自动开启看门狗,我的天!!! 选中该选项后,程序正常运行了 因为之前没有注意到这个,换了个环境,偏偏遇到这个问题,抓耳挠腮了一个晚上
[单片机]
<font color='red'>STM32</font> ST-LINK 下载后不明原因的无法启动
STM32定时器触发ADC
以STM32 ADC的常规通道为例(注入通道类似): 如图,STM32 ADC的常规通道可以由以上6个信号触发任何一个,我们以使用TIM2_CH2触发ADC1,独立模式,每次仅测一条通道,则ADC的配置如下:(以下代码使用STM32固件库V3.5) void ADC_Configuration(void) { ADC_InitTypeDef ADC_InitStructure; ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode = DISABLE; //关闭通道扫描模式 ADC_InitStructure.
[单片机]
<font color='red'>STM32</font>定时器触发ADC
STM32的看门狗使用方法
简介:stm32自带两个看门狗模块,独立看门狗IWDG和窗口看门狗WWDG。主要作用是——可用来检测和解决由软件错误引起的故障;当计数器达到给定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产生系统复位。 具体的实现步骤:开启看门狗,设置减计数的初始值,当计数值达到超时值时,产生MCU复位,此时本来运行的程序终止重新启动单片机(发生了故障)。在使用了看门狗之后,在正常运行的程序中加入喂狗的程序,即采用定时器的方式每隔一段时间进行一次喂狗重置计数装载值,这样,只要程序正常运行,没有出现故障或软件错误,就会不断的定时喂狗,从而不会使计数值达到超时值产生复位。 独立看门狗IWDG: IWDG主要性能 ●自由运行的递减
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved