12.26

news2025/1/21 15:41:42

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;

}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WorkPlus为企业打造私有化部署IM解决方案

在移动数字化时代&#xff0c;企业面临着如何全面掌控业务和生态的挑战。企业微信、钉钉、飞书、Teams等应用虽然提供了部分解决方案&#xff0c;但无法满足企业的私有化部署需求。此时&#xff0c;WorkPlus作为安全专属的移动数字化平台&#xff0c;被誉为移动应用的“航空母舰…

docker里面不能使用vim的解决办法

docker里面不能使用vim的解决办法 目录 docker里面不能使用vim的解决办法 1.在使用时会出现 2.在使用这些都不能解决的时候考虑 3.测试是否可用 1.在使用时会出现 bash: vim: command not found 出现这种错误时首先考虑使用 apt-get update 然后在用 apt-get install …

12个Python开发者必知必会的魔术方法

更多Python学习内容&#xff1a;ipengtao.com Python中的魔术方法&#xff08;Magic Methods&#xff09;是一组特殊的方法&#xff0c;它们以双下划线开头和结尾&#xff0c;例如__init__和__str__。这些方法可以定义自定义类的行为&#xff0c;使对象可以与Python的内置功能&…

固定本机在局域网中的 IP 地址

说明&#xff1a;以将 IP 地址固定为 192.168.1.107 为例 Step1、打开终端&#xff0c;输入以下命令查看网络信息&#xff1a; ipconfig -all 记住子网掩码、默认网关、DNS 服务器&#xff08;首选和备用&#xff09;信息&#xff0c;后面要用&#xff1a; Step2、进入 “控制…

AI产品经理 - 如何做一款软硬协同AI产品

【背景】从0做一款软硬协同的AI产品&#xff0c;以智能医药保温箱 1.以智能医药保温箱 2.调研定义市场方向 地点&#xff1a;医药、实验室 场景&#xff1a;长宽高/装箱/运输/实验室 3.需求挖掘 4.如何进行软硬件AI产品工作 软硬件产品设计&#xff1a;功能/硬件外观设计、…

nodejs+vue+微信小程序+python+PHP技术的健康信息网站-计算机毕业设计推荐

3.2 功能性需求分析 健康信息网站为会员提供健康信息服务的系统&#xff0c;管理员通过登录系统&#xff0c;管理会员信息、健康咨询、健康知识、健康档案、健康养生、健康信息的搜索、健康资讯等。需要学习的会员浏览健康信息网站&#xff0c;查询所有的健康信息&#xff0c;可…

基于PHP的校园代购商城系统

有需要请加文章底部Q哦 可远程调试 基于PHP的校园代购商城系统 一 介绍 此校园代购商城系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。(附带参考设计文档) 技术栈&#xff1a;phpmysqlbootstrapphpstudyvscode 二 功能 …

鸿蒙开发中的一些小问题

这是我在学习鸿蒙开发中遇见的小问题 Q1&#xff1a;This custom component must have a build function. <etsLint>Q2&#xff1a;page_title is not translated into en_US(American English)Q3&#xff1a;Module "../CustomComponent/CustomButton" declar…

2023-12-25 LeetCode每日一题(不浪费原料的汉堡制作方案)

2023-12-25每日一题 一、题目编号 1276. 不浪费原料的汉堡制作方案二、题目链接 点击跳转到题目位置 三、题目描述 圣诞活动预热开始啦&#xff0c;汉堡店推出了全新的汉堡套餐。为了避免浪费原料&#xff0c;请你帮他们制定合适的制作计划。 给你两个整数 tomatoSlices …

机器学习:贝叶斯估计在新闻分类任务中的应用

文章摘要 随着互联网的普及和发展&#xff0c;大量的新闻信息涌入我们的生活。然而&#xff0c;这些新闻信息的质量参差不齐&#xff0c;有些甚至包含虚假或误导性的内容。因此&#xff0c;对新闻进行有效的分类和筛选&#xff0c;以便用户能够快速获取真实、有价值的信息&…

2024年原创深度学习算法项目分享

