您的位置 首页 发布

stm32学习之六

EXTI之按键中断:EXTI中断:注意:1、EXTI中断是一种外部中断,需要配置相关的管理中断器件的。2、如果是事件中断,是不需要配置管理这个寄存…

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的程序总体上看来是比较简单的,可是要留意一些比较细节的东西。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/fabu/252313.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部