嵌入式系统外部中断实验(按下按键,LED灯依次熄灭)

#include "stm32f10x.h"
#include <stdio.h>
#include <String.h>

void RCC_cfg(void);
void GPIO_cfg(void);
void Delay(uint32_t nCount);
void NVIC_cfg(void);
void EXTIX_Init(void);

u8 cnt;

int main(void)
{
 cnt=0;
 RCC_cfg();
 GPIO_cfg();
 NVIC_cfg();
 EXTIX_Init();
 while(1){
  GPIO_SetBits(GPIOF,GPIO_Pin_6);
  GPIO_SetBits(GPIOF,GPIO_Pin_7);
  GPIO_SetBits(GPIOF,GPIO_Pin_8);
  GPIO_SetBits(GPIOF,GPIO_Pin_9);
  Delay(0x2fffff);
 }
}

void RCC_cfg(void)
{
 RCC_APB2PeriphClockCmd ( RCC_APB2Periph_GPIOF|RCC_APB2Periph_GPIOG|RCC_APB2Periph_AFIO,ENABLE);
}

void GPIO_cfg(void)
{
 GPIO_InitTypeDef GPIO_InitStructure;
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
 GPIO_Init(GPIOF,&GPIO_InitStructure);
 
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
 GPIO_Init(GPIOG,&GPIO_InitStructure);
}

void Delay ( uint32_t nCount)
{
 for(;nCount !=0;nCount--);
}

void NVIC_cfg(void)
{
 NVIC_InitTypeDef NVIC_InitStructure;
 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
 
 NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;
 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;
 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
 NVIC_Init(&NVIC_InitStructure);
}
void EXTIX_Init(void)
{
 
 EXTI_InitTypeDef EXTI_InitStructure;
 EXTI_ClearITPendingBit(EXTI_Line6);
 GPIO_EXTILineConfig(GPIO_PortSourceGPIOG,GPIO_PinSource6);
 
 EXTI_InitStructure.EXTI_Line=EXTI_Line6;
 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
 EXTI_Init(&EXTI_InitStructure);
}

void EXTI9_5_IRQHandler(void)
{
 Delay(1000);
 if(!(GPIOG->IDR & 0x0040))
 {
  switch(cnt)
   {case 0:
    GPIO_ResetBits(GPIOF,GPIO_Pin_6);
     Delay(0x2fffff);
     break;
    case 1:
      GPIO_ResetBits(GPIOF,GPIO_Pin_7);
     Delay(0x2fffff);
     break;
   case 2:
    GPIO_ResetBits(GPIOF,GPIO_Pin_8);
     Delay(0x2fffff);
     break;
   case 3:
    GPIO_ResetBits(GPIOF,GPIO_Pin_9);
     Delay(0x2fffff);
     break;
  }
 }
 cnt++;
 if(cnt==4)
  cnt=0;
 EXTI_ClearITPendingBit(EXTI_Line6);
}

时间: 2024-10-10 21:03:34

嵌入式系统外部中断实验(按下按键,LED灯依次熄灭)的相关文章

外部中断实验

实验4 外部中断实验 一.实验目的 理解中断的基本概念. 掌握STM32的中断源及中断优先级. 掌握STM32外部中断技术的基本使用方法. 掌握STM32中断处理程序的编程方法. 二.实验内容 硬件设计原理图如下图1所示:LED的连接在上一节已经介绍过了,在STM32开发板上的按键KEY0是接在PE4上,KEY1是接在PE3上的,KEY2是连在PE2上,WK_UP接在PA0上. 三.实验预备知识 中断对于开发嵌入式系统来讲的地位绝对是毋庸置疑的,在C51单片机时代,一共只有5个中断,其中2个外部

嵌入式02 STM32 外部中断实验

一.中断 由于某个事件的发生,CPU暂停当前正在执行的程序,转而执行处理事件的一个程序.该程序执行完成后,CPU接着执行被暂停的程序.这个过程称为中断.(我正在捉泥鳅,但是我妈喊我回家吃饭,我必须回家吃饭,回家途中,发现泥鳅没带,回去把泥鳅带回家,然后吃完饭继续捉泥鳅!!!) 中断是CPU处理外部突发事件的一个重要技术.引起中断的原因或者说发出中断请求的来源叫做中断源.根据中断源的不同,可以分为硬件中断和软件中断两大类,有了中断,系统可以更好更快的利用有限的系统资源解决系统响应速度和运行效率的一

cortex_m3_stm32嵌入式学习笔记(四):外部中断实验

