STM32单片机学习笔记(8):外部中断

控制/MCU

1814人已加入

描述

项目简介

利用CubMX生成基于32单片机的HAl库工程,然后编写程序在proteus上仿真验证。本项目最适合没有开发板的同学学习,零成本利用仿真软件率先入门STM32单片机。本项目需要实现的功能就是利用CubMX配置外部中断,由外部按键触发外部中断,控制LED灯的状态改变,并在Proteus上仿真验证。

硬件模块

STM32F103R4

LED灯

开关Button等

软件工具

CubMX

Proteus

KEIL

电路连接图

STM32

工作流程

首先,创建好CubMX工程,PA1作为LED灯输出端,PA2作为外部中断触发端。

STM32

设置好相应的GPIO参数。

STM32

使能外部中断

STM32

其余按照自己的习惯,也可以默认

STM32

STM32

最后生成代码即可。

STM32

左边stm32f1xx_it.c中有系统中断的相关函数,在main.c中只是对外部中断的引脚进行设置并使能。需要在stm32f1xx_it.c中查找使用相应的函数才能实现需要的功能。

STM32

首先在stm32f1xx_it.c中找到EXTI2_IRQHandler(void)函数,

STM32

再进入HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_2)中断服务函数,里面主要有两个函数,一个复位__HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin),另一个是回调函数HAL_GPIO_EXTI_Callback。

STM32

我们需要把自己想要的功能写到回调函数中HAL_GPIO_EXTI_Callback并添加到main.c文件中即可。

STM32

接下来,我们需要创建一个Proteus工程,用来验证功能。

STM32

开始验证。默认情况下LED端是高电平,即灯是灭的。

STM32

按下按键后,灯亮了。

STM32

再按又灭,继续按又亮,以此往复,功能成功实现。

程序代码

main.c

int main(void)
{
  /* USER CODE BEGIN 1 */


  /* USER CODE END 1 */


  /* MCU Configuration--------------------------------------------------------*/


  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();


  /* USER CODE BEGIN Init */


  /* USER CODE END Init */


  /* Configure the system clock */
  SystemClock_Config();


  /* USER CODE BEGIN SysInit */


  /* USER CODE END SysInit */


  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  /* USER CODE BEGIN 2 */


  /* USER CODE END 2 */


  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */


    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}


.....


/* USER CODE BEGIN 4 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
  unsigned i;
    i=5000;
  while(i--);
  //HAL_Delay(20);//延时函数消抖,防止误触发
  if(HAL_GPIO_ReadPin(KEY_GPIO_Port,KEY_Pin)==0)
  {
    HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);//翻转LED电平
  }
}


/* USER CODE END 4 */
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分