stm32学习之六

发布者:TranquilBreeze最新更新时间:2016-10-05 来源: eefocus关键字:stm32  EXTI  按键中断: 手机看文章 扫描二维码
随时随地手机看文章
EXTI之按键中断:

 EXTI中断:
  注意:
   1、EXTI中断是一种外部中断,需要配置相关的管理中断器件的。
   2、如果是事件中断,是不需要配置管理这个寄存器的。
   3、着重注意这种关系:EXTI寄存器与NVIC寄存器的关系,就是这个!!!
   
 写出的程序如下:
  由于是中断驱动,因此必须配置中断控制器。
 首先是:
  exit.h中断头文件:
   #ifndef _EXIT_H
   #define _EXIT_H
   #include "stm32f10x.h"
   void NVIC_Configure(void);
   void Exit_Configure(void);


   #endif
 然后是:
  exit.c中断程序配置信息:
  #include "exit.h"

  void NVIC_Configure()
  {
   
   NVIC_InitTypeDef NVIC_InitStructure;
   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
   NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
   NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE; 
   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
   NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
   NVIC_Init  ( &NVIC_InitStructure); 
  }

 

  void Exit_Configure()
  {
     EXTI_InitTypeDef EXTI_InitStructure;
     GPIO_InitTypeDef GPIO_InitStructure;
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE| RCC_APB2Periph_AFIO,ENABLE);

     NVIC_Configure(); 

     GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
     GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;
     GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
   
     GPIO_Init(GPIOE,&GPIO_InitStructure);

     GPIO_SetBits(GPIOC,GPIO_Pin_5);


     GPIO_EXTILineConfig  ( GPIO_PortSourceGPIOE,  GPIO_PinSource5);
     EXTI_InitStructure.EXTI_Line=EXTI_Line5;
     EXTI_InitStructure.EXTI_LineCmd=ENABLE;
     EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;;
     EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;
     EXTI_Init(&EXTI_InitStructure) ;
     

  }
  
  
  需要特别注意几个配置信息。
  
  然后是led.h:
  #ifndef _LED_H
  #define _LED_H
  #include "stm32f10x.h"

  #define ON 1
  #define OFF 0

  #define LED1(a) if (a)\
   GPIO_ResetBits(GPIOC,GPIO_Pin_3);\
   else\
   GPIO_SetBits(GPIOC,GPIO_Pin_3)
  #define LED2(a) if (a)\
   GPIO_ResetBits(GPIOC,GPIO_Pin_4);\
   else\
   GPIO_SetBits(GPIOC,GPIO_Pin_4)
  #define LED3(a) if (a)\
   GPIO_ResetBits(GPIOC,GPIO_Pin_5);\
   else\
   GPIO_SetBits(GPIOC,GPIO_Pin_5)
  void LED_GPIO_Config(void);


  #endif
  
  接着是:led.c
  
  #include "led.h"
  void LED_GPIO_Config(void)
  {
   GPIO_InitTypeDef GPIO_InitStructure;
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

   GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;
   GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_OD;
   GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
   
   GPIO_Init(GPIOC,&GPIO_InitStructure);

   GPIO_SetBits(GPIOC,GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5); 
  }
  
  然后是,中断主函数:
   /******************** (C) COPYRIGHT 2013**************************
    * 文件名  :main.c
    * 描述    :用3.5.0版本建的工程模板。         
    * 实验平台:野火STM32开发板
    * 库版本  :ST3.5.0
    *
    * 作者    :wit_yuan 
    * 版本    : v1.0
    * 时间    : 2013年4月27日
   **********************************************************************************/
   #include "stm32f10x.h"
   #include "led.h"
   #include "SysTick.h"
   #include "key.h"
   #include "exit.h"
   /* 
    * 函数名:main
    * 描述  : 主函数
    * 输入  :无
    * 输出  : 无
    */
   int main(void)
   {
    LED_GPIO_Config();
   // SysTick_Init();
   // key_Init();
    Exit_Configure();
     while(1)
     {
     
     }
    
   }

 在程序执行之后,只要开启了中断,那么就会在按键按下后,触发中断!
 
 中断服务程序如下:
  void EXTI9_5_IRQHandler(void)
  {
   if(EXTI_GetITStatus(EXTI_Line5) != RESET) //确保是否产生了EXTI Line中断
   {
    // LED1 取反  
    GPIO_WriteBit(GPIOC, GPIO_Pin_3, 
     (BitAction)((1-GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_3))));
    EXTI_ClearITPendingBit(EXTI_Line5);     //清除中断标志位
   }  
  }
 
 
 小结:
  写stm32的程序总体上看来是比较简单的,但是要注意一些比较细节的东西。

关键字:stm32  EXTI  按键中断: 引用地址:stm32学习之六

上一篇:stm32学习之七
下一篇:stm32学习之五

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

