作者:aatwo19668035 | 来源:互联网 | 2023-10-12 16:46
第三章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默认状态即可。
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的使用