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

ARMday7

VID_20240322_203313

1.思维导图

2.main.c

#include"key_inc.h"
//封装延时函数
void delay(int ms)
{int i,j;for(i=0;i<ms;i++){for(j=0;j<2000;j++){}}
}
int main()
{//按键中断的初始化key1_it_config();key2_it_config();key3_it_config();while(1){printf("in main pro\n");delay(1000);}return 0;
}

3.key_inc.c

 #include"key_inc.h"void key1_it_config(){//使能GPIOF外设时钟RCC->MP_AHB4ENSETR |= (0x1<<5);//将PF9设置为输入模式GPIOF->MODER &= (~(0x3<<18));//设置由PF9管脚产生EXTI9事件EXTI->EXTICR3 &= (~(0XFF<<8));EXTI->EXTICR3|= (0X05<<8);//通过下降沿检测EXTI9事件是否产生EXTI->FTSR1 |= (0x1<<9);//取消EXTI9中断屏蔽EXTI->C1IMR1 |= (0x1<<9);//设置EXTI9中断全局使能GICD->ISENABLER[3] |= (0x1<<3);//设置中断优先级GICD->IPRIORITYR[24] &= (~(0x1f<<27));//设置CPU0处理当前中断GICD->ITARGETSR[24] |= (0x1<<24);//设置组0中断可以被转发到GICC层GICD->CTRL |=0X1;//设置中断优先级掩码GICC->PMR |= (0x1f<<3);//设置组0中断交给指定处理器处理GICC->CTRL |= 0x1;}void key2_it_config(){//使能GPIOF外设时钟//RCC->MP_AHB4ENSETR |= (0x1<<5);//将PF7设置为输入模式GPIOF->MODER &= (~(0x3<<14));//设置由PF7管脚产生EXTI7事件EXTI->EXTICR2 &= (~(0XFF<<24));EXTI->EXTICR2|= (0X05<<24);//通过下降沿检测EXTI7事件是否产生EXTI->FTSR1 |= (0x1<<7);//取消EXTI7中断屏蔽EXTI->C1IMR1 |= (0x1<<7);//设置EXTI7中断全局使能GICD->ISENABLER[3] |= (0x1<<1);//设置中断优先级GICD->IPRIORITYR[24] &= (~(0x1f<<11));//设置CPU0处理当前中断GICD->ITARGETSR[24] |= (0x1<<8);//设置组0中断可以被转发到GICC层GICD->CTRL |=0X1;//设置中断优先级掩码GICC->PMR |= (0x1f<<3);//设置组0中断交给指定处理器处理GICC->CTRL |= 0x1;}void key3_it_config(){//使能GPIOF外设时钟//RCC->MP_AHB4ENSETR |= (0x1<<5);//将PF8设置为输入模式GPIOF->MODER &= (~(0x3<<16));//设置由PF8管脚产生EXTI9事件EXTI->EXTICR3 &= (~(0XFF));EXTI->EXTICR3|= (0X05);//通过下降沿检测EXTI8事件是否产生EXTI->FTSR1 |= (0x1<<8);//取消EXTI8中断屏蔽EXTI->C1IMR1 |= (0x1<<8);//设置EXTI8中断全局使能GICD->ISENABLER[3] |= (0x1<<2);//设置中断优先级GICD->IPRIORITYR[24] &= (~(0x1f<<19));//设置CPU0处理当前中断GICD->ITARGETSR[24] |= (0x1<<16);//设置组0中断可以被转发到GICC层GICD->CTRL |=0X1;//设置中断优先级掩码GICC->PMR |= (0x1f<<3);//设置组0中断交给指定处理器处理GICC->CTRL |= 0x1;}

4.do_irq.c

#include "stm32mp1xx_gic.h"
#include "stm32mp1xx_exti.h"
extern void printf(const char *fmt, ...);
unsigned int i = 0;
void do_irq(void) 
{//获取要处理的中断的中断号unsigned int irqno=GICC->IAR&0x3ff;switch (irqno){case 97:printf("key2_intc\n");//清除GICD中断排队标志GICD->ICPENDR[3] |= (0X1<<1);//清除EXTI中断触发标志EXTI->FPR1 |= (0X1<<7);break;    case 98:printf("key3_intc\n");//清除GICD中断排队标志GICD->ICPENDR[3] |= (0X1<<2);//清除EXTI中断触发标志EXTI->FPR1 |= (0X1<<8);break;    case 99:printf("key1_intc\n");//清除GICD中断排队标志GICD->ICPENDR[3] |= (0X1<<3);//清除EXTI中断触发标志EXTI->FPR1 |= (0X1<<9);break;default:break;}//清除IAR寄存器中的中断号GICC->EOIR |= irqno;
}

5.key_inc.h

#ifndef __KEY_INC_H__
#define __KEY_INC_H__
#include "stm32mp1xx_gic.h"
#include "stm32mp1xx_exti.h"
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_gpio.h"void key1_it_config();void key2_it_config();void key3_it_config();
#endif
http://www.lryc.cn/news/323473.html

相关文章:

  • Ubuntu中安装VSCode的一个指令
  • 生活电子产品拆解分析~汇总目录
  • Tkinter 一文读懂
  • 2核4G服务器阿里云性能测评和优惠价格表
  • Day41:WEB攻防-ASP应用HTTP.SYS短文件文件解析Access注入数据库泄漏
  • 什么是单点登录?
  • elasticsearch的数据搜索
  • 云原生相关概念(小白版)
  • Dell戴尔XPS 12 9250二合一笔记本电脑原装出厂Windows10系统包下载
  • YOLOv5改进 | 图像去雾 | 利用图像去雾网络AOD-PONO-Net网络增改进图像物体检测(全网独家首发)
  • 代码随想录算法训练营Day55 ||leetCode 583. 两个字符串的删除操作 || 72. 编辑距离
  • Hive常用函数 之 数值处理
  • 策略模式在项目中实际应用
  • 没有磁盘整列下的多机分布式存储:使用rysnc+多服务器文件/文件夹内容同步
  • SQL:窗口函数之OVER()
  • 嵌入式开发--STM32G431RBTx-定时器中断流水灯
  • 人像抠图HumanSeg——基于大规模电话会议视频数据集的连接感知人像分割
  • Qt 项目使用visual studio 进行开发调试
  • Kotlin 中的惰性集合
  • 2024年React初学者入门路线指南
  • 【Java基础】了解Java安全体系JCA,使用BouncyCastle的ED25519算法生成密钥对、数据签名
  • SQL Server创建存储过程
  • GraphPad Prism 10:一站式数据分析解决方案
  • 前端基础篇-深入了解 Ajax 、Axios
  • 是德科技keysight N1912A双通道功率计
  • 怿星科技Neptune CHT-S测试系统,让智能座舱测试更加高效便捷
  • Vscode初建Vue时几个需要注意的问题
  • 最长不下降子序列
  • QT gridlayout 循环设置组件,表格也通用 已解决
  • 后端前行Vue之路(一):初识Vue