K1 K2作为中断源控制红色LED灯,实现任意键按一下LED灯亮或者灭

发布者:Xiaoxue666最新更新时间:2024-08-14 来源: cnblogs关键字:中断源  任意键  LED灯 手机看文章 扫描二维码
随时随地手机看文章

  1 #include 'stm32f10x.h'   // 相当于51单片机中的  #include

  2 #include 'stm32f10x_gpio.h'

  3 #include 'stm32f10x_exti.h'

  4 #include 'misc.h'

  5 /*

  6 *K1 K2作为中断源控制红色LED灯,实现任意键按一下LED灯亮或者灭

  7 */

  8 /*GPIO、NVIC、EXTI配置*/

  9 int    peizhi()

 10 {

 11 

 12     /*GPIO配置*/

 13     //   K1配置 PA0

 14 GPIO_InitTypeDef a;

 15 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

 16 a.GPIO_Speed=GPIO_Speed_50MHz;

 17 a.GPIO_Pin=GPIO_Pin_5;

 18 a.GPIO_Mode=GPIO_Mode_Out_PP;

 19 GPIO_Init(GPIOB,&a);

 20 

 21     

 22 /*NVIC嵌套向量中断控制器*/

 23 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);    

 24 NVIC_InitTypeDef b;

 25 b.NVIC_IRQChannel = EXTI0_IRQn;//EXTI0_IRQn外部中断线0中断

 26 b.NVIC_IRQChannelPreemptionPriority = 1;//0 1 2 3 4 

 27 b.NVIC_IRQChannelSubPriority = 1;//0 1 2 3 4 

 28 b.NVIC_IRQChannelCmd = ENABLE;

 29 NVIC_Init(&b);

 30         

 31     /*外部中断EXTI配置*/

 32 EXTI_InitTypeDef c;

 33 c.EXTI_Line=EXTI_Line0;//外部路线0 和13

 34 c.EXTI_Mode=EXTI_Mode_Interrupt;//中断模式

 35 c.EXTI_Trigger=EXTI_Trigger_Rising;//上升沿为中断请求

 36 c.EXTI_LineCmd=ENABLE;//使能

 37 EXTI_Init(&c);//指向结构体EXTI_InitTypeDef的指针a

 38 

 39 GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource0);//选择GPIO管脚用作外部中断线路

 40 

 41 

 42 

 43 //K2配置  PC13

 44 //以下K2的配置基于K1配置的,就是说K2很多配置和K1相同的,只是把不同的配置写下来

 45 

 46 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO,ENABLE);

 47 GPIO_Init(GPIOB,&a);

 48 

 49 b.NVIC_IRQChannel = EXTI15_10_IRQn;

 50 NVIC_Init(&b);

 51 

 52 c.EXTI_Line = EXTI_Line13;

 53 EXTI_Init(&c);

 54 

 55 GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource13);

 56 

 57 }

 58 

 59 

 60 /*主函数*/

 61 int main(void)

 62 {

 63     peizhi();

 64     

 65 }

 66 

 67 /*中断服务函数*/

 68 void EXTI0_IRQHandler(void)

 69 {

 70     //确保是否产生EXTI line中断

 71     if(EXTI_GetITStatus(EXTI_Line0)!=RESET) // 检查指定的EXTI线路触发请求发生与否

 72     {

 73         if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)==0)//

 74         {

 75         GPIO_SetBits(GPIOB,GPIO_Pin_5);

 76         }

 77         else

 78         {    

 79         GPIO_ResetBits(GPIOB,GPIO_Pin_5);

 80         }

 81         EXTI_ClearITPendingBit(EXTI_Line0);

 82     }

 83 }

 84 

 85     void EXTI15_10_IRQHandler(void)

 86 {

 87     //确保是否产生EXTI line中断

 88     if(EXTI_GetITStatus(EXTI_Line13)!=RESET) // 检查指定的EXTI线路触发请求发生与否

 89     {

 90         if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)==0)//

 91         {

 92         GPIO_SetBits(GPIOB,GPIO_Pin_5);

 93         }

 94         else

 95         {    

 96         GPIO_ResetBits(GPIOB,GPIO_Pin_5);

 97         }

 98         EXTI_ClearITPendingBit(EXTI_Line13);

 99     }        

