【机智云Gokit开发套件试用体验】机智云之按键中断

  • hlwhlw
  • LV4工程师
  • |      2015-09-21 07:45:12
  • 浏览量 1140
  • 回复:0

查看机智云底板的原理图

【机智云Gokit开发套件试用体验】机智云之按键中断 

可以看到USER KEY PC13控制。

我的上一个帖子   【机智云Gokit开发套件试用体验】机智云之按键轮询  采用的是轮询的方式,这个帖子将采用中断的方式来控制LED1

在我之前的帖子  【机智云Gokit开发套件试用体验】机智云之流水灯 的基础上添加exti.cexti.h,并修改main函数和stm32f10x_it.c函数

 

 

主要代码如下

Exti.c

 

  

#include "bsp_exti.h"

 

static void NVIC_Configuration(void)

{

  NVIC_InitTypeDef NVIC_InitStructure;

  

  /* Configure one bit for preemption priority */

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

  

  /* 配置P13为中断源 */

  NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

  NVIC_Init(&NVIC_InitStructure);

}

 

 /*  配置 PC13 为线中断口,并设置中断优先级*/

void EXTI_PC13_Config(void)

{

GPIO_InitTypeDef GPIO_InitStructure; 

EXTI_InitTypeDef EXTI_InitStructure;

 

/* config the extiline(PC13) clock and AFIO clock */

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO,ENABLE);



/* config the NVIC(PC13) */

NVIC_Configuration();

 

/* EXTI line gpio config(PC13) */

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;       

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;  // 上拉输入

  GPIO_Init(GPIOC, &GPIO_InitStructure);

 

/* EXTI line(PC13) mode config */

  GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13); 

  EXTI_InitStructure.EXTI_Line = EXTI_Line13;

  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿中断

  EXTI_InitStructure.EXTI_LineCmd = ENABLE;

  EXTI_Init(&EXTI_InitStructure); 

}

 

 

Exti.h

 

#ifndef __EXTI_H

#define __EXTI_H

 

#include "stm32f10x.h"

void EXTI_PC13_Config(void);

 

#endif 

 

 

 

Main.c

 

 

#include "stm32f10x.h"

#include "bsp_led.h"

#include "bsp_exti.h" 

 

#define CLI()      __set_PRIMASK(1) /* 关闭总中断 */  

#define SEI() __set_PRIMASK(0) /* 开放总中断 */ 

 

int main(void)

{

/* config the led */

LED_GPIO_Config();

LED1_ON;


CLI();

SEI();


/* exti line config */

EXTI_PC13_Config(); 


/* wait interrupt */

while(1)                            

{

}

}

 

 

修改stm32f10x_it.c

 

包含头文件

#include "stm32f10x_it.h"

#include "bsp_led.h"

.......

 

修改void SysTick_Handler(void)函数

 

/**

  * @brief  This function handles SysTick Handler.

  * @param  None

  * @retval None

  */

void SysTick_Handler(void)

{

}

 

/// IO 线中断,中断口为PC13

//void EXTI13_IRQnHandler(void)

void EXTI15_10_IRQHandler(void)

{

if(EXTI_GetITStatus(EXTI_Line13) != RESET) //确保是否产生了EXTI Line中断

{

// LED1 取反

LED1_TOGGLE;

EXTI_ClearITPendingBit(EXTI_Line13);     //清除中断标志位

}  

}

 

 

把程序下载进机智云底板后,就可以通过USER KEY(中断方式)来控制LED1的亮灭了。如下所示

【机智云Gokit开发套件试用体验】机智云之按键中断 

 

  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:0
x
收藏成功!点击 我的收藏 查看收藏的全部帖子