首页 资讯 应用 高压 设计 行业 低压 电路图 关于

单片机

旗下栏目: PLC 嵌入式 单片机 光电技术

STM32CubeMX开发三:按键中断实验

单片机 | 发布时间:2017-07-28 | 人气: | #评论# |本文关键字:STM32
摘要:硬件平台:stm32F407Zet6 软件平台:stm32cubeMX 4.7+MDK5.14 电路连接:PE8-LED0、PE9-LED1、PE10-LED2、PE11-LED3、PE12-KEY0、PE13-KEY1、PE14-KEY2、PE15-KEY3 第一步、 使用stm32cubeMX创建工程,选择相应的芯片,

硬件平台:stm32F407Zet6

软件平台:stm32cubeMX 4.7+MDK5.14

电路连接:PE8-LED0、PE9-LED1、PE10-LED2、PE11-LED3、PE12-KEY0、PE13-KEY1、PE14-KEY2、PE15-KEY3

第一步、使用stm32cubeMX创建工程,选择相应的芯片,配置RCC、SYS、引脚和时钟如下图所示:





注意,由于按键上有上拉电阻,这里选择中断模式的时候,我们选择下降沿触发中断。

第二步,配置输出Keil工程



第三步、编写程序下载验证

STM32CubeMx把代码都生成了,查找函数,分析调用的过程,添加应用层代码就行

首先在stm32f4xx_it.c文件中查找,所有的中断函数都是放在这个文件中的,代码如下:

[cpp] view plain copy

  1. void EXTI15_10_IRQHandler(void)  

  2. {  

  3.   /* USER CODE BEGIN EXTI15_10_IRQn 0 */  

  4.   

  5.   /* USER CODE END EXTI15_10_IRQn 0 */  

  6.   HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_12);  

  7.   HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13);  

  8.   HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_14);  

  9.   HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_15);  

  10.   /* USER CODE BEGIN EXTI15_10_IRQn 1 */  

  11.   

  12.   /* USER CODE END EXTI15_10_IRQn 1 */  

  13. }  

可以看出,这四个按键的中断触发后首先会调用这个函数,这个函数有调用HAL_GPIO_EXTI_IRQHandler,再看一下这个函数的原型


[cpp] view plain copy

  1. /** 

  2.   * @brief  This function handles EXTI interrupt request. 

  3.   * @param  GPIO_Pin: Specifies the pins connected EXTI line 

  4.   * @retval None 

  5.   */  

  6. void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)  

  7. {  

  8.   /* EXTI line interrupt detected */  

  9.   if(__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != RESET)  

  10.   {  

  11.     __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);  

  12.     HAL_GPIO_EXTI_Callback(GPIO_Pin);  

  13.   }  

  14. }  

  15.   

  16. /** 

  17.   * @brief  EXTI line detection callbacks. 

  18.   * @param  GPIO_Pin: Specifies the pins connected EXTI line 

  19.   * @retval None 

  20.   */  

  21. __weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)  

  22. {  

  23.   /* NOTE: This function Should not be modified, when the callback is needed, 

  24.            the HAL_GPIO_EXTI_Callback could be implemented in the user file 

  25.    */  

  26. }  


根据程序可以知道,当中断发生的时候会调用HAL_GPIO_EXTI_Callback();程序中只给出了一个虚函数,需要重新实现它,在main.c添加如下代码,来重新实现这个函数,来完成功能:


[cpp] view plain copy

  1. /* USER CODE BEGIN 4 */  

  2. void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)  

  3. {  

  4.   /* NOTE: This function Should not be modified, when the callback is needed, 

  5.            the HAL_GPIO_EXTI_Callback could be implemented in the user file 

  6.    */  

  7.     switch(GPIO_Pin)  

  8.     {  

  9.         case GPIO_PIN_12:LED0_Toggle();break;  

  10.         case GPIO_PIN_13:LED1_Toggle();break;  

  11.         case GPIO_PIN_14:LED2_Toggle();break;  

  12.         case GPIO_PIN_15:LED3_Toggle();break;  

  13.         default:break;  

  14.     }  

  15. }  

  16. /* USER CODE END 4 */  


这样就实现了当按键中断发生的时候就反转灯的状态。



责任编辑:电气自动化网

热门文章

首页 | 资讯 | 应用 | 高压 | 设计 | 行业 | 低压 | 电路图 | 关于

Copyright 2017-2018 电气自动化网 版权所有 辽ICP备17010593号-1

电脑版 | 移动版

Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。