STM32F10X EXTI控制 LED 亮灭小教程

发布者:DazzlingSpirit最新更新时间:2019-04-10 来源: eefocus关键字:STM32F10X  EXTI控制  LED  亮灭 手机看文章 扫描二维码
随时随地手机看文章

这里我用的开发板时正点原子的MiniSTM32,芯片型号为STM32F103RCT6.   This is easy, so you can do that very easily!

***REMENBER STM32 is you! :)


我们在这里进行通俗的讲解,详细的内容,可以在以后再去看STM32手册。


这里我们先介绍中断的概念,中断举个例子就是,我现在正在吃饭,这时有人敲门,那我不得不去放下碗筷去开门,然后再回来继续吃饭。那为什么需要中断呢?因为我们肯定不想吃饭的时候,总是去看下门口有没有人,这样就占用了我吃饭的时间!这点在程序中的意义是重大的!


那么我们就想如果有很多中断怎么办呢?就像我在吃饭的时候,有人敲门,但是水又开了,这两者差不多同时出现,我到底改做什么呢?这时就有优先级的概念,谁重要,我就先去做谁!


这里我们采用开关控制LED这个例子来说明GPIO  EXTI   NVIC这三个内容的一些使用方法!


我们用到的LED灯接口是PA8, 我们用到的开关是PC5,  为上拉的模式


这里的例子是开关使用 EXTI 中断控制灯的亮灭(注意这里我们这里的代码是连续的):

//@Time:2018/2/16


//@author:junwencui

//@wether: sun

//@location: yunnan


void key_Config(void){

 

    GPIO_InitTypeDef GPIO_InitStructure;

EXTI_InitTypeDef EXTI_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;


RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);            //这里最好还是打开复用

以上是配置函数的开头,首先我们定义了结构体,然后我们就需要打开时钟,这里需要注意在KEIL中,打开时钟需要放在定义结构体的后面,不然会报错!


  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;     //这里采用上拉输入模式

  GPIO_Init(GPIOC,&GPIO_InitStructure);             //初始化结构体定义

这里的模式  GPIO_Mode_IPU  是在使用上拉输入的时候使用,当然也可以使用

GPIO_Mode_IPD   下拉输入

这里的区别是你的电路硬件!


  GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource5);   //这里将EXTI映射到PC5

 

  EXTI_InitStructure.EXTI_Line = EXTI_Line5;

  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;

  EXTI_InitStructure.EXTI_LineCmd = ENABLE;

  EXTI_Init(&EXTI_InitStructure);

这里因为定义的为PC5所以相应的EXTI_Line5,我们简单采用中断模式,因为PC5 接的是上拉电阻,所以这里当然是电平下降的时候触发了!就使用EXTI_Trigger_Falling

  NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;         //这里指定外部中断 为EXTI5~9

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;   //设置抢占优先级为2

  NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;            //设置响应优先级为0

  NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE;              //使能NVIC

  NVIC_Init(&NVIC_InitStructure);                             //初始化结构体

 

 

}

这里的外部中断,用的是EXTI_Line5, 但是stm32库函数定义了 中断线5到9 ,都用EXTI9_5_IRQn,这里其实并无大碍,因为后面的中断函数内部我们还是要进行判断的! 中断的优先级 服从的规则是: 先看抢占优先级,后看响应优先级,当抢占优先级一样时,又是同时发生,就看响应优先级。他们都是数值越小,等级越高!所以当有多个中断的时候我们需要仔细安排这些有先级。

当然我们也可以定义我们的优先级组,例子:NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 

                                                                    //抢占优先级可选0~3,响应优先级可选0~3;

这是优先级组选择范围,千万不可以超出范围!

以上就是EXTI中断配置的内容!接下来看中断函数:

static u8 led_red_flag =0;      //此为标志位

void EXTI9_5_IRQHandler(void){

 

    delay_ms(8);    //消抖

 

   if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5) && !led_red_flag){    //读取Pin_5的状态

   

      GPIO_ResetBits(GPIOA,GPIO_Pin_8); 

     led_red_flag =1;

   

  }else if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5) && led_red_flag){

   

    GPIO_SetBits(GPIOA,GPIO_Pin_8); 

     led_red_flag =0;      

  }

  

  EXTI_ClearITPendingBit(EXTI_Line5);

}


