STM32 按键EXTI方式 使用ST3.0.0库

发布者:石头上种庄稼最新更新时间:2016-10-05 来源: eefocus关键字:STM32  按键  EXTI方式 手机看文章 扫描二维码
随时随地手机看文章
把IO配置为 EXTI中断的步骤:

1:使能EXTI Line时钟和第二功能时钟。

2:配置EXTI Line中断优先级(NVIC)

3:配置EXTI Line IO (哪个引脚,输入模式,初始化)

4:把引脚配置为EXTI Line的中断源(GPIO操作),配置IO口的工作模式

5:配置EXTI Line的工作模式。

==============================================================================

例如:

 GPIO_InitTypeDef GPIO_InitStructure; 
 EXTI_InitTypeDef EXTI_InitStructure;
 
 /* config the extiline(PB0) clock and AFIO clock 使能extiline IO时钟和第二功能时钟*/
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);
 
 /* config the NVIC(PB0) 配置extiline中断优先级*/
 NVIC_Configuration();
 
 /* EXTI line gpio config(PB0) 配置EXTI line gpio  */ 
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;       
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;  // 上拉输入
 GPIO_Init(GPIOB, &GPIO_InitStructure);
 
 /* EXTI line(PB0) mode config  选定IO EXTI的IO线和IO口的中断模式  */
 GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource0); //选定PB0为中断源

 EXTI_InitStructure.EXTI_Line = EXTI_Line0; //把PB0连接到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);    //初始化

 

 

/*
 * 函数名:NVIC_Configuration
 * 描述  :配置嵌套向量中断控制器NVIC
 * 输入  :无
 * 输出  :无
 * 调用  :内部调用
 */
static void NVIC_Configuration(void)
{
 NVIC_InitTypeDef NVIC_InitStructure;
 
 /* Configure one bit for preemption priority */
 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
 
 /* 配置P[A|B|C|D|E]0为中断源 */
 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);
}

接下来要写中断函数了

在stm32f10x_it.c中编写中断服务函数

/* I/O线中断,中断线为PB0 */
void EXTI0_IRQHandler(void)
{
  if(EXTI_GetITStatus(EXTI_Line0) != RESET) //确保是否产生了EXTI Line中断
  {
   // LED1 取反  
  GPIO_WriteBit(GPIOC, GPIO_Pin_3, 
               (BitAction)((1-GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_3))));
    EXTI_ClearITPendingBit(EXTI_Line0);     //清除中断标志位
  }  
}

要注意的是在中断服务程序完成之后还要记得清除中断标志位.

这里要说明一下中断的分陪

EXTI0

EXTI1

EXTI2

EXTI3

EXTI4

EXTI5-9

EXTI10-15

中断0-4是每个中断线各自用一个中断函数,5-9是共用一个中断函数,10-15共用一个中断函数。

关于中断服务函数的命名的编写方法是:

