第三章 stm32 cubemx 外部中断实验以及proteus仿真

第三章 stm32 cubemx 外部中断实验以及proteus仿真



前言

这一章,将向大家介绍如何使用 STM32F103 的外部中断。前面的两章掌握了 STM32F103 的 IO 口最基本的操作。本章将介绍如何将 STM32F103 的外部中断,STM32的每个IO都可以作为外部中断输入,每个外部中断可以配置单独的触发方式(上升沿,下降沿或者双边沿触发)。本章以中断的方式,实现在上一章中所实现的效果。


一、中断

所谓中断,是指CPU在正常运行程序时,由于内部/外部事件或由程序预先安排的事件,引起CPU中断正在运行的程序,而转到为内部/外部事件或为预先安排的事件服务的程序中去,服务完毕,再返回去执行波暂时中断的程序。stm32的中断简言之就是,出现某次事件产生中断,暂停正在执行的主程序,去执行目标程序,执行完毕后返回主程序,继续执行。
中断又分为外部中断,串口中断,定时器中断等等

二、配置步骤

1.基础配置

步骤详情参考:第一章 stm32 cubemx基础配置实验以及proteus 8的使用
1)sys中,选好调试方式,DEBUG中选中Serial Wire,实际上板子测试时会占用PA13和PA14两个I/O口,用作下载或者调试。

2)RCC时钟,晶振选择,选择HSE(外部高速时钟)为Crystal/Ceramic Resonator,外部低速时钟(LSE)可有可无。

3)时钟配置,记录系统时钟频率,这里是72M用作仿真时选择芯片的晶振频率。

4)其他配置此工程不用,暂不配置。

2.配置引脚,生成工程

点击想要用到的引脚,鼠标左击选择GPIO_EXTI,GPIO_OUTPUT,我用到了PA1、PA4、PA5(自选)三个引脚,PA1作为外部中断的引脚,PA4、PA5两个引脚作为两个LED灯引脚,其他配置为cubemx默认状态即可。在这里插入图片描述

在这里插入图片描述

3.开启中断,设置中断优先级

进行中断使能,由于此时只用到了外部中断,中断任务之间不存在影响,故优先级直接采取默认设置。在这里插入图片描述

三.找到主函数,加入代码,编译。

1.加入int型变量exti_sign,根据exti_sign变量值在外部中断回调函数中的变化,来改变灯效的变化来实现上一章中的实验效果,从而体现出外部中断。

if(exti_sign%2 == 0)
 {
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
        HAL_Delay(100);
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
        HAL_Delay(100);
 }
    else if(exti_sign%2 == 1)
    {
      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
        HAL_Delay(100);
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
        HAL_Delay(100);
    }

在这里插入图片描述

四.寻找中断回调函数

本章所引入的外部中断,触发方式为下降沿触发即由高电平转换为低电平时,触发中断,进入中断函数。
如图所示,为外部中断函数,选中函数点击鼠标右键选择如图可以进入到函数内部。在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五.利用中断回调函数

此段函数我将其写在主函数下方的一个区域,注意不在主函数内部,可以在任意位置处,但应将其写在,BEGIN和END之间,这样符合cubemx书写代码的要求,不然如果配置错误重新生成时,代码会被覆盖。 BEGIN和END如下所示,任意两个之间即可。
/* USER CODE END /
/
USER CODE BEGIN */

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
   exti_sign++;
}

在这里插入图片描述

六.Proteus仿真或者烧录可直接看到效果。

直接烧录时一定要注意选择的IO口,与实际stm32板子的原理图相匹配。实验效果为每按下一次按键触发一次中断,使两个LED灯呈现双闪效果和跑马灯效果的转换。
如图所示,本次仿真的工程可之间采用上次Proteus仿真工程,过程请参考:第二章 stm32 cubemx GPIO输入输出实验以及proteus仿真
在这里插入图片描述
按下一次后
在这里插入图片描述


总结

以上就是今天要讲的内容,本文介绍了外部中断的使用以及利用Proteus仿真看到的效果。如果是在基础配置Cubemx或者基础操作Proteus时出现问题请参考:第一章 stm32 cubemx基础配置实验以及proteus 8的使用

  • 12
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值