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

网站服务器数据库品牌管理

网站服务器数据库,品牌管理,别的网站做相关链接怎么做,公司做的网站账务处理使用S™ 32设置GPIO中断 中断示例按键中断实例设计:EXTI0和EXTI9硬件连接分析STM32代码实现代码说明 中断示例 设计一个按键中断的实例。设置两个中断:EXTI0、EXTI9, 在EXTI9的中断服务之程序中实现LED灯的控制 按键中断实例设计&#xff…

使用S™ 32设置GPIO中断

  • 中断示例
  • 按键中断实例设计:EXTI0和EXTI9
    • 硬件连接分析
    • STM32代码实现
    • 代码说明

中断示例

设计一个按键中断的实例。设置两个中断:EXTI0、EXTI9,
在EXTI9的中断服务之程序中实现LED灯的控制
在这里插入图片描述

按键中断实例设计:EXTI0和EXTI9

根据提供的电路图,我将设计一个基于STM32的按键中断系统,其中两个按键分别连接到EXTI0和EXTI9引脚,并通过EXTI9的中断服务程序控制LED灯组。
在这里插入图片描述

硬件连接分析

从电路图可以看出:

  • 两个按键Key ButtonWakeup Button通过上拉/下拉电阻连接到微控制器
  • EXTI0连接到第一个按键输入
  • EXTI9连接到第二个按键输入
  • 四个LED灯(带限流电阻)连接到微控制器的GPIO引脚

STM32代码实现

#include "stm32f10x.h"  // 假设使用STM32F10x系列,可根据实际芯片修改// LED相关定义
#define LED_PORT          GPIOB
#define LED_PIN_ALL       (GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11)
#define LED_ALL_ON()      GPIO_SetBits(LED_PORT, LED_PIN_ALL)
#define LED_ALL_OFF()     GPIO_ResetBits(LED_PORT, LED_PIN_ALL)// 按键相关定义
#define KEY0_PORT         GPIOA
#define KEY0_PIN          GPIO_Pin_0    // EXTI0对应PA0
#define KEY1_PORT         GPIOA
#define KEY1_PIN          GPIO_Pin_9    // EXTI9对应PA9// 中断标志位
volatile uint8_t Key0Pressed = 0;
volatile uint8_t Key1Pressed = 0;// LED状态变量
volatile uint8_t ledState = 0;  // 0:全灭, 1:交替闪烁, 2:全部点亮/** 函数名:EXTI0_IRQHandler* 描述:EXTI0中断服务程序* 输入:无* 输出:无*/外部中断函数EXTI0_IRQHandler
void EXTI0_IRQHandler(void)
{// 检查是否是KEY0触发的中断if(EXTI_GetITStatus(EXTI_Line0) != RESET){// 清除中断标志位EXTI_ClearITPendingBit(EXTI_Line0);// 设置按键0被按下的标志Key0Pressed = 1;}
}/** 函数名:EXTI9_5_IRQHandler* 描述:EXTI9-5中断服务程序* 输入:无* 输出:无*/EXTI9-5中断服务程序EXTI9中断服务程序中实现了三种LED控制模式
void EXTI9_5_IRQHandler(void)
{// 检查是否是KEY1触发的中断if(EXTI_GetITStatus(EXTI_Line9) != RESET){// 清除中断标志位EXTI_ClearITPendingBit(EXTI_Line9);// 设置按键1被按下的标志Key1Pressed = 1;// 控制LED灯switch(ledState){case 0:  // 全灭LED_ALL_ON();ledState = 1;break;case 1:  // 全部点亮LED_ALL_OFF();ledState = 2;break;case 2:  // 交替闪烁模式GPIO_Write(LED_PORT, (GPIO_ReadOutputData(LED_PORT) ^ LED_PIN_ALL));break;}}
}/** 函数名:KEY_Init* 描述:初始化按键GPIO和中断* 输入:无* 输出:无*/
void KEY_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;EXTI_InitTypeDef EXTI_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;// 使能GPIOA时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);// 配置KEY0和KEY1为浮空输入GPIO_InitStructure.GPIO_Pin = KEY0_PIN | KEY1_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(KEY0_PORT, &GPIO_InitStructure);// 使能AFIO时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);// 配置KEY0为EXTI0中断线GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);配置EXIT线EXTI_InitStructure.EXTI_Line = EXTI_Line0;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;  // 下降沿触发EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);// 配置KEY1为EXTI9中断线GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource9);EXTI_InitStructure.EXTI_Line = EXTI_Line9;EXTI_Init(&EXTI_InitStructure);// 配置NVIC中断优先级NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;NVIC_Init(&NVIC_InitStructure);
}/** 函数名:LED_Init* 描述:初始化LED GPIO* 输入:无* 输出:无*/
void LED_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;// 使能GPIOB时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);// 配置LED端口为推挽输出GPIO_InitStructure.GPIO_Pin = LED_PIN_ALL;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(LED_PORT, &GPIO_InitStructure);// 初始状态:全灭LED_ALL_OFF();
}int main(void)
{// 初始化按键和LEDKEY_Init();LED_Init();while(1){// 检查KEY0是否被按下if(Key0Pressed){// 短暂延时,消除抖动for(volatile uint32_t i = 0; i < 10000; i++);// 处理按键事件// 这里可以添加其他功能// 清除标志位Key0Pressed = 0;}// 检查KEY1是否被按下if(Key1Pressed){// 短暂延时,消除抖动for(volatile uint32_t i = 0; i < 10000; i++);// 清除标志位Key1Pressed = 0;}// 可以在这里添加其他主循环逻辑}
}

