代码示例

key.h

#include "stm32mp1xx_exti.h"
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_gic.h"
/********PF9----KEY1***********/
//初始化EXIT层
void pf9_exti_init();
//初始化GICD层
void pf9_gicd_init();
//初始化GICC层
void gicc_init();                      //初始化EXIT层
void pf8_exti_init();
//初始化GICD层
void pf8_gicd_init();                  //初始化EXIT层
void pf7_exti_init();
//初始化GICD层
void pf7_gicd_init();
#endif                                 

key.c

#include "key.h"
/********PF9----KEY1***********/
//初始化EXIT层
void pf9_exti_init()
{/******RCC章节初始化****///1.设置GPIOF时钟使能RCC->MP_AHB4ENSETR |= (0X1<<5);/******GPIO章节初始化****///1.设置PF9引脚输入模式GPIOF->MODER &= (~(0X3<<18));/******EXIT章节初始化****///1.设置PF9引脚和EXTI9控制器进行连接EXTI->EXTICR3 |= (0X05<<8);//2.设置PF9引脚检测方式下降沿检测EXTI->FTSR1 |= (0X1<<9);//3.设置PF9引脚中断不屏蔽EXTI->C1IMR1 |= (0X1<<9);
}
void pf8_exti_init()
{GPIOF->MODER &= (~(0X3<<16)); //1.设置PF8引脚和EXTI8控制器进行连接EXTI->EXTICR3 |= (0X05<<0);//2.设置PF8引脚检测方式下降沿检测EXTI->FTSR1 |= (0X1<<8);//3.设置PF8引脚中断不屏蔽EXTI->C1IMR1 |= (0X1<<8);
}
void pf7_exti_init()
{GPIOF->MODER &= (~(0X3<<14));        //1.设置PF7引脚和EXTI7控制器进行连接 EXTI->EXTICR2 |= (0X05<<24);          //2.设置PF7引脚检测方式下降沿检测    EXTI->FTSR1 |= (0X1<<7);             //3.设置PF7引脚中断不屏蔽            EXTI->C1IMR1 |= (0X1<<7);
}//初始化GCID层
void pf9_gicd_init()
{//1.设置GICD层全局中断使能GICD->CTLR |= 0X1;//2.设置GICD层中断使能寄存器GICD->ISENABLER[3] |= (0X1<<3);//3.设置GICD层中断优先级寄存器GICD->IPRIORITYR[24] |= (0X1<<27); //4.设置GICD层中断目标分配GICD->ITARGETSR[24] |= (0X1<<24);
}
void pf8_gicd_init()
{//1.设置GICD层全局中断使能                                //2.设置GICD层中断使能寄存器          GICD->ISENABLER[3] |= (0X1<<2);       //3.设置GICD层中断优先级寄存器        GICD->IPRIORITYR[24] |= (0X1<<19);    //4.设置GICD层中断目标分配            GICD->ITARGETSR[24] |= (0X1<<16);
}
void pf7_gicd_init()
{//1.设置GICD层全局中断使能                       //2.设置GICD层中断使能寄存器       GICD->ISENABLER[3] |= (0X1<<1);    //3.设置GICD层中断优先级寄存器     GICD->IPRIORITYR[24] |= (0X1<<11); //4.设置GICD层中断目标分配         GICD->ITARGETSR[24] |= (0X1<<8);
}//初始化GICC层
void gicc_init()
{//1.设置GICC层全局中断使能寄存器GICC->CTLR |= 0X1;//2.设置GICC层中断优先级寄存器GICC->PMR |= (0X5<<3);
}

do_irq.c

#include "key.h"
extern void printf(const char *fmt, ...);
extern void delay_ms(int ms);
void do_irq(void)
{unsigned int num = 0;//获取中断号num = GICC->IAR & 0X3FF;switch(num){case 97:delay_ms(500);printf("key2#######\n");//清除EXTI层中断挂起标志位EXTI->FPR1 |= (0X1<<7);//清楚GICD层中断挂起标志位GICD->ICPENDR[3] |=(0X1<<1);break;case 98:delay_ms(500);printf("key3#######\n");//清除EXTI层中断挂起标志位EXTI->FPR1 |= (0X1<<8);//清楚GICD层中断挂起标志位GICD->ICPENDR[3] |=(0X1<<2);break;case 99:delay_ms(500);printf("key1#######\n");//清除EXTI层中断挂起标志位EXTI->FPR1 |= (0X1<<9);//清楚GICD层中断挂起标志位GICD->ICPENDR[3] |=(0X1<<3);break;}//清除中断号GICC->EOIR &= (~(0X3FF));GICC->EOIR |= num;
}

main.c

#include "key.h"
extern void printf(const char *fmt, ...);
void delay_ms(int ms)
{int i,j;for(i = 0; i < ms;i++)for (j = 0; j < 1800; j++);
}
int main()
{//1.EXTI初始化pf9_exti_init();//2.GICD初始化pf9_gicd_init();//初始化EXIT层         pf8_exti_init();  //初始化GICD层         pf8_gicd_init();  //初始化EXIT层        pf7_exti_init(); //初始化GICD层        pf7_gicd_init(); //3.GICC初始化gicc_init();   while(1){}return 0;
}

