12.26

key_it.c

#include"key_it.h"
void led_init()
{
    // 设置GPIOE/GPIOF时钟使能
    RCC->MP_AHB4ENSETR |= (0x3 << 4);
    // 设置PE10/PE8/PF10为输出模式
    GPIOE->MODER &= (~(0x3 << 20));
    GPIOE->MODER |= (0x1 << 20);
    GPIOE->MODER &= (~(0x3 << 16));
    GPIOE->MODER |= (0x1 << 16);
    GPIOF->MODER &= (~(0x3 << 20));
    GPIOF->MODER |= (0x1 << 20);
    // 设置PE10/PE8/PF10为推挽输出
    GPIOE->OTYPER &= (~(0x1 << 10));
    GPIOE->OTYPER &= (~(0X1 << 8));
    GPIOF->OTYPER &= (~(0x1 << 10));
    // 设置PE10/PE8/PF10输出速度为低速
    GPIOE->OSPEEDR &= (~(0x3 << 20));
    GPIOE->OSPEEDR &= (~(0X3 << 16));
    GPIOF->OSPEEDR &= (~(0x3 << 20));
    // 设置PE10/PE8/PF10无上拉下拉
    GPIOE->PUPDR &= (~(0x3 << 20));
    GPIOE->PUPDR &= (~(0X3 << 16));
    GPIOF->PUPDR &= (~(0X3 << 20));
}

void key1_it_config()
{
    //使能GPIOF时钟
    RCC->MP_AHB4ENSETR |= (0x1<<5);

    //设置PF9管脚为输入
    GPIOF->MODER &= (~(0x3<<18));

    //设置PF9作为EXTI9事件的输入
    EXTI->EXTICR3 &= (~(0x1f<<8));
    EXTI->EXTICR3 |= (0x05<<8);
    
    //设置下降沿使能检测EXTI9事件
    EXTI->FTSR1 |= (0x1<<9);

    //设置EXTI9事件不屏蔽
    EXTI->C1IMR1 |= (0x1<<9);

    //GICD使能EXTI9(99号)中断
    GICD->ISENABLER[3] |= (0x1<<3);

    //GICD 设置99号中断的优先级
    GICD->IPRIORITYR[24] &= (~(0x1f<<27));

    //选择CPU0处理当前中断
    GICD->ITARGETSR[24] |= (0x1<<24);

    //全局使能组0中断被转发到GICC
    GICD->CTRL |= (0X1);

    //设置中断的优先级掩码
    GICC->PMR |= (0x1f<<3);

    //允许组0中断被CPU处理
    GICC->CTRL |= (0x1);
}
void key2_it_config()
{
       //设置PF7管脚为输入
    GPIOF->MODER &= (~(0x3<<14));

    //设置PF7作为EXTI7事件的输入
    EXTI->EXTICR2 &= (~(0x1f<<24));
    EXTI->EXTICR2 |= (0x05<<24);
    
    //设置下降沿使能检测EXTI7事件
    EXTI->FTSR1 |= (0x1<<7);

    //设置EXTI7事件不屏蔽
    EXTI->C1IMR1 |= (0x1<<7);

    //GICD使能EXTI7(97号)中断
    GICD->ISENABLER[3] |= (0x1<<1);

    //GICD 设置97号中断的优先级
    GICD->IPRIORITYR[24] &= (~(0x1f<<11));

    //选择CPU0处理当前中断
    GICD->ITARGETSR[24] |= (0x1<<8);

    //全局使能组0中断被转发到GICC
    GICD->CTRL |= (0X1);

    //设置中断的优先级掩码
    GICC->PMR |= (0x1f<<3);
    
    //允许组0中断被CPU处理
    GICC->CTRL |= (0x1);
}
void key3_it_config()
{
      //设置PF8管脚为输入
    GPIOF->MODER &= (~(0x3<<16));

    //设置PF8作为EXTI8事件的输入
    EXTI->EXTICR3 &= (~0x1f);
    EXTI->EXTICR3 |= (0x05);
    
    //设置下降沿使能检测EXTI8事件
    EXTI->FTSR1 |= (0x1<<8);

    //设置EXTI8事件不屏蔽
    EXTI->C1IMR1 |= (0x1<<8);

    //GICD使能EXTI8(98号)中断
    GICD->ISENABLER[3] |= (0x1<<2);

    //GICD 设置98号中断的优先级
    GICD->IPRIORITYR[24] &= (~(0x1f<<19));

    //选择CPU0处理当前中断
    GICD->ITARGETSR[24] |= (0x1<<16);

    //全局使能组0中断被转发到GICC
    GICD->CTRL |= (0X1);

    //设置中断的优先级掩码
    GICC->PMR |= (0x1f<<3);
    
    //允许组0中断被CPU处理
    GICC->CTRL |= (0x1); 
}