100 }


关键字:中断源  任意键  LED灯 引用地址:K1 K2作为中断源控制红色LED灯,实现任意键按一下LED灯亮或者灭

上一篇:用STM32CudeMX 点亮红色LED灯(软件操作步骤为主)
下一篇:外部中断0(含知识点)

推荐阅读最新更新时间:2026-03-20 11:45

8051单片机是几位机_8051单片机共有几个中断
  8051单片机   8051是一种8位元的单芯片微控制器,属于MCS-51单芯片的一种,由英特尔公司于1981年制造。INTEL公司将MCS51的核心技术授权给了很多其它公司,所以有很多公司在做以8051为核心的单片机,如Atmel、飞利浦、深联华等公司,相继开发了功能更多、更强大的兼容产品。   8051单芯片是同步式的顺序逻辑系统,整个系统的工作完全是依赖系统内部的时脉信号,用以来产生各种动作周期及同步信号。在8051单片机中已内建时钟产生器,在使用时只需接上石英晶体谐振器(或其它振荡子)及电容,就可以让系统产生正确的时钟信号。   8051单片机的构成   8051单片机主要有以下部分组成:   1、中央处理单元
[单片机]
ARM中的5种异常模式和7种中断
ARM中有5种异常模式,有7种中断源。这7种中断源中有些中断是我们希望发生的,但有些中断是我们不希望发生的。 我们希望发生的中断: 软中断:属于svc模式,通过SWI指令便可以产生软中断,进入到svc模式。 irq中断:属于irq模式,当产生普通的外部中断时,处理器便进入到IRQ模式。 fiq中断:属于fiq模式,当产生高优先级外部中断时,处理器便进入到FIQ模式。 我们不希望发生的中断: 复位:属于svc模式,当系统上电时便会产生复位中断,系统进入到svc模式。复位中断不需要中断返回。 取指中止中断:属于abt模式,当预取指发生错误时,便产生取指中止中断,进入到abt模式。 数据中止中断:属于abt模式,当访问数据存储器
[单片机]
ARM中的5种异常模式和7种<font color='red'>中断</font><font color='red'>源</font>
基于STM32单片机秒中断和闹钟中断的解决方案
“RTC”是Real Time Clock 的简称,意为实时时钟。STM32提供了一个秒中断源和一个闹钟中断源。 RTC的技术器是一个32位的计数器,使用32.768khz的外部晶振。 2038年问题 在计算机应用上,2038年问题可能会导致某些软件在2038年无法正常工作。所有使用UNIX时间表示时间的程序都将受其影响,因为它们以自1970年1月1日经过的秒数(忽略闰秒)来表示时间。这种时间表示法在类Unix(Unix-like)操作系统上是一个标准,并会影响以其C编程语言开发给其他大部份操作系统使用的软件。 在大部份的32位操作系统上,此“TIme_t”数据模式使用一个有正负号的32位元整数(signedint32)存
[单片机]
基于STM32单片机秒<font color='red'>中断</font><font color='red'>源</font>和闹钟<font color='red'>中断</font><font color='red'>源</font>的解决方案
STM32 关于外部中断线、中断中断服务函数的问题
中断线问题: 上图可以看出,PA0、PB0...PG0共用的EXTI0中断线,PA1、PB2...PG1共用的EXTI1中断线,也就是 编程里面的(如下图库文件),对应16个中断线,后面三个是专用的中断线,不做讨论。 有人要问,假设:我设置的引脚是PB9和PE9都开启外部中断怎么办?小编告诉你,这还真办不了,我实测过。配置函数的时候后覆盖之前的函数的(如下图所示) 如果这样配置的话,会出现出货光电1的初始化覆盖掉编码盘的初始化,说白了就是编码盘的设置被覆盖掉了,结果是外部中断 出货光电1管脚会触发而编码盘就不起作用了,这也是STM32其中一个问题所在吧! 反过来,结果是外部中断 编码盘 管脚会触发
[单片机]
STM32 关于外部<font color='red'>中断</font>线、<font color='red'>中断</font><font color='red'>源</font>和<font color='red'>中断</font>服务函数的问题
ARM中断之定时器中断
实时时钟请求中断。在控制中遇到定时检测和控制,为此常采用一个外部时钟电路(可编程)控制其时间间隔。需要定时时,CPU发出命令使时钟电路开始工作,一旦到达规定时间,时钟电路发出中断请求,由CPU转去完成检测和控制工作。 走到这里,大家肯定对Linux的中断处理有概念了,下面我们通过一个具体的实例,来了解Linux内核处理中断的全过程,那就是定时器中断。在详细分析这个过程之前,我们把Linux时间管理的概念先缕一缕。 在当前的80x86体系结构上,内核显式地与几种时钟和定时器电路打交道,其主要分为了时钟和定时器两大类: - 时钟电路同时用于跟踪当前时间和产生精确的时间度量。 - 定时器电路由内核编程,所以它们以固定的、
[单片机]
S3c2440支持中断个数
S3c2440支持多达36个内部中断源和24个外部中断源,分别使用内部终端屏蔽寄存器INTMSK和外部中断寄存器MSK进行屏蔽控制。其中,外部中断源通过GPIO以复用的方式成为内部中断源的一部分。 但是我们清楚,INTMSK是一个32位的寄存器,最多只能支持32中断,它是如何对应这么多中断的呢? 首先我们先看INTMSK对应的位。 INTERRUPT MASK (INTMSK) REGISTER (Continued) INT_ADC 0 = Service available, 1 = Masked 1 INT_RTC 0 = Service available, 1 = Masked 1 INT_SPI1 0 = Ser
[单片机]
AT89S51多外部中断系统设计
  AT89S51为用户提供两个外部中断请求输入端INT0(的反)和INT1(的反),实际的应用系统中,两个外部中断请求源往往不够用,需对外部中断源进行扩充。下面介绍一种扩充外部中断源的方法。      如下图所示,若系统中有5个外部中断请求源IR0~IR4,它们均为高电平请求有效,这时可按中断请求的轻重缓急进行排队,把其中最高级别的中断请求源IR0直接接到AT89S51的一个外部中断请求源IR0输入端INT0,其余的4个中断请求源IR1~IR4按下图所示的方法通过各自的OC门(集电极开路门)连到AT89S51的另一个外中断源输入端INT1,同时还连到P1口的P1.0~P1.3脚,供AT89S51查询。各外部中断请求源的中断请求由
[单片机]
AT89S51多外部<font color='red'>中断</font><font color='red'>源</font>系统设计
mcs51单片机中断请求简介
(1)外部 中断 请求源:即外中断0和1,经由外部引脚引入的,在单片机上有两个引脚,名称为INT0、INT1,也就是P3.2、P3.3这两个引脚。在内部的TCON中有四位是与外中断有关的。 IT0:INT0触发方式控制位,可由软件进和置位和复位,IT0=0,INT0为低电平触发方式,IT0=1,INT0为负跳变触发方式。这两种方式的差异将在以后再谈。 IE0:INT0中断请求标志位。当有外部的中断请求时,这位就会置1(这由硬件来完成),在CPU响应中断后,由硬件将IE0清0。 IT1、IE1的用途和IT0、IE0相同。 (2)内部中断请求源 TF0:定时器T0的溢出中断标记,当T0计数产生溢出时,由硬件置位TF0。
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved