最详细STM32,cubeMX外部中断

本文详细介绍了如何在STM32F103C8T6开发板上使用cubeMX配置外部中断,包括基础设置、代码解析和自动生成的代码实现,以及中断回调函数的使用。后续将探讨非cubeMX方式编写中断程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这篇文章将详细介绍 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 配置和实现外部中断0 #### 工程初始化 为了配置STM32外部中断0,在创建项目之初需通过STM32CubeMX软件完成基本设置。启动STM32CubeMX并新建一个项目,选择对应的微控制器型号。 #### GPIO与EXTI线关联 进入Pinout & Configuration界面,找到目标GPIO引脚(通常用于连接按钮或其他触发源)。点击该引脚,将其模式更改为`External Interrupt Mode`,这一步骤建立了GPIO引脚到EXTI线路的具体映射关系[^1]。 #### 中断优先级设定 转至NVIC (Nested Vectored Interrupt Controller)选项卡下,定位到对应于所选GPIO端口的外部中断通道(如EXTI Line0),勾选Enable IRQ以激活此中断请求,并调整Preemption Priority数值来决定抢占优先级;Subpriority则用来在同一级别的多个中断间分配响应顺序[^2]。 #### HAL库回调函数重写 当上述硬件层面配置完成后,还需编写相应的固件代码处理实际发生的中断事件。打开生成的工程文件夹内的`.c`文件,寻找由CubeMX自动生成但留待开发者补充逻辑的部分——即带有`/* USER CODE BEGIN ... */`标记的地方。在此处定义自己的ISR(Interrupt Service Routine)行为: ```c void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){ if(GPIO_Pin == GPIO_PIN_0){ // 假设是PA0作为外部中断输入 /* 用户自定义的中断服务程序 */ HAL_GPIO_TogglePin(LED_PORT, LED_PIN); // 切换LED状态为例 } } ``` 以上步骤涵盖了利用STM32CubeMX工具链快速搭建起基于HAL库支持下的外部中断机制所需的关键环节[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

糖果罐子♡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值