do_irq.c

#include "key_it.h"
extern void printf(const char *fmt, ...);
unsigned int i = 0;
void do_irq(void) 
{
   int irqno = (GICC->IAR & 0x3ff);
    switch (irqno)
    {
    case 99: // key1
        printf("KEY1_INT\n");
          GPIOE->ODR |= (0x1<<10);
        // 清除GICD的中断排队标志
        GICD->ICPENDR[3] |= (0x1<<3);
        // 清除exti的事件触发标志
        EXTI->FPR1 |= (0x1<<9);
        delay(2000);
         GPIOE->ODR &= (~(0x1<<10));
        break;
    case 97: // KEY2
        printf("KEY2_INT\n");
         GPIOF->ODR |= (0x1<<10);
         // 清除GICD的中断排队标志
        GICD->ICPENDR[3] |= (0x1<<1);
        // 清除exti的事件触发标志
        EXTI->FPR1 |= (0x1<<7);
        delay(2000);
         GPIOF->ODR &= (~(0x1<<10));
        break;
    case 98: // key3
        printf("KEY3_INT\n");
         GPIOE->ODR |= (0x1<<8);
         // 清除GICD的中断排队标志
        GICD->ICPENDR[3] |= (0x1<<2);
        // 清除exti的事件触发标志
        EXTI->FPR1 |= (0x1<<8);
        delay(2000);
         GPIOE->ODR &= (~(0x1<<8));
        break;
    }
    // 清除中断号
    GICC->EOIR = irqno;

}

main.c

#include "key_it.h"

void delay(int ms)

{

  int i,j;

  for(i=0;i<ms;i++)

  {

    for(j=0;j<2000;j++);

  }

}

int main()

