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

GPIO中断编程

1、目标

        实现KEY1中断,按下、松开按键,串口输出相应信息。

2、原理图

(1)按键:使用PA0引脚

(2)串口不是重点,略

3、配置GPIO

(1)使能GPIO;配置PA0为输入模式。

4、配置SYSCFG(系统配置控制器)

(1)系统配置控制器主要用于管理对可执行代码的存储区域的地址重映射、选择以太网 PHY 接口以及管理 GPIO 的外部中断线连接。

(2)将PA0映射到EXTI0。

(3)注意:STM32F1中GPIO与外部中断的映射配置是通过AFIO模块;STM32F4中是通过SYSCFG模块。

5、配置EXTI

(1)配置EXTI_RTSR、EXTI_FTSR,选择中断触发方式

(2)配置EXTI_IMR:允许EXTI发出中断

(3)清除中断

6、配置NVIC

(1)配置NVIC中的寄存器,允许NVIC把中断发给CPU。

(2)多个中断源汇聚到NVIC,NVIC的职责就是从多个中断源中取出优先级最高的中断,向CPU发出中断信号。 处理中断时,程序可以写NVIC的寄存器,清除中断。

7、程序

(1)GPIO 和 SYSCFG的配置

void key_init(void)
{unsigned int *pReg = NULL;pReg = (unsigned int *)(0x40023800 + 0x30);*pReg |= (0x01 << 0);                        /* 使能GPIOA时钟 */pReg = (unsigned int *)(0x40020000 + 0x00);*pReg &= (~(0x03 << 0));                     /* 配置PA0为输入模式 *//* 将PA0映射到EXTI0 */pReg = (unsigned int *)(0x40013800 + 0x08);  /* SYSCFG_EXTICR1 */*pReg &= ~(0x0F << 0);                       /* 清除EXTI0[3:0] */*pReg |= (0x00 << 0);                        /* 选择PA0作为EXTI0输入源 */    
}

(2)EXTI配置

void exti_init(void)
{EXTI_TypeDef *pReg = NULL;pReg = (EXTI_TypeDef *)(0x40013C00 + 0x00);/* 配置EXTI0为双边沿触发 */pReg->RTSR |= (0x01 << 0);   /* 使能上升沿触发 */pReg->FTSR |= (0x01 << 0);   /* 使能下降沿触发 */pReg->IMR |= (0x01 << 0);                     /* 使能EXTI0中断 */
}

(3)NVIC配置

void nvic_init(void)
{NVIC_Type *pReg = NULL;pReg = (NVIC_Type *)(0xE000E100);pReg->ISER[0] = (0x01 << 6);                 /* 使能EXTI0中断 */
}

(4)CPU

CPSIE I  ; 清除PRIMASK,使能中断

(5)中断程序

void EXTI0_IRQHandler(void)
{unsigned int *pReg = (unsigned int *)(0x40020000 + 0x10);if ((*pReg &(1<<0)) == 1){puts("KEY1 pressed.\r\n");                    }else{puts("KEY1 released.\r\n");} pReg = (unsigned int *)(0x40013C00 + 0x14);   /* EXTI_PR */*pReg |= (0x01 << 0);                         /* 清除EXTI0的挂起位 */pReg = (unsigned int *)(0xE000E100 + 0x180);  /* NVIC_ICPR[0] */*pReg |= (0x01 << 6);                         /* 清除NVIC的挂起位 *//* 注:NVIC_ICPRx 软件写1,用于手动清除挂起位 */
}

(6)NVIC说明

  • 若中断产生但并没有立即执行(例如有一个更高优先级的中断再处理),中断就会被挂起;
  • 挂起位可以软件清零或者软件设置;
  • NVIC 中 中断执行后,其挂起位会被硬件自动清零
http://www.dtcms.com/a/589215.html

相关文章:

  • 手机和pc合一的网站云南集优科技网站
  • 14.大语言模型微调语料构建
  • Docker 40个自动化管理脚本
  • 国外html5网站模版网站建设代码流程
  • 基于多智能体技术的码头车辆最快行驶路径方案重构
  • 网站备案空壳制作微信网站
  • Java119 反射使用
  • 基于springboot付费问答系统【带源码和文档】
  • 焦作官网网站推广工具如何制作一个报名微信小程序
  • Babylon.js中PBRMetallicRoughnessMaterial材质系统深度解析:从基础到工程实践
  • Linuxgit入门设计模式(常考点)
  • Arbess CICD实践(3) - 使用Arbess+GitPuk+sourcefare实现Node.js项目自动化部署+代码扫描
  • 设计网站的流程网站如何做地推
  • 力扣154. 寻找旋转排序数组中的最小值 II
  • React构建工具升级
  • @Transactional注解的切点匹配
  • 建设网站 请示 报告淘宝网站制作公司哪家好
  • leetcode1770.执行乘法运算的最大分数
  • 本溪市城乡住房建设厅网站国外做网站侵权
  • 虚拟化入门笔记
  • 物联网设备运维中的自适应硬件老化监测与寿命预测技术
  • dede网站建设360商城官网
  • 【云运维】LNMP 架构部署与应用
  • 【最长连续序列】
  • FreeRTOS抢占调度与时间片调度
  • AI 编程翻车实录 - 智谱 GLM 4.6 给的自信
  • Anygrasp_sdk本地部署和使用
  • 系统设计 --- 多节点中按顺序处理消息
  • 深圳高端企业官方网站建设海创网站建设
  • 【C#】何时用ref?