原创深度学习算法项目分享&#xff0c;包括以下领域&#xff1a; 图像视频、文本分析、知识图谱、推荐系统、问答系统、强化学习、机器学习、多模态、系统界面、爬虫、增量学习等领域… 有需要的话&#xff0c;评论区私聊

2023-12-14 LeetCode每日一题(用邮票贴满网格图)

2023-12-14每日一题 一、题目编号 2132. 用邮票贴满网格图二、题目链接 点击跳转到题目位置 三、题目描述 给你一个 m x n 的二进制矩阵 grid &#xff0c;每个格子要么为 0 &#xff08;空&#xff09;要么为 1 &#xff08;被占据&#xff09;。 给你邮票的尺寸为 stam…

回顾2023,我的编程学习之旅

文章目录 前言我与C语言初识C语言简易扫雷游戏二进制的美妙神奇的指针强大的结构体灵活的动态内存管理总结 我与竞赛我与CSDN结语 前言 6月8号高考结束了&#xff0c;虽然还没有出分&#xff0c;但是也大致规划好自己想学什么专业了&#xff0c;没错就是计算机&#xff0c;出分…

常见推断方法一览:极大似然估计、最大后验估计、期望最大化、贝叶斯推断、马尔科夫链蒙特卡洛方法、变分推断

常见推断方法一览 推断方法区别频率派极大似然估计 MLE最大后验估计 MAP期望最大化 EM 贝叶斯推断 Bayesian马尔科夫链蒙特卡洛方法 MCMC变分推断 VI 推断方法区别 极大似然估计 (Maximum Likelihood Estimation, MLE): 解释: 假设你有一堆骰子&#xff0c;你投掷它们很多次&am…

Vue中目录以及文件内容简单分析

src文件下目录分析&#xff1a; App.vue文件中内容&#xff1a; vue文件中基本的三个结构&#xff0c;template&#xff08;结构&#xff09;、script&#xff08;行为&#xff09; 、style&#xff08;样式&#xff09;。 <template><!-- html结构 --><div cl…

Linux xxd命令分析视频文件Box教程(box分析box、视频box、分析atom分析)(xdd指令)

文章目录 Linux xxd命令分析视频文件Box教程一、理解MP4格式二、xxd命令简介三、使用xxd命令分析MP4文件四、解析MP4文件的疑难点1. Box的嵌套结构2. 长度和类型字段的字节序3. 非文本类型的数据 五、python代码解析box嵌套结构的示例 Linux xxd命令分析视频文件Box教程 本文主…

静物摄影在UE5里运用几点记要

被摄体&#xff0c;相机与光源的关系&#xff0c;要增强立体感&#xff0c;摄像机与光源的位置关系要错开&#xff1b;b的立体感要更强 漫反射与点光源&#xff0c;UE5太阳光属于漫反射&#xff0c;整体比较柔和&#xff0c;但是阴影处比较黑&#xff1b;摄影棚会用反光板来增亮…

计算机网络技术概述 习题答案及解析

1-1 因特网的前身是 1969 年创建的第一个分组交换网&#xff08; D &#xff09;。 A. internet B. Internet C. NSFNET D. ARPANET 【答案】D 1-2 因特网上的数据交换方式是&#xff08; C &#xff09;。 A. 电路交换 B. 报文交换 C. 分组交换 D…

ES应用_ES实战

依靠知识库使用es总结一些使用技巧。 1 快速入门 ES是将查询语句写成类似json的形式&#xff0c;通过关键字进行查询和调用。 1.1 创建 下面创建了一个主分片为5&#xff0c;副本分片为1的ES结构。ES本身是一种noschema的结构&#xff0c;但是可以通过指定mapping编程schema的…

Unity关于动画混合树(Blend Tree)的使用

在动画与动画的切换过程中&#xff0c;常因为两个动画之间的差距过大&#xff0c;而显得动画的切换很不自然。 这时候就需要动画混合树Blend Tree这个功能。使用混合树可以将多个动画混合在一起&#xff0c;例如在处理角色的移动中&#xff0c;走动画与跑动画切换的时候&#x…