{

  led_init();

  key1_it_config();

  key2_it_config();

  key3_it_config();

    while (1)

    {

        printf("do main...\n");

        delay(1000);

    }

    return 0;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/281294.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何在iterm2的命令行中快速移动

文章目录 一、打开Preferences设置二、进行key的映射三、修改键值四、参考文献 一、打开Preferences设置 二、进行key的映射 三、修改键值 四、参考文献 Mac下iTerm2光标按照单词快速移动设置

【回顾 展望】我的2023年度总结

2023年度关键词 学生时代终将绕不开的学习我的健身水平何时能重回巅峰&#xff1f;对生活前所未有的渴望接下来的2024是否能够微笑面对 最近发现了一个比较有意思的事&#xff0c;各大APP都在推我在这个APP的使用方面的2023年度总结&#xff0c;各个up主&#xff0c;也都在发各…

开发知识点-JAVA图形化-JavaFX

JavaFX JavaFX通用漏洞利用工具开发从无到无环境配置vscode配置JavaFX JavaFX基本程序结构创建项目新建一个包新建入口类&#xff08;主类&#xff09;新建&#xff08;FX&#xff09;label标签 创建按钮 JavaFX应用的 Stage窗口JavaFX应用的 Scene 场景类Node UI控件的通用属性…

纯CSS3制作优惠券线性UI效果

纯CSS3制作优惠券线性UI效果-遇见你与你分享

自激振荡电路笔记 电弧打火机

三极管相关 三极管的形象描述 二极管 简单求解&#xff08;理想&#xff09; 优先导通&#xff08;理想&#xff09; 恒压降 稳压管&#xff08;二极管plus&#xff09; 基础工作模块 理想稳压管的工作特性 晶体管之三极管(“两个二极管的组合” ) 电弧打火机电路 1.闭合开…

nodejs微信小程序+python+PHP的冷链物流配送系统-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

推荐几个开源HTTP服务接口快速生成工具

在现在流行微服务、前后端分离软件开发架构下&#xff0c;基于标准RESTful/JSON的HTTP接口已经成为主流。在实际业务中有很多需要快速开发调用数据服务接口的需求&#xff0c;但团队中缺乏专业的后端开发人员&#xff0c;比如&#xff1a; &#xff08;1&#xff09;数据库表已…

Java定时器

目录 什么是定时器&#xff1f; 如何使用定时器&#xff1f; schedule Timer的构造方法 cancel 定时器的模拟实现 思路分析 实现过程 完整代码 什么是定时器&#xff1f; 定时器&#xff1a;即在设定的时间时执行某事的设备&#xff08;例如闹钟&#xff0c;在指定的时…

python期刊稿件在线投稿系统q2ud0

本系统的用户可分为管理员、投稿者、审稿人和编辑四个用户角色组成。管理员可以管理系统内所有功能&#xff0c;主要有个人中心、投稿者管理、审稿人管理、编辑管理、个人稿件管理、审核稿件管理、稿件信息管理、类型管理等功能&#xff1b;编辑登录系统主要有个人中心、审核稿…

大模型训练过程概述

上图来自 Andrej Karpathy&#xff0c;深度学习的大拿&#xff0c;目前在Tesla。这张图的信息量相当大&#xff0c;通过该图能让我们对大模型的整个训练过程有一个总体的了解。 从该图可知大模型训练主要有4步&#xff1a; Pretraining — 预训练阶段 Supervised Finetuning&…

透过许战海矩阵洞察安记食品增长战略

引言&#xff1a;安记食品如果想实施增长战略&#xff0c;建议深耕招牌产品,走向全国市场,目前招牌产品咖哩和复合调味粉市场空间没有被全面释放出来,需要科学的产品战略作为支撑。安记食品选择功能性产品方向是正确的,但“功能性”需要一个大品类作为载体,牛奶,饮料是最大的载…

C# Onnx yolov8n forklift detection

目录 效果 模型 项目 代码 下载 C# Onnx yolov8n forklift detection 效果 模型 Model Properties ------------------------- date&#xff1a;2023-12-25T16:22:05.530078 author&#xff1a;Ultralytics task&#xff1a;detect license&#xff1a;AGPL-3.0 https:/…

牛客网SQL训练4—SQL进阶挑战

文章目录 一、增删改操作1. 插入记录2. 更新记录3. 删除记录 二、表与索引操作1. 表的创建、修改与删除2. 索引的创建、删除 三、聚合分组查询1. 聚合函数2. 分组查询 四、多表查询1. 嵌套子查询2. 合并查询3. 连接查询 五、窗口函数1. 专用窗口函数2. 聚合窗口函数 六、其他常…

分布式【4. 什么是 CAP?】

什么是 CAP&#xff1f; C 代表 Consistency&#xff0c;一致性&#xff0c;是指所有节点在同一时刻的数据是相同的&#xff0c;即更新操作执行结束并响应用户完成后&#xff0c;所有节点存储的数据会保持相同。 A 代表 Availability&#xff0c;可用性&#xff0c;是指系统提…

开源radishes高仿网易云音乐完整源码,可试听和下载“灰色”歌曲,跨平台的无版权音乐平台

源码介绍 Radishes是项目名称&#xff0c;是由萝卜翻译而来。可以在这里试听和下载“灰色”歌曲&#xff0c;是一个可以跨平台的无版权音乐平台。 萝卜音乐界面和功能参考 windows 网易云音乐界面和 ios 的网易云音乐 安装依赖 cd radishes/ yarn bootstrap 运行项目 web:…

【回溯】0-1背包Python实现

文章目录 [toc]问题描述形式化描述 回溯法时间复杂性Python实现 个人主页&#xff1a;丷从心 系列专栏&#xff1a;回溯法 问题描述 给定 n n n种物品和一背包&#xff0c;物品 i i i的重量是 w i w_{i} wi​&#xff0c;其价值为 v i v_{i} vi​&#xff0c;背包的容量为 c …

力扣每日一题99:恢复二叉搜索树

题目 给你二叉搜索树的根节点 root &#xff0c;该树中的 恰好 两个节点的值被错误地交换。请在不改变其结构的情况下&#xff0c;恢复这棵树 。 示例 1&#xff1a; 输入&#xff1a;root [1,3,null,null,2] 输出&#xff1a;[3,1,null,null,2] 解释&#xff1a;3 不能是 1 …

vue保姆级教程----组件之间的参数传递

&#x1f4e2; 鸿蒙专栏&#xff1a;想学鸿蒙的&#xff0c;冲 &#x1f4e2; C语言专栏&#xff1a;想学C语言的&#xff0c;冲 &#x1f4e2; VUE专栏&#xff1a;想学VUE的&#xff0c;冲这里 &#x1f4e2; CSS专栏&#xff1a;想学CSS的&#xff0c;冲这里 &#x1f4…

QT 输入框输入限制 正则表达式限制 整理

在使用 输入数值时&#xff0c;经常遇到限制其范围的需要&#xff0c;比如角太阳高度角范围为[-90,90]&#xff0c;经度值范围[-180,180]&#xff0c;方位角范围[0,360]。Qt提供了QIntValidator和QDoubleValidator可以限定数值输入范围&#xff0c;如使用QIntValidator限制整数…

RK3568测试tdd

RK3568测试tdd 一、门禁取包二、烧录三、跑tdd用例四、查看结果参考资料 一、门禁取包 右键复制链接&#xff0c;粘贴下载&#xff1b;解压到文件夹&#xff1b; 二、烧录 双击\windows\RKDevTool.exe打开烧写工具&#xff0c;工具界面击烧写步骤如图所示&#xff1a; 推荐…