这里中断函数是固定的,我们可以在stm32f10x_it.h里面去查看,EXTI9_5_IRQHandler 从这个名字看就是中断线5~9,和我们上面的内容保持一致! 这里的消抖是常用操作,防止干扰! 在中断函数内,都会有消除中断标志位的语句, 就是EXTI_ClearITPendingBit(EXTI_Line5);

这里是至关重要的,每次都不会少!


void led_Congfig(void){

    

   GPIO_InitTypeDef GPIO_InitStructure;   //PA8

   

   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

 

   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     //采用推挽输出

   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;

   GPIO_InitStructure.GPIO_Speed  =GPIO_Speed_50MHz;

   GPIO_Init(GPIOA,&GPIO_InitStructure);

 

   GPIO_SetBits(GPIOA,GPIO_Pin_8);

}

这里是配置 led 的函数,采用推挽输出,50Mhz的工作速度!

int main(){

 

    led_Congfig();

   key_Config();

 

   while(1){

  

  }

return 0;

}


这里是我们的主函数!注意这里的 while(1{}, 不可以省略,否则程序直接退出,不会运行中断!!!


关键字:STM32F10X  EXTI控制  LED  亮灭 引用地址:STM32F10X EXTI控制 LED 亮灭小教程

上一篇: stm32初学之LED按键中断
下一篇:STM32实战3.定时器控制LED灯闪烁(定时器1)

推荐阅读最新更新时间:2024-03-16 16:27

AOT、ITSWELL申诉被驳,首尔半导体LED维权战再次告捷
首尔半导体近日宣布就台湾地区Advanced Optoelectronic Technology Inc. (“AOT”)和韩国ITSWELL公司试图推翻韩国知识产权裁判法院(Korean Intellectual Tribunal)较早前判处首尔半导体胜诉的裁决而提出的上诉,已于2007年10月11日被韩国专利法院(the Patent Court of Korea)驳回,维持原判。AOT和ITSWELL公司较早前曾向韩国知识产权裁判法院提出申诉,要求判处首尔半导体白光LED的专利生产权无效,但有关申诉最后不获裁判法院接纳,首尔半导体被裁定胜诉。 首尔半导体于2005年在首尔中央地区法院(Seoul Central Distr
[焦点新闻]
LED跑马灯-寄存器
一,GPIO知识回顾 1,四种输入模式: 输入浮空 输入上拉 输入下拉 模拟输入 2,四种输出模式: 开漏输出 开漏复用输出 推挽输出 推挽复用输出 3,三种最大输出速度 2MHz 10MHz 50MHz 每组GPIO共16个IO口,含下7个寄存器 GPIOx_CRL : 端口配置低寄存器 GPIOx_CRH : 端口配置高寄存器 GPIOx_IDR : 端口输入寄存器 GPIOx_ODR : 端口输出寄存器 GPIOx_BSRR : 端口位设置/清除寄存器 GPIOx_BRR : 端口位清除寄存器 GPIOx_LCKR : 端口配置锁存寄存器 二,LED硬件连接
[单片机]
<font color='red'>LED</font>跑马灯-寄存器
肖特宋纲纲:生产设备的光源和镜头对产品很重要
提到LED,人们所熟知的是便携产品的背光、商用照明等,这也是与我们的生活息息相关的。其实,在我们所用的那些电子产品背后,在其炫酷清晰的屏幕还停留在生产流水线上时,也少不了大量的LED照明的功劳。 日前,在北京举办的中国国际机器视觉展览会上,肖特和MORITEX展位上就着重展出了二者合力推出的CompaVis LED照明系列,该系列产品是专为半导体制造设备或平板显示器生产设备设计的。 肖特和MRITEX展位展出的对位和OCR/OCV模式识别(集同轴照明与环形照明于一体) “产品出厂之前需要进行严格的质检,之前技术不能满足要求时,厂商只能对待检产品进行抽样检测,但随着服务意识越来越高与市场竞争越来越激烈,流水线上开始要
[电源管理]
肖特宋纲纲:生产设备的光源和镜头对产品很重要
东晶电子拟投LED晶片封两涨停
  本报讯 (记者王浩娇)前天,东晶电子发布公告称,拟投资12亿元建设“年产750万片LED用蓝宝石晶片技改项目”。此利好消息一出,东晶电子连续两日涨停。   公告称,公司拟出资设立全资子公司——浙江东晶光电科技有限公司,注册资本为8000万元,项目总投资12亿元。   东晶电子表示,项目全部完成后,可形成年产750万片LED用蓝宝石晶片的生产能力,按照现有市场价格区间200元—250元/片,预计可新增年销售收入17.5亿元,按照市场平均利润率30%,预计将实现年利润总额5.25亿元。   银腾前瞻财讯分析师孙旭东认为,该公司是国内压电晶体龙头企业,达到了国际先进水平,市场规模位居前列。短线仍有上涨潜力,不过,新项目对
[电源管理]
基于触摸屏的LED彩色台灯控制系统设计
本系统是利用触摸屏控制的可调颜色的照明灯具。灯源为大功率超高亮三基色发光二极管组成。本设计最大的亮点是触摸屏上所指示的颜色与实际灯照出的颜色一致。到通过c 语言程序对单片机的PWM 功能进行控制实现相应的坐标变换使灯具实现调色调亮的效果,为使用者提供一个随心调节室内气氛的良好工具。 一、控制硬件总体设计 系统的总体框图如图1 所示。系统可有输入,输出,控制三部分组成,当触摸屏被按下触摸屏芯片读取触摸屏上X 轴与Y 轴的值,然后通过SPI 协议传送到控制器,控制器负责信号的处理,把处理完毕的信号以PWM 方式输出驱动LED. 图1 系统总体框图 二、触摸屏的使用 本系统选择电阻式触摸屏,它将矩形区域中触摸点(X
[电源管理]
基于触摸屏的<font color='red'>LED</font>彩色台灯<font color='red'>控制</font>系统设计
Maxim发布最新LED阵列管理器
Maxim  Integrated Products, Inc (NASDAQ: MXIM)宣布推出MAX20092 12通道开关矩阵管理器,使得高性能 LED 阵列车灯和自适应光束调节设计能够满足更高电流的设备需求,同时降低方案尺寸、提高灵活性。通过最低导通电阻(RDS_ON)的内部开关,该IC可最大程度减少LED阵列照明的发热,相比最接近的竞争方案降低65%。     有关Maxim 汽车照明 的技术细节,请访问:https://www.maximintegrated.com/cn/markets/automotive/power-lighting.html   MAX20092技术细节:https://www.max
[嵌入式]
分析长寿命LED驱动电源如何正确选用铝电解电容
LED 作为第四代光源是具有节能、长寿命、无二次污染等诸多优势的半导体照明,其应用范围已经逐渐从特殊照明领域向普通照明领域扩展。在今后几年内,随着 LED照明 相关技术的逐渐成熟,其将在室内、道路、建筑等普通照明领域得以更广泛的应用。   影响LED节能灯使用寿命的因素:   在实际应用中,LED灯的实际使用寿命并不高,甚至有的不到一年就损坏了。据调查LED节能灯失效将近80%左右是由驱动电源引起的。抛开驱动电路设计性能不好的因素,另外一个重要原因就是驱动电路中所用的部分电子元器件的寿命远远低于LED灯珠的寿命,在LED节能灯高温的灯腔内,如果器件选型不当,铝电解电容可能成为 LED驱动 上最容易损坏的元器件!
[电源管理]
分析长寿命<font color='red'>LED</font>驱动电源如何正确选用铝电解电容
串行接口LED数码管及键盘管理器件ZLG7289A的原理与应用
摘要:介绍了LED数码管及键盘管理器ZLG7289A的原理与应用。该芯片具有SPI串行接口,可同时驱动8位共阴式数码管(或64只独立LED),还可连接多达64键的键盘矩阵,单块芯片即可完成LED显示、键盘接口等全部功能。文章给出了ZLG7289A的特点、引脚功能、指令说明和经典电路,并以单片机AT89C51为例,给出了其接口电路及相应源程序。 关键词:ZLG7289A;LED显示;键盘接口;SPI 1 概述 ZLG7289A是广州周立功单片机发展有限公司自行设计的、具有SPI串行接口功能的、可同时驱动8位共阴式数码管(或64只独立LED)的智能显示驱动芯片。 该芯片同时可连接多达64键的键盘矩阵。单块芯片即可完成LED
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved