news 2026/5/14 8:44:26

外部中断按键控制LED灯

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
外部中断按键控制LED灯

1.初始化系统

#include "shake.h" #include "stm32f10x.h" void Shake_Init(void) { GPIO_InitTypeDef GPIOinitstruct; EXTI_InitTypeDef EXTIInitstruct; NVIC_InitTypeDef NVICInitstruct; //AFIO是外部中断的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE); //优先级分组配置,2位用来配置强调优先级,2位用来配置子优先级 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //将GPIOA端口的第0个引脚(PA0)连接到外部中断线EXTI0上 GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); //初始化 GPIO GPIOinitstruct.GPIO_Mode = GPIO_Mode_IPU; GPIOinitstruct.GPIO_Pin = GPIO_Pin_0; GPIO_Init(GPIOA,&GPIOinitstruct); //初始化EXIT外部中断条件 EXTIInitstruct.EXTI_Line = EXTI_Line0; EXTIInitstruct.EXTI_Mode = EXTI_Mode_Interrupt; EXTIInitstruct.EXTI_Trigger = EXTI_Trigger_Falling;//由于是按键按下,所以说下降沿触发 EXTIInitstruct.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTIInitstruct); //初始化NVIC嵌套中断控制器及分组 NVICInitstruct.NVIC_IRQChannel = EXTI0_IRQn; NVICInitstruct.NVIC_IRQChannelPreemptionPriority = 0; NVICInitstruct.NVIC_IRQChannelSubPriority= 0; NVICInitstruct.NVIC_IRQChannelCmd= ENABLE; NVIC_Init(&NVICInitstruct); }

初始化LED灯

#include "stm32f10x.h" #include "led.h" void LED_Init() { GPIO_InitTypeDef led_initstruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); led_initstruct.GPIO_Pin=GPIO_Pin_1; led_initstruct.GPIO_Speed=GPIO_Speed_2MHz; led_initstruct.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_Init(GPIOA,&led_initstruct); }

2.外部中断函数

weak:弱定义,如果用户没有自己定义中断函数,则系统默认执行系统自定义的中断函数,如果用户有定义中断函数,则优先执行用户的中断函数

#include "stm32f10x.h" #include "main.h" #include "led.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) { } } //判断中断发生控制LED灯 void EXTI0_IRQHandler() { if(EXTI_GetITStatus(EXTI_Line0) != RESET) { GPIO_ResetBits(GPIOA,GPIO_Pin_1); delay(1000); GPIO_SetBits(GPIOA,GPIO_Pin_1); delay(1000); //清除EXTI0线的中断挂起标志位,如果不清除标志位,后续的外部中断无法再次触发 EXTI_ClearITPendingBit(EXTI_Line0); } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/13 21:53:35

TLS网络安全协议巩固知识基础题(5)

1. TLS 1.3中的KeyUpdate消息如何实现密钥更新? 触发方式:任一方主动发送KeyUpdate消息 更新类型: update_not_requested:单向密钥更新 update_requested:请求对方也更新密钥 密钥派生:使用HKDF基于当前traffic secret生成新密钥 2. 解释TLS中的Padding扩展及其安全意义?…

作者头像 李华
网站建设 2026/5/1 17:53:40

基于Beego的轻量级功能权限管理系统设计与实现

基于Beego的轻量级功能权限管理系统设计与实现 基于Beego的轻量级功能权限管理系统:毕业设计源码与论文全解析 在当今数字化时代,权限管理系统已成为Web应用开发中不可或缺的核心组件。无论是企业后台管理系统、内部办公平台,还是SaaS服务&…

作者头像 李华
网站建设 2026/5/2 11:54:14

基于Golang与Vue3的全栈博客系统设计与实现

基于Golang与Vue3的全栈博客系统设计与实现 基于Golang与Vue3的全栈博客系统:毕业设计与学习实践的完美解决方案 在当今数字化时代,博客系统不仅是个人表达和知识分享的平台,更是全栈开发技术学习的绝佳案例。对于计算机科学和软件工程专业…

作者头像 李华
网站建设 2026/5/5 1:15:32

紧急缺人!年薪96万的新兴领域,强烈建议冲一冲

大家好,我是程序员小灰。不得不承认,最近一段时间大环境并不好。在互联网全面进入存量竞争、企业纷纷“降本增效”的大背景下,传统开发岗位的HC正在快速收缩……然而,传统程序员降薪、裁员的同时,AI相关技术岗位却在疯…

作者头像 李华
网站建设 2026/5/13 2:02:08

MOS 管栅极的 “充放电控制 + 可靠性

要分析这个UCC27244D 驱动 MOS 管 Q1电路中 R1、R3、D1、R2 的作用,需要结合 “栅极驱动的充放电、振荡抑制、可靠性” 这几个核心需求来看: 1. R1(100Ω):栅极串联电阻(核心作用是抑制振荡 + 限流) R1 串联在驱动器OUTA与 MOS 管 Q1 的栅极(G)之间,是栅极电阻,作…

作者头像 李华
网站建设 2026/5/12 2:55:39

ViGEmBus虚拟手柄驱动:从内核到应用的完整技术解析

ViGEmBus虚拟手柄驱动:从内核到应用的完整技术解析 【免费下载链接】ViGEmBus 项目地址: https://gitcode.com/gh_mirrors/vig/ViGEmBus 在游戏外设兼容性领域,一个看似简单的问题困扰着无数玩家和开发者:如何让非标准手柄在Windows系…

作者头像 李华