ToB企服应用市场:ToB评测及商务社交产业平台

标题: STM32-笔记5-按键点灯(中断方法) [打印本页]

作者: 魏晓东    时间: 3 天前
标题: STM32-笔记5-按键点灯(中断方法)

 1、复制03-流水灯项目,重定名06-按键点灯(中断法)

        在\Drivers\BSP目录下创建一个文件夹exti,在该文件夹下,创建两个文件exti.c和exti.h文件,而且把这两个文件加载到项目中,打开项目工程文件
         加载完新建的文件之后,找到exti.c文件双击打开,写入代码:
   #include "sys.h"
#include "exti.h"
  编译项目,编译通过,找到exti.h文件,双击打开,写入代码:
   #ifndef __EXTI_H__
#define __EXTI_H__
  
  #endif
  2、代码

 exti.c
  1. #include "sys.h"
  2. #include "exti.h"
  3. #include "delay.h"
  4. #include "led.h"
  5. void exti_init(void)
  6. {
  7.     //使能GPIO时钟
  8.    
  9.      GPIO_InitTypeDef gpio_initstruct;//定义一个结构体gpio_initstruct
  10.     //打开时钟-使能GPIO时钟
  11.     __HAL_RCC_GPIOA_CLK_ENABLE();
  12.    
  13.     //设置GPIO输入模式
  14.     //设置AFIO(开启时钟,IO口映射)
  15.     //设置EXTI(屏蔽,上/下沿)
  16.     //调用GPIO初始化函数
  17.     gpio_initstruct.Mode = GPIO_MODE_IT_FALLING;//下降沿输出//结构体函数的四种类型,引脚模式、引脚、引脚上拉下拉、引脚速度
  18.     gpio_initstruct.Pin = GPIO_PIN_0;//LED1对应的引脚
  19.     gpio_initstruct.Pull = GPIO_PULLUP;//上拉
  20.     HAL_GPIO_Init(GPIOA,&gpio_initstruct);
  21.     //设置NVIC(优先级分组,设置优先级,使能中断)
  22.     HAL_NVIC_SetPriority(EXTI0_IRQn,2,0);
  23.     HAL_NVIC_EnableIRQ(EXTI0_IRQn);
  24.    
  25. }
  26. //设置中断服务函数
  27. void EXTI0_IRQHandler(void)
  28. {
  29.     HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);
  30. }
  31. //回调函数
  32. void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
  33. {
  34.     delay_ms(20);
  35.     if(GPIO_Pin == GPIO_PIN_0)
  36.     {
  37.         if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == GPIO_PIN_RESET)
  38.             led1_Toggle();
  39.     }
  40. }
复制代码
 在
设置优先级分组进入函数

把这里的4改成2,优先级分组只需要设置一次
exti.h
  1. #ifndef __EXTI_H__
  2. #define __EXTI_H__
  3. void exti_init(void);
  4. #endif
复制代码
main.c
  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "led.h"
  4. #include "exti.h"
  5. int main(void)
  6. {
  7.     HAL_Init();                         /* 初始化HAL库 */
  8.     stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */
  9.     led_init();//初始化led灯
  10.    
  11.     exti_init();
  12.    
  13.     while(1)
  14.     {
  15.         led2_OFF();
  16.         delay_ms(500);
  17.         led2_ON();
  18.         delay_ms(500);
  19.     }
  20. }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4