测试结果

9.17 实现KEY1,KEY2,KEY3三个按键按下打印信息相关推荐

  1. 【玩转STM32】:串口唤醒低功耗的三种方式/低功耗下打印数据

    在使用STM32做低功耗项目时,大概率会遇到一个问题:低功耗模式下想打印数据怎么办? 今天,学长给大家另辟蹊径,介绍一种使用串口唤醒低功耗的案例.方法.可设置三种唤醒方式:检测到起始位唤醒.检测到 R ...

  2. stm32按键输入实验c语言,stm32f103学习笔记(三)按键输入(IO口输入)

    学stm32第三天了,才学到按键输入,这进度也是醉了...谁叫俺c语言基础不行,还没有学过模数电呢.. 开发板上有4个按键:key0,key1,key2和wk_up,分别接在PE4,PE3,PE2和P ...

  3. 17秋 软件工程 团队第三次作业 预则立他山之石

    题目:团队作业-预则立&&他山之石 团队: 我说嘻(xì)哈(hà)你说侠 17秋 软件工程 团队第三次作业 预则立&他山之石 1.确立团队选题,建立和初步熟悉团队git的协作 ...

  4. android pc模式 刘祚虎,刘作虎:一加三段式按键安卓手机唯一 5年付出亿级成本...

    在小细节设计上如此执着的,国内手机品牌中,一加算是少数之一. 今日,刘作虎发微博称,一加可能是Android机里唯一保留三段式按键设计的品牌.从5年前至今我们付出了机身占用.亿级成本等等很多代价,但极 ...

  5. js设计一个带开关的时钟_数电题:三个按键一个灯

    有这样一道数电题: 一个LED发光二极管由A.B.C三个独立按键控制,要求按压A.B.C三个按键中的任意一个都能对LED实现亮.灭控制(即每按压一次按键,LED发光状态改变一次).请用D触发器或JK触 ...

  6. 运维经验分享(三)-- 解决Ubuntu下crontab不能正确执行脚本的问题

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dgd2010.blog.51cto.com/1539422/1676490 运维 ...

  7. 第五节 系统调用的三个层次(下) ——20135203齐岳

    第五节 系统调用的三个层次(下) By 20135203齐岳 本周的课程主要内容有三点: 在MenuOS中通过添加代码增加自定义的系统调用命令 使用gdb跟踪调试内核 简单分析system_call代 ...

  8. 从上到下打印二叉树的三种题型

    从上到下打印二叉树(一) 也就是我们所熟知的层序遍历 思路分析: 1.首先它需要返回的是一个数组,那么我们首先要做的就是new一个数组,而数组的大小需要我们遍历这棵二叉树计算出来 2. 当我们申请完数 ...

  9. KETTLE调度第三篇:Windows下调度Dos脚本编写和遇到的一些问题解决

    KETTLE调度第三篇:Windows下调度Dos脚本编写和遇到的一些问题解决 参考文章: (1)KETTLE调度第三篇:Windows下调度Dos脚本编写和遇到的一些问题解决 (2)https:// ...

最新文章

  1. 对python里的装饰器
  2. 怎么用计算机发出音乐声,解决方案:计算机技巧-如何使显示器的内置扬声器发出声音...
  3. RTP与RTCP协议介绍
  4. 为什么软件测试需要变革?
  5. 安卓手机软件开发_无代码手机app软件开发,让人人都是专业开发工程师
  6. python按照日期筛选数据_Pandas日期数据处理:如何按日期筛选、显示及统计数据...
  7. caffe运行问题(持续更新),sublime设置
  8. Spark2 文件处理和jar包执行
  9. 拷贝控制——拷贝、赋值与销毁
  10. 网络安全实效性衡量指南:如何作出准确评估
  11. Vmware WorkStation Pro 14 激活密钥
  12. 从JUnit4迁移到JUnit5:重要的区别和好处
  13. 凯恩帝绝对坐标清零_KND凯恩帝数系统说明书.doc
  14. 关于浏览器缓存,版本更新问题
  15. 悟空CRM系统项目测试
  16. 面试题——————JAVA完成人民币大写转化
  17. 英语四级计算机准考证号查询,2016英语四级准考证号忘了怎么查成绩
  18. 面对突如其来的新冠,“AI”可以做点什么?
  19. JavaScript系列之高级篇(2)
  20. 怎么彻底删除手机上的微信聊天记录?百看不如一试的删除方法!

热门文章

  1. ArcGIS操作系列14- 经纬度互换、换算成米、两点的经纬度计算两点间的距离
  2. https/http 413 416 错误
  3. (转)2018年国外主要实验室和科研团队成果和动向
  4. 两款在线同义词典,告别乏味表达!
  5. 苏州大学计算机考研有学硕吗,2021年苏州大学软件工程(083500)硕士研究生招生信息_考研招生计划和招生人数 - 学途吧...
  6. 人生,就是一路选择,一路坚持!
  7. oracle查询快慢,Oracle查询连接数和sql快慢脚本
  8. 随机森林python_实战:用Python实现随机森林
  9. linux下 恢复gho镜像,手动使用ghost恢复win7系统gho镜像包教程
  10. java研发简历怎么写_Java研发实习生入党个人简历怎么写