STM32F401利用CubeMX实现按键中断翻转LED

2019-07-18来源: eefocus关键字:STM32F401  CubeMX  按键中断  翻转LED

硬件平台:NucleoF401RE


软件环境:CubeMX+Kiel5


硬件说明:参考Nucleo板子原理图,用户按键链接IO为PC13,LED链接IO为PA5;



如上搞清楚资源链接关系,就可以利用CubeMX进行初始化代码生成配置,比较简单。需要注意的是在中断嵌套部分需要设置外部中断10-15LINES;


利用CubeMX工具生产代码,下面对部分代码进行说明。


CubeMX生成初始化代码配置后,用户字需要添加自己业务需要的功能即可。


中断函数全部在stm2f4xx_it.c当中,如下所示:


/******************************************************************************/

/* STM32F4xx Peripheral Interrupt Handlers                                    */

/* Add here the Interrupt Handlers for the used peripherals.                  */

/* For the available peripheral interrupt handler names,                      */

/* please refer to the startup file (startup_stm32f4xx.s).                    */

/******************************************************************************/

 

/**

* @brief This function handles EXTI line[15:10] interrupts.

*/

void EXTI15_10_IRQHandler(void)

{

  /* USER CODE BEGIN EXTI15_10_IRQn 0 */

 

  /* USER CODE END EXTI15_10_IRQn 0 */

  HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13);

  /* USER CODE BEGIN EXTI15_10_IRQn 1 */

 

  /* USER CODE END EXTI15_10_IRQn 1 */

}

如上可以看出,中断触发后会调用HAL_GPIO_EXIT_IRQHandler()函数,其定义原型位于stm32f4xx_hal_gpio.c文件当中。


/**

  * @brief  This function handles EXTI interrupt request.

  * @param  GPIO_Pin Specifies the pins connected EXTI line

  * @retval None

  */

void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)

{

  /* EXTI line interrupt detected */

  if(__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != RESET)

  {

    __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);

    HAL_GPIO_EXTI_Callback(GPIO_Pin);

  }

}

 

/**

  * @brief  EXTI line detection callbacks.

  * @param  GPIO_Pin Specifies the pins connected EXTI line

  * @retval None

  */

__weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)

{

  /* Prevent unused argument(s) compilation warning */

  UNUSED(GPIO_Pin);

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

           the HAL_GPIO_EXTI_Callback could be implemented in the user file

   */

}

如上回调函数,定义了UNUSED(GPIO_PIN)虚拟函数,注释中说明了如果需要实现回调功能,需要用户自己在User文件当中定义实现,如下在main.c中重新定义回调函数:


/* USER CODE BEGIN 4 */

void HAL_GPIO_EXTI_Callback (uint16_t GPIO_Pin)

{

    if(GPIO_Pin == GPIO_PIN_13)

        HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);

}

/* USER CODE END 4 */

中断发生时,调用回调函数需要判断是哪个IO引起的,分别对应地去实现自定义的功能。


关键字:STM32F401  CubeMX  按键中断  翻转LED

编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic468405.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM32使用寄存器工程模板点亮一个LED灯
下一篇:STM32总结一 STM32三种点亮LED灯方式的不同之处

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

基于STM32F103ZET6主控平台实现定时器TIM3的驱动

_Clock_Init(9);   //系统时钟设置 delay_init(72);     //延时初始化 uart_init(72,115200); //串口初始化为115200 LED_Init(); BEEP_Init(); TIM3_Init(4999,7199); while(1) { if(Wl_stat==0)//代表进入WHILE循环 { printf("Input While(1)-->rn"); Wl_stat=1; } LED1=!LED1; delay_ms(200); }} 第四步:编译通过后,烧录进STM32F103ZET6开发板,实现
发表于 2019-08-22

STM32f103ZET6定时器TIM3使用通道1输出PWM程序

总结:TIM3_CH1输出口为PA6(重映射为PB4),PB5位DS0接口。1.使用重映射之后,原始IO口不再有输出;本例子中,若使用部分重映射,则 PA6映射到PB4中,所以仅仅PB4有波形输出;飞线连接PB4与PB5即可观察PWM呼吸灯效果。2.使用IO口前务必初始化,本例子中开始仅仅初始化了PB5口,而没有初始化PA6导致一直验证失败;正点原子给出程序中是由通道2直接映射到PB5因此只需要初始化PB5口即可,不存在上述问题。3.除了正常输出输入信号之外,输出PWM以及其他功能均属于IO口的复用功能。#include "stm32f10x.h"#include "led.h"
发表于 2019-08-22

stm32f0设置tim2单脉冲模式-tim1内部触发

/***************************************************************************************************************以下TIM1和TIM2的设置实现TIM1输出40hz,占空比7%即高电平输出180us,TIM2输出单脉冲,周期360us,占空比50%,TIM2的触发是TIM1的OC1REF信号。TIM2设置单脉冲需设置的参数:  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;    TIM_SelectOnePulseMode(TIM2,TIM_OPMode_Single);//单脉冲  TIM_SelectInputTrigger(TIM2, TIM_TS_ITR0);//定时器1内部触发 
发表于 2019-08-22
stm32f0设置tim2单脉冲模式-tim1内部触发

STM32F103 使用TIM3产生四路PWM

为PC6、PC7、PC8、PC9*******************************************************************************/#include"stm32f10x.h"void RCC_Cfg(void);void GPIO_Cfg(void);void TIM_Cfg(void);void NVIC_Cfg(void);void delay_ms(u32 i);void PWM_Cfg(float dutyfactor1,float dutyfactor2,float dutyfactor3,float dutyfactor4); int
发表于 2019-08-22
STM32F103 使用TIM3产生四路PWM

STM32F10 OLED液晶显示(IIC)

2019年7月27日做小车的第六天。今天我实现了一个新的功能 OLED显示汉字。刚开始学习这个显示汉字的时候也是一头污水,代码啊大部分看不懂,看OLED讲解的那个视频反复看了好几遍。还是没什么思路。但是那自己慢慢的开始修改自带的源代码,尝试的去做,从显示点、线、字符、字符串一步步的开始进行,随着这个一步步的学会,显示汉字那,哈哈,原理也是差不多。大致思路也就是调用.c中的函数,设置里面的变量,去调出自己想要的字符,汉字的代码(这些代码都是在一个数组里)先说说重要的,怎么显示出汉字:比如我们想让OLED显示屏显示一个字符串:“CODE”,主函数是这么两条语句:OLED_ShowString(63,48,“CODE:”,16
发表于 2019-08-22
STM32F10 OLED液晶显示(IIC)

STM32F103_SD卡FatFs文件系统移植

;       status = RES_OK;            break;至此diskio.c移植完成三、ffconfig.h需要修改的参数如下:  //准许使用文件字符串函数: f_gets(), f_putc(), f_puts() and/  f_printf()#define    _USE_STRFUNC    1    //支持格式化函数f_mkfs()#define    _USE_MKFS   
发表于 2019-08-22
STM32F103_SD卡FatFs文件系统移植

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved