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

嵌入式STM32学习——外部中断震动感应灯

本文展示了一个基于STM32F10x系列微控制器的按键中断练习程序。程序通过配置GPIO端口和外部中断(EXTI)来实现按键触发的中断功能。主要代码包括shake.h、shake.c和main.c三个文件。shake.c中初始化了GPIO端口和外部中断,配置了中断优先级和触发条件。main.c中初始化了LED和按键中断,并在主循环中通过延时函数控制LED状态。当按键触发中断时,中断处理函数EXTI0_IRQHandler会清除中断标志位并改变LED状态。该程序展示了如何通过外部中断实现按键控制LED的基本功

shake.h

#ifndef SHAKE_H_
#define SHAKE_H_void Shake_Init(void);#endif

shake.c

#include "stm32f10x.h"
#include "shake.h"void Shake_Init(void)
{GPIO_InitTypeDef shake_initstruct;EXTI_InitTypeDef exti_initstruct;NVIC_InitTypeDef nvic_initstruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);//时钟初始化NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);       //NVIC分配shake_initstruct.GPIO_Mode=GPIO_Mode_IPU;                //按键shake_initstruct.GPIO_Pin=GPIO_Pin_0;GPIO_Init(GPIOA, &shake_initstruct);GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);//GPIO中断线exti_initstruct.EXTI_Line =EXTI_Line0;                    //中断exti_initstruct.EXTI_Mode = EXTI_Mode_Interrupt;exti_initstruct.EXTI_Trigger = EXTI_Trigger_Falling;exti_initstruct.EXTI_LineCmd = ENABLE;EXTI_Init(&exti_initstruct);//NVICnvic_initstruct.NVIC_IRQChannel =EXTI0_IRQn;							//f10x.h中寻找nvic_initstruct.NVIC_IRQChannelPreemptionPriority = 0;nvic_initstruct.NVIC_IRQChannelSubPriority = 0;nvic_initstruct.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&nvic_initstruct);
}

main.c

#include "stm32f10x.h"
#include "main.h"
#include "led.h"
#include "bear.h"
#include "key.h"
#include "shake.h"
void delay(uint16_t time) 
{uint16_t i=0;while(time--){i =12000;while(i--);}}int  main()
{LED_Init();Shake_Init();GPIO_SetBits( GPIOA, GPIO_Pin_1);while(1){delay(1000);GPIO_SetBits( GPIOA, GPIO_Pin_1);}		
}void EXTI0_IRQHandler()  //中断函数
{if(EXTI_GetITStatus(EXTI_Line0) != RESET)//外部中断获取标志位,即查看是否满足中断条件{GPIO_ResetBits(GPIOA,GPIO_Pin_1);EXTI_ClearITPendingBit(EXTI_Line0);	        //外部中断标志位清除,为下一次中断留出位置,一般与EXTI_GetITStatus一起使用}
}

这个程序是按键中断的练习,本文只进行改动代码的展示,其余代码请参照前文。

http://www.xdnf.cn/news/6226.html

相关文章:

  • java8新特性
  • 第七节第二部分:接口的综合案例
  • 一文介绍电路交换、报文交换和分组交换
  • Shell
  • Apollo学习——aem问题
  • AI时代的弯道超车之第十二章:英语和编程重要性?
  • 【ROS2】【分步讲解】节点的使用以及引入消息接口的方法
  • 软件设计师考试《综合知识》计算机编码考点分析——会更新软设所有知识点的考情分析,求个三连
  • Qt之Qfile类
  • STM32-USART串口通信(9)
  • 材料疲劳E-N曲线的优势及其在疲劳仿真中的应用
  • 18、时序数据库 (TSDB) 存储高密度传感器数据组件 - /数据与物联网组件/tsdb-power-plant-archive
  • OpenSHMEM 介绍和使用指南
  • contains方法的实现对比
  • Java 源码 HashMap源码分析
  • ConcurrentHashMap
  • GeoServer发布WMTS详细过程
  • javaScript简单版
  • 详解Windows(十三)——Windows防火墙
  • k8s监控方案实践补充(一):部署Metrics Server实现kubectl top和HPA支持
  • ESG时代,EcoVadis认证如何提升企业国际竞争力
  • 苍穹外卖--菜品分页查询
  • 优雅的请求接口(java)
  • 制造业降本增效的核心要素
  • 通过SMTP协议实现Linux邮件发送配置指南
  • 0514得物、0509滴滴面试总结复盘
  • 20250514 无限空间,当 a(t)→0,所有‌物理距离‌ d→0 ‌,这个状态是什么,是无限大的无限致密状态吗
  • 什么是临时对象?临时对象在什么情况下产生?
  • 网络检测工具InternetTest v8.9.1.2504 单文件版,支持一键查询IP/DNS、WIFI密码信息
  • 自营交易考试中,怎么用“黄昏之星”形态做出漂亮反转单?