在startup_stm32f10x_hd.s文件中查找外部中断源

                ; External Interrupts
                DCD     WWDG_IRQHandler           ; Window Watchdog
                DCD     PVD_IRQHandler            ; PVD through EXTI Line detect
                DCD     TAMPER_IRQHandler         ; Tamper
                DCD     RTC_IRQHandler            ; RTC
                DCD     FLASH_IRQHandler          ; Flash
                DCD     RCC_IRQHandler            ; RCC
                DCD     EXTI0_IRQHandler          ; EXTI Line 0
                DCD     EXTI1_IRQHandler          ; EXTI Line 1
                DCD     EXTI2_IRQHandler          ; EXTI Line 2
                DCD     EXTI3_IRQHandler          ; EXTI Line 3
                DCD     EXTI4_IRQHandler          ; EXTI Line 4
                DCD     DMA1_Channel1_IRQHandler  ; DMA1 Channel 1
                DCD     DMA1_Channel2_IRQHandler  ; DMA1 Channel 2
                DCD     DMA1_Channel3_IRQHandler  ; DMA1 Channel 3
                DCD     DMA1_Channel4_IRQHandler  ; DMA1 Channel 4
                DCD     DMA1_Channel5_IRQHandler  ; DMA1 Channel 5
                DCD     DMA1_Channel6_IRQHandler  ; DMA1 Channel 6
                DCD     DMA1_Channel7_IRQHandler  ; DMA1 Channel 7
                DCD     ADC1_2_IRQHandler         ; ADC1 & ADC2
                DCD     USB_HP_CAN1_TX_IRQHandler  ; USB High Priority or CAN1 TX
                DCD     USB_LP_CAN1_RX0_IRQHandler ; USB Low  Priority or CAN1 RX0
                DCD     CAN1_RX1_IRQHandler       ; CAN1 RX1
                DCD     CAN1_SCE_IRQHandler       ; CAN1 SCE
                DCD     EXTI9_5_IRQHandler        ; EXTI Line 9..5
                DCD     TIM1_BRK_IRQHandler       ; TIM1 Break
                DCD     TIM1_UP_IRQHandler        ; TIM1 Update
                DCD     TIM1_TRG_COM_IRQHandler   ; TIM1 Trigger and Commutation
                DCD     TIM1_CC_IRQHandler        ; TIM1 Capture Compare
                DCD     TIM2_IRQHandler           ; TIM2
                DCD     TIM3_IRQHandler           ; TIM3
                DCD     TIM4_IRQHandler           ; TIM4
                DCD     I2C1_EV_IRQHandler        ; I2C1 Event
                DCD     I2C1_ER_IRQHandler        ; I2C1 Error
                DCD     I2C2_EV_IRQHandler        ; I2C2 Event
                DCD     I2C2_ER_IRQHandler        ; I2C2 Error
                DCD     SPI1_IRQHandler           ; SPI1
                DCD     SPI2_IRQHandler           ; SPI2
                DCD     USART1_IRQHandler         ; USART1
                DCD     USART2_IRQHandler         ; USART2
                DCD     USART3_IRQHandler         ; USART3
                DCD     EXTI15_10_IRQHandler      ; EXTI Line 15..10
                DCD     RTCAlarm_IRQHandler       ; RTC Alarm through EXTI Line
                DCD     USBWakeUp_IRQHandler      ; USB Wakeup from suspend
                DCD     TIM8_BRK_IRQHandler       ; TIM8 Break
                DCD     TIM8_UP_IRQHandler        ; TIM8 Update
                DCD     TIM8_TRG_COM_IRQHandler   ; TIM8 Trigger and Commutation
                DCD     TIM8_CC_IRQHandler        ; TIM8 Capture Compare
                DCD     ADC3_IRQHandler           ; ADC3
                DCD     FSMC_IRQHandler           ; FSMC
                DCD     SDIO_IRQHandler           ; SDIO
                DCD     TIM5_IRQHandler           ; TIM5
                DCD     SPI3_IRQHandler           ; SPI3
                DCD     UART4_IRQHandler          ; UART4
                DCD     UART5_IRQHandler          ; UART5
                DCD     TIM6_IRQHandler           ; TIM6
                DCD     TIM7_IRQHandler           ; TIM7
                DCD     DMA2_Channel1_IRQHandler  ; DMA2 Channel1
                DCD     DMA2_Channel2_IRQHandler  ; DMA2 Channel2
                DCD     DMA2_Channel3_IRQHandler  ; DMA2 Channel3
                DCD     DMA2_Channel4_5_IRQHandler ; DMA2 Channel4 & Channel5

============================================================================

void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)

把IO引脚配置为 EXTI Line,把IO引脚作为EXTI中断线使用,是IO的第二功能。

GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource0); //选定PB0为中断源(中断线)

==============================================================================

获取中断线的状态

ITStatus EXTI_GetITStatus(uint32_t EXTI_Line)

例如:
if(EXTI_GetITStatus(EXTI_Line0) != RESET) //确保是否产生了EXTI Line中断,也可以不加这条if语句(本人的理解)
 {
  // LED1 取反  
  GPIO_WriteBit(GPIOC, GPIO_Pin_3,(BitAction)((1-GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_3))));
  EXTI_ClearITPendingBit(EXTI_Line0);     //清除中断标志位
 }

============================================================================================

void EXTI_ClearITPendingBit(uint32_t EXTI_Line)

例如:

EXTI_ClearITPendingBit(EXTI_Line0);     //清除中断标志位 Clears the EXTI line pending bits. 清EXTI Line0的中断标志位。

关键字:STM32  按键  EXTI方式 引用地址:STM32 按键EXTI方式 使用ST3.0.0库

上一篇:STM32 CRC ST库3.0.0
下一篇:STM32 按键扫描方式 使用ST3.0.0库

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