本章学习将STM32的IO口作为外部中断输入(实现和按键扫描一样的功能) STM32 的每个 IO 都可以作为外部中断的中断输入口,这点也是 STM32 的强大之处. STM32F103 的中断控制器支持 19 个外部中断/事件请求.每个中断设有状位,每个中断/事件都有独立的触发和屏蔽设置. STM32F103 的19 个外部中断为: 线 0~15:对应外部 IO 口的输入中断.(本章只学习这一种) 线 16:连接到 PVD 输出. 线 17:连接到 RTC 闹钟事件. 线 18:连接到 USB

定时器的应用---中断方式---让8个LED灯,左右各4个来回亮

/*************************** 中断方式 是主程序专注于其他的事情, 待定时器中断时才执行中断子程序. *****************************/ #include<reg51.h> #define LED P1 #define count 50000 // 50000 * 1us = 0.05s 机器周期1us 12MH晶振 #define TH_M1 (65536-count)/256 //TMOD 寄存器 方式 1 , 2^8 = 256 TH

嵌入式外部中断控制编程方法论—比較CC2541(51核)和S5PV210(ARM核)

这是一篇阐述怎样对嵌入式SOC外部中断进行控制编程的方法论文章.希望读者理解本篇文章后.能够具备对市场上全部已经面世和将来面世的嵌入式芯片的外部中断进行控制编程的能力. 笔者原创的技术分享一直都恪守下面原则: 从需求的角度去理解嵌入式各种软件和硬件模块的作用和组成.并从芯片系统设计的角度去阐述怎样进行控制编程. 前者对于理解复杂的系统(如linux的各个子系统)是非常有效的:后者所讲的是代表一个芯片设计project师的视觉,芯片模块由他负责设计,他对于该模块的控制编程自然是最有发言权的. 笔者

按键抖动的处理方法(按键外部中断)

当把按键设为外部中断时,存在按键抖动问题: 一种情况是没有按按键的时候,按键有时也会因为震动等原因误触发按键事件,引起程序误判.对于这种按键抖动,解决方式有: 并上一个小电容(比如0.1uF)即可解决. 延时检测:检测到按键中断后延时50ms判断这个引脚电平,然后再做进一步处理. 还有一种情况是按下按键时,由于按键本身的结构或质量问题.操作者的发力问题等,在操作者按下一次按键的过程中,实际上触发了数次按下-抬起的动作,引起程序误判.对于这种按键抖动,解决方式有: 延时检测:检测到按键中断后延时5

STM32学习笔记(九) 外部中断,待机模式和事件唤醒

学会知识只需要不段的积累和提高,但是如何将知识系统的讲解出来就需要深入的认知和系统的了解.外部中断和事件学习难度并不高,不过涉及到STM32的电源控制部分,还是值得认真了解的,在本文中我将以实际代码为例详细讲解这些内容,希望对每一个阅读者有帮助. 1.外部中断 如果已经学习了SysTick系统时钟滴答实验,掌握了Cortex-M3中断的相关知识,那么外部中断也是比较好理解的,和SysTick中断一样,外部中断也是当有信号触发时,如果中断屏蔽寄存器允许触发,就会产生中断,这时CPU查找中断向量表,

第17章 EXTI—外部中断/事件控制器

上一章节我们已经详细介绍了NVIC,对STM32F7xx中断管理系统有个全局的了解,我们这章的内容是NVIC的实例应用,也是STM32F7xx控制器非常重要的一个资源.学习本章时,配合<STM32F76xxx参考手册>系统配置控制器以及中断和事件章节一起阅读,效果会更佳,特别是涉及到寄存器说明的部分. 特别说明,本书内容是以STM32F767xx系列控制器资源讲解. 17.1  EXTI简介 外部中断/事件控制器(EXTI)管理了控制器的25个中断/事件线.每个中断/事件线都对应有一个边沿检测

STM32W108无线射频模块外部中断接口应用实例

STM32W108无线射频模块外部中断接口应用实例 编写中断服务程序,响应外部中断,实现通过按键触发中断,然后通过LED显示相应的状态. 1 STM32W108开发环境与硬件说明 硬件:STM32W108 Zigbee开发板.5V 1A电源.J-LINK烧写器.PC机等. 软件:IAR Embedded Workbench开发软件. 为开发板中的按键连接原理图,按键与STM32W108无线模块连接的原理图. 按键连接图 2软件设计与规划 测试程序的流程图如下所示,节点首先初始化硬件,然后注册中断