代码说明

  1. 硬件配置

    • EXTI0连接到PA0引脚
    • EXTI9连接到PA9引脚
    • 四个LED灯连接到PB8-PB11引脚
  2. 中断配置

    • EXTI0和EXTI9均配置为下降沿触发
    • 为两个中断分配了相同的优先级
  3. LED控制

    • EXTI9中断服务程序中实现了三种LED控制模式:
      • 全灭 → 全部点亮 → 交替闪烁
    • 使用ledState变量跟踪当前LED状态
  4. 按键消抖

    • 在主循环中通过延时实现简单的按键消抖
  5. 中断标志位

    • 使用Key0Pressed和Key1Pressed变量作为中断标志位

这个设计实现了按键检测和LED控制的基本功能,可以根据实际需求进一步扩展和优化。


文章转载自:

http://XOBTOnqI.wqsjx.cn
http://Ezym93Bb.wqsjx.cn
http://gtR3JhCg.wqsjx.cn
http://iQuOeZhd.wqsjx.cn
http://YszceR4h.wqsjx.cn
http://dTNobdNH.wqsjx.cn
http://GOeccrjQ.wqsjx.cn
http://RVH5rik4.wqsjx.cn
http://9IiXnz3w.wqsjx.cn
http://6kRfTWFh.wqsjx.cn
http://gGNVUdcc.wqsjx.cn
http://F5vBDLBm.wqsjx.cn
http://RSs4xRAc.wqsjx.cn
http://qengHo7V.wqsjx.cn
http://BSd7n8py.wqsjx.cn
http://sbXWgxvn.wqsjx.cn
http://Ov630Upr.wqsjx.cn
http://JjlSAOwN.wqsjx.cn
http://iI9VIh2Y.wqsjx.cn
http://JzDZEatA.wqsjx.cn
http://9WQmu12m.wqsjx.cn
http://8CFTaaKI.wqsjx.cn
http://HMs0qQ0R.wqsjx.cn
http://rwBoTP5i.wqsjx.cn
http://fLNdWL4s.wqsjx.cn
http://pbrY0DB1.wqsjx.cn
http://82WsM0hg.wqsjx.cn
http://3NGEvD9c.wqsjx.cn
http://B1By6gwy.wqsjx.cn
http://Supy8rs4.wqsjx.cn
http://www.dtcms.com/wzjs/776863.html

相关文章:

  • 自己做h5网站中小企业网站建设与推广论文
  • 网站建设对图片有哪些要求毕业设计团购网站建设
  • 济南网站建设公司-远大云.18网站推广
  • 手机app开发网站模板制作简历的免费模板网站
  • 室内设计师上网第一站Wordpress本地上载
  • 南宁自助建站软件就诊网站建设协议
  • 网站后台登录密码修改Wordpress手机端显示不全
  • win7iis部署asp.net网站标志网
  • 天河网站建设哪里好现代简约风格装修案例
  • 怎样创办网站企业备案查询系统
  • 网站建设自建的优点购物商城名字
  • 怎么用自己的电脑建设网站宿迁建设局网站a类证查询
  • 婚礼婚庆网站建设需求分析产品推广方案要包含哪些内容
  • 网站做聚合页面方案如何写大学网络推广培训
  • 东莞广告公司电话四平网站优化
  • 广州网站建设oemme域名公司网站
  • 电商网站设计与制作总结网站开发卖东西
  • 建站之星好吗石家庄论坛建站模板
  • 网页制作视频的网站建设网站搭建的
  • 网站建设去哪中世纪变装小说wordpress
  • 珠海网站建设厚瑜南通网站优建设
  • 大庆做网站的东莞公司网上推广
  • 商丘微网站谷歌网站推广方案
  • 电商网站构成西安o2o网站设计公司
  • 网站繁体和中文这么做wordpress 手动安装主题
  • 广东网站建设报价官网网站备案 法规
  • 如何做淘外网站推广贵州建设工程信息网官网
  • 中小型网站建设资讯天津整站
  • 互粉的网站是怎么做的做网站销售说辞
  • 成都网站建设常见问题服务商公司