热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

第三章stm32cubemx外部中断实验以及proteus仿真文章目录第三章stm32cubemx外部中断实验以及proteus仿真前言一、中断二、配置步骤1.基础配置2.配置引脚
第三章 stm32 cubemx 外部中断实验以及proteus仿真

文章目录

  • 第三章 stm32 cubemx 外部中断实验以及proteus仿真
  • 前言
  • 一、中断
  • 二、配置步骤
    • 1.基础配置
    • 2.配置引脚,生成工程
    • 3.开启中断,设置中断优先级
  • 三.找到主函数,加入代码,编译。
  • 四.寻找中断回调函数
  • 五.利用中断回调函数
  • 六.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默认状态即可。《第三章 stm32 cubemx 外部中断实验以及proteus仿真》

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

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

进行中断使能,由于此时只用到了外部中断,中断任务之间不存在影响,故优先级直接采取默认设置。《第三章 stm32 cubemx 外部中断实验以及proteus仿真》

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

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);
}

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

四.寻找中断回调函数

本章所引入的外部中断,触发方式为下降沿触发即由高电平转换为低电平时,触发中断,进入中断函数。
如图所示,为外部中断函数,选中函数点击鼠标右键选择如图可以进入到函数内部。《第三章 stm32 cubemx 外部中断实验以及proteus仿真》
《第三章 stm32 cubemx 外部中断实验以及proteus仿真》
《第三章 stm32 cubemx 外部中断实验以及proteus仿真》
《第三章 stm32 cubemx 外部中断实验以及proteus仿真》

五.利用中断回调函数

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

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

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

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

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

总结

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


推荐阅读
  • SSE图像算法优化系列三:超高速导向滤波实现过程纪要(欢迎挑战)
    自从何凯明提出导向滤波后,因为其算法的简单性和有效性,该算法得到了广泛的应用,以至于新版的matlab都将其作为标准自带的函数之一了&#x ... [详细]
  • This article explores the process of integrating Promises into Ext Ajax calls for a more functional programming approach, along with detailed steps on testing these asynchronous operations. ... [详细]
  • 本文将详细介绍如何配置并整合MVP架构、Retrofit网络请求库、Dagger2依赖注入框架以及RxAndroid响应式编程库,构建高效、模块化的Android应用。 ... [详细]
  • Linux内核中的内存反碎片技术解析
    本文深入探讨了Linux内核中实现的内存反碎片技术,包括其历史发展、关键概念如虚拟可移动区域以及具体的内存碎片整理策略。旨在为开发者提供全面的技术理解。 ... [详细]
  • 雨林木风 GHOST XP SP3 经典珍藏版 YN2014.04
    雨林木风 GHOST XP SP3 经典珍藏版 YN2014.04 ... [详细]
  • 本文档旨在提供C语言的基础知识概述,涵盖常量、变量、数据类型、控制结构及函数定义等内容。特别强调了常量的不同类型及其在程序中的应用,以及如何正确声明和使用函数。 ... [详细]
  • 本文汇集了作者在准备研究生入学考试过程中的心得体会,包括备考策略、复习重点及应对考试的心理调适技巧,旨在为即将参加考研的学生提供实用建议。 ... [详细]
  • 使用R语言进行Foodmart数据的关联规则分析与可视化
    本文探讨了如何利用R语言中的arules和arulesViz包对Foodmart数据集进行关联规则的挖掘与可视化。文章首先介绍了数据集的基本情况,然后逐步展示了如何进行数据预处理、规则挖掘及结果的图形化呈现。 ... [详细]
  • 本文探讨了在Python中多线程与多进程的性能差异,特别是在处理CPU密集型任务和I/O密集型任务时的表现。由于全局解释器锁(GIL)的存在,多线程在利用多核CPU方面表现不佳,而多进程则能有效利用多核资源。 ... [详细]
  • 来自FallDream的博客,未经允许,请勿转载,谢谢。一天一套noi简直了.昨天勉强做完了noi2011今天教练又丢出来一套noi ... [详细]
  • Lua字符串1.字符串常见形式字符串或串(String)是由数字、字母、下划线组成的一串字符。Lua语言中字符串可以使用以下三种方式来表示:•单引号间的一串字符。 ... [详细]
  • 本文详细探讨了在Windows 98环境下安装Apache 1.3.9、JServ、GNUJSP 1.0、JDK 1.2.2及JSDK 2.0后遇到的中文显示问题,并提供了多种有效的解决方案。 ... [详细]
  • C/C++ 应用程序的安装与卸载解决方案
    本文介绍了如何使用Inno Setup来创建C/C++应用程序的安装程序,包括自动检测并安装所需的运行库,确保应用能够顺利安装和卸载。 ... [详细]
  • 本报告记录了嵌入式软件设计课程中的第二次实验,主要探讨了使用KEIL V5开发环境和ST固件库进行GPIO控制及按键响应编程的方法。通过实际操作,加深了对嵌入式系统硬件接口编程的理解。 ... [详细]
  • 本文分享了作者在使用LaTeX过程中的几点心得,涵盖了从文档编辑、代码高亮、图形绘制到3D模型展示等多个方面的内容。适合希望深入了解LaTeX高级功能的用户。 ... [详细]
author-avatar
aatwo19668035
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有