当前位置: 首页 > article >正文

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

#include "sys.h"
#include "exti.h"
#include "delay.h"
#include "led.h"

void exti_init(void)
{
    //使能GPIO时钟
    
     GPIO_InitTypeDef gpio_initstruct;//定义一个结构体gpio_initstruct
    //打开时钟-使能GPIO时钟
    __HAL_RCC_GPIOA_CLK_ENABLE();
    
    //设置GPIO输入模式
    //设置AFIO(开启时钟,IO口映射)
    //设置EXTI(屏蔽,上/下沿)
    //调用GPIO初始化函数
    gpio_initstruct.Mode = GPIO_MODE_IT_FALLING;//下降沿输出//结构体函数的四种类型,引脚模式、引脚、引脚上拉下拉、引脚速度
    gpio_initstruct.Pin = GPIO_PIN_0;//LED1对应的引脚
    gpio_initstruct.Pull = GPIO_PULLUP;//上拉
    HAL_GPIO_Init(GPIOA,&gpio_initstruct);

    //设置NVIC(优先级分组,设置优先级,使能中断)
    HAL_NVIC_SetPriority(EXTI0_IRQn,2,0);
    HAL_NVIC_EnableIRQ(EXTI0_IRQn);
    
}
//设置中断服务函数
void EXTI0_IRQHandler(void)
{
    HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);
}
//回调函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
    delay_ms(20);
    if(GPIO_Pin == GPIO_PIN_0)
    {
        if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == GPIO_PIN_RESET)
            led1_Toggle();
    }
}

 在设置优先级分组进入函数

把这里的4改成2,优先级分组只需要设置一次

exti.h

#ifndef __EXTI_H__
#define __EXTI_H__

void exti_init(void);

#endif

main.c

#include "sys.h"
#include "delay.h"
#include "led.h"
#include "exti.h"

int main(void)
{
    HAL_Init();                         /* 初始化HAL库 */
    stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */
    led_init();//初始化led灯
    
    exti_init();
    
    while(1)
    { 
        led2_OFF();
        delay_ms(500);
        led2_ON();
        delay_ms(500);
    }
}


http://www.kler.cn/a/447548.html

相关文章:

  • 使用C语言编写UDP循环接收并打印消息的程序
  • node express服务器配置orm框架sequilize
  • 【自动化】Python SeleniumUtil 工具 开启开发者模式 自动安装油猴用户脚本等
  • 2024年港澳台华侨生联考师范类院校录取情况来
  • 【LeetCode】394、字符串解码
  • imu相机EKF
  • java线程
  • Unity实用技能-协作规范总结
  • MySQL数据库下载及安装教程
  • linux美化命令行
  • 文件I/O操作:C语言
  • 纯血鸿蒙APP实战开发——Text实现部分文本高亮和超链接样式
  • el-tabs标签过多
  • TCP与UDP的端口连通性
  • Ubuntu22.04安装CH340/CH341驱动
  • Python自动化测试图片比对算法
  • 电商项目-网站首页高可用(二)
  • 常用数据库类型介绍
  • 从 Vue 迈向 React:平滑过渡与关键注意点全解析
  • 翻转(蓝桥杯2023大学C组试题E)
  • 力扣274. H 指数
  • 【八大排序(二)】希尔排序
  • 5_HTML5 SVG (1) --[HTML5 API 学习之旅]
  • 深入理解贪心算法:核心概念与实践
  • 类的动态演绎:程序运行中的生命绽放
  • 多模态医学图像融合概述