基于单片机的电脑弹簧机按键板的设计与实现
引言 电脑弹簧机是用来生产弹簧的专用设备。按键板,作为一个人机交互的操作界面,起着输入操作命令,编辑弹簧加工程序及修改数据的功能,对电脑弹簧机的操作控制起着重要作用。在实际应用中,为方便操作,需要将按键板的按键汉字化和直接化,这使得使用标准的PC键盘不太可能,所以开发一块便宜且通用的按键板就很有现实意义。在PC机中,键盘和主机的通信采用的是PS/2协议。由于电脑弹簧机的控制器是一个标准的工控PC机控制器,具有标准的键盘接口,为了使设计简单和通用,在这里使用这个标准的键盘接口,并采用PS/2协议来进行按键板和弹簧机的通信,设计时选用单片机AT89S51作为按键板的处理芯片进行按键的识别和数据的接收和发送。本文介绍的是设计并实现这个
[单片机]
基于单片机的电脑弹簧机<font color='red'>按键</font>板的设计与实现
STM32之定时器的一般应用
STM32系列芯片拥有最少3个、最多8个16位的定时器,这是定时器通过可编程预分频器驱动的16位自动装载计数器构成。 定时器的主要功能有如下几个大点: 1.16位向上、向下、向上/向下自动装载计数器。 2.16位可编程预分频器。 3.4个独立通道(输入捕获,输出比较,PWM生成,单脉冲模式输出)。 4.使用外部信号控制定时器和定时器互连的同步电路。 5.如下事件发生时产生中断/DMA(更新,触发事件,输入捕获,输出比较等)。 tips:高级定时器1和8还具有死区时间可编程的互补输出。 在学习定时器的时候,许多的底层问题,我们可以参考相应的参考手册,这里主要介绍定时器固件库函数的使用。 1.TIM_DeInit函数的功能是将外设TI
[单片机]
STM32和CC2520的TinyOS移植与驱动分析
引言 无线传感器网络(Wireless Sensor Network,WSN)是一种应用相关的网络。需要对某些操作系统进行移植。本文采用TinyOS作为软件平台,成功移植了Radio、Timer、USART、SPI和General I/O等5个底层模块。测试结果表明,移植的5个底层模块能够正常工作。 1 MCU和无线模块介绍 STM32系列按性能分成两个系列:STM32F103“增强型”系列和STM32F101“基本型”系列,时钟频率达到72 MHz,是同类产品中性能最高的产品。本项目采用芯片STM32F103RBT6。CC2520选用第二代ZigBee/IEEE 802.15.4无线电频率(RF)收发器。 2 Tin
[单片机]
<font color='red'>STM32</font>和CC2520的TinyOS移植与驱动分析
STM32的启动过程如何分析
本文分析STM32单片机从上电到运行的过程,目的在于了解STM32单片机从启动到运行的整个过程。 一般我们在使用STM32单片机的时候,都是使用官方提供的驱动文件,移植到自己即将要使用的工程中,移植完成之后再编写自己的逻辑代码,放到main( )函数中,就可以完美的运行起来了。相信很多的人都没有去关注过STM32从启动到运行这个过程都发生了什么,现在就简单分析一些这个过程。 本文以STM32F103为例进行分析。在官方给我们提供的启动文件中,将整个单片机的启动过程要做的事情都已经帮我们做好了,以至于我们在使用这款单片机的时候,几乎可以不会吹灰之力就可以运行起来。STM32F103的启动文件形如: 根据不同的芯片容量,都
[单片机]
<font color='red'>STM32</font>的启动过程如何分析
STM32 内部温度传感器
(一) STM32 内部温度传感器概要 STM32 芯片内部一项独特的功能就是内部集成了一个温度传感器, 因为是内置, 所以测试的是芯片内部的温度, 如果芯片外接负载一定的情况下, 那么芯片的发热也基本稳定, 相对于外界的温度而言, 这个偏差值也是基本稳定的. 也就是说用 STM32 内部传感器来测量外界环境的温度. 在一些恶劣的应用环境下面, 可以通过检测芯片内部而感知设备的工作环境温度, 如果温度过高或者过低了 则马上睡眠或者停止运转. 可以保证您的设备工作的可靠性. 1. STM32内部温度传感器与ADC的通道16相连,与ADC配合使用实现温度测量; 2. 测量范围 40~125℃,精度 1.5℃。 3. 温度传感
[单片机]
<font color='red'>STM32</font> 内部温度传感器
STM32复习笔记(九)OLED的介绍和使用方法
一、OLED的介绍: OLED,即有机发光二极管(Organic Light-Emitting Diode),又称为有机电激光显示(Organic Electroluminesence Display, OELD)。OLED由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。 OLED显示技术具有自发光的特性,采用非常薄的有机材料涂层和玻璃基板,当有电流通过时,这些有机材料就会发光,而且OLED显示屏幕可视角度大,并且能够节省电能,从2003年开始这种显示设备在MP3播放器上得到了应用。 LCD都需要背
[单片机]
<font color='red'>STM32</font>复习笔记(九)OLED的介绍和使用方法
STM32+ESP8266获取网络时间和天气
先给出两个可以获取天气和时间的网站 https://www.seniverse.com/docs 可以获取天气 http://api.k780.com:88/?app=life.time&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json&HTTP/1.1 可以获取时间 接下来简单说说怎么通过AT指令的方式去获取天气及时间信息 1:连网 首先,ESP8266肯定是需要连上网才能访问这些信息。所以,第一步要做的就是让ESP8266连接上wifi热点,可以是路由器,也可以是手机热点。下面写出重要的步骤 1:使用串口发送指令AT+CWMOD
[单片机]
STM32 RTC寄存器操作步骤
寄存器操作步骤 1、使能电源时钟和备份区域时钟。 我们要访问 RTC 和备份区域就必须先使能电源时钟 和 备份区域时钟。这个通过RCC_APB1ENR 寄存器来设置。 2、取消备份区写保护。 要向备份区域写入数据,就要先取消备份区域写保护(写保护在每次硬复位之后被使能),否则是无法向备份区域写入数据的。我们需要用到向备份区域写入一个字节,来标记时钟已经配置过了,这样避免每次复位之后重新配置时钟。 3、复位备份区域,开启外部低速振荡器。 在取消备份区域写保护之后,我们可以先对这个区域复位,以清除前面的设置,当然这个操作不要每次都执行,因为备份区域的复位将导致之前存在的数据丢失,所以要不要复位,要看情况而定。然
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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