STM32单片机-汇编指令1
目录: 1、ldr/str/mov指令 1)LDR指令 2)STR和LDRB指令 3)MOV指令 4)使用示例 2、MOVS指令 3、LDM表示装载,STM表示存储 4、teq指令 5、使用tst来检查是否设置了特定的位 6、'^'的理解 7、spsr_cxsf,cpsr_cxsf的理解 8、cpsr的理解 9、指令后缀和条件判断 10、B、BL、BX、BLX 和 BXJ指令的区别 1)B 指令 2)BL 指令 3)BLX 指令 4)BX 指令和BXJ指令 5)总结 --------------------------------------------
[单片机]
<font color='red'>STM32</font>单片机-汇编指令1
STM32从入门到精通—I2C 简介
I2C端口,即内部集成电路接口,I2C总线接口用作微控制器和I2C串行总线之间的接口,提供多主模式功能,可以控制所有I2C总线特定的序列、协议、仲裁和时序。它支持标准和快速模式。 I2C可用于多种用途,包括CRC生成和验证、SMBus(系统管理总线)以及PMBus(电源管理总线)。 I2C主要特性 并行总线/I2C协议转换器 多主模式功能:同一接口既可用作主模式也可用作从模式 I2C主模式特性: 1. 时钟生成 2. 起始位和停止位生成 I2C从模式特性: 1. 可编程I2C地址检测 2. 双寻址模式,可对2个从地址应答 3. 停止位检测 7位/10位寻址以及广播呼叫的生成和检测 支持不同的通信速度: 1
[单片机]
STM32 PWM输出控制步进电机-3000转每分钟串口显示+电位器调速
用电位器控制步进电机转速,可以控制正反转,在电位器中点停止;越往左翻转越快,越往右正转越快。速度均匀,包含滤波。付完整代码。全部测试正常。 单片机源程序: #include led.h #include delay.h #include key.h #include sys.h #include usart.h #include timer.h #include adc.h int main(void) { u16 adcx; float temp; int a=3999; //int b=0 u16 led0pwmval=200; u8
[单片机]
stm32的互补输出和死区插入
1,简介 死区,简单解释:通常,大功率电机、变频器等,末端都是由大功率管、IGBT等元件组成的H桥或3相桥。每个桥的上半桥和下半桥是是绝对不能同时导通的,但高速的PWM驱动信号在达到功率元件的控制极时,往往会由于各种各样的原因产生延迟的效果,造成某个半桥元件在应该关断时没有关断,造成功率元件烧毁。死区就是在上半桥关断后,延迟一段时间再打开下半桥或在下半桥关断后,延迟一段时间再打开上半桥,从而避免功率元件烧毁。这段延迟时间就是死区。(就是上、下半桥的元件都是关断的)死区时间控制在通常的低端单片机所配备的PWM中是没有的。 PWM的上下桥臂的三极管是不能同时导通的。如果同时导通就会是电源两端短路。所以,两路触发信号要在一段时间内都是使
[单片机]
STM32+MPU6050设计便携式Mini桌面时钟(自动调整时间显示方向)
一、环境介绍 MCU: STM32F103C8T6 姿态传感器: MPU6050 OLED显示屏: 0.96寸SPI接口OLED 温度传感器: DS18B20 编译软件: keil5 二、功能介绍 完整项目源码下载地址: https://download.csdn.net/download/xiaolong1126626497/18657534 时钟可以根据MPU6050测量的姿态自动调整显示画面方向,也就是倒着拿、横着拿、反着拿都可以让时间显示是正对着自己的,时间支持自己调整,支持串口校准。可以按键切换页面查看环境温度显示。 支持串口时间校准: 三、核心代码 3.1 main.c #in
[单片机]
STM32+MPU6050设计便携式Mini桌面时钟(自动调整时间显示方向)
STM32单片机(1) 总记 学习资料+参考手册+LED灯
学习资料 视频教程 李想stm32视频教程49集 http://pan.baidu.com/s/1kTyt03P 原子教你玩STM32 http://pan.baidu.com/s/1gd25r6F 刘洋STM32(好) http://pan.baidu.com/s/1mgkeNsG http://www.iqiyi.com/u/1005856393 http://yun.baidu.com/share/home?uk=2853967793 http://www.zxkjmcu.com/ 参考文档 STM32的函数说明(中文).pdf http://download.csdn.net/detail/ley
[单片机]
深度解读STM32数据保存与毁灭
一、认识ADC兼进一步看懂STM的库 ADC是多少位的? 12位 ADC有多少个? 1个、2个或多至3个,视不同的器件而不同;每个又有多个通道。 关于通道的名堂: 10.3.3 通道选择 有16个多路通道。可以把转换分成两组:规则的和注入的。在任意多个通道上以任意顺序进行的一系列转换构成成组转换。例如,可以如下顺序完成转换:通道3、通道8、通道2、通道2、通道0、通道2、通道2、通道15。 ● 规则组由多达16个转换组成。规则通道和它们的转换顺序在ADC_SQRx寄存器中选择。规则组中转换的总数写入ADC_SQR1寄存器的L[3:0]位中。 ● 注入组由多达4个转换组成。注入通道和它们的转换顺序在ADC_JSQR寄存器中选择。注入
[单片机]
STM32 FSMC机制flash拓展
STM32是ST(意法半导体)公司推出的基于ARM内核Cortex-M3的32位微控制器系列。Cortex-M3内核是为低功耗和价格敏感的应用而专门设计的,具有突出的能效比和处理速度。通过采用Thumb-2高密度指令集,Cortex-M3内核降低了系统存储要求,同时快速的中断处理能够满足控制领域的高实时性要求,使基于该内核设计的STM32系列微控制器能够以更优越的性价比,面向更广泛的应用领域。 STM32系列微控制器为用户提供了丰富的选择,可适用于工业控制、智能家电、建筑安防、医疗设备以及消费类电子产品等多方位嵌入式系统设计。STM32系列采用一种新型的存储器扩展技术——FSMC,在外部存储器扩展方面具有独特的优势,可根据系统的
[单片机]
<font color='red'>STM32</font> FSMC机制flash拓展
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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