STM32实验4:按键中断

端口配置

#include "stm32f10x.h"
//PA13  PA15
void    KEY_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    EXTI_InitTypeDef EXTI_InitStructure;
    NVIC_InitTypeDef NVIC_InitStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);//使能外设置时钟

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;    //PA15上拉输入
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource15);//将PA15设置为中断输入

    EXTI_InitStructure.EXTI_Line = EXTI_Line15;                 //中断线
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;  //中断请求
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;//下降沿触发
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;                //使能中断
    EXTI_Init(&EXTI_InitStructure);

    NVIC_Configuration();       //设置中断优先级
    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);
}

中断服务函数

void EXTI15_10_IRQHandler(void)
{
    if(EXTI_GetITStatus(EXTI_Line15)==1)  //按键是否按下
    {
        LED0=!LED0; 
    }
    EXTI_ClearITPendingBit(EXTI_Line15);//清除中断标识
}

主函数

#include "stm32f10x.h"
 int main(void)
 {
    SystemInit();            //系统时钟初始化为72M    SYSCLK_FREQ_72MHz  
    delay_init(72);
    LED_Init();
    KEY_Init();
     while(1)
    {
        ;
    }
}

知识点
1.STM32的所有GPIO都可以用作外部中断源的输入端
2.STM32的中断向量具有两个属性,一个为抢占属性,一个为响应属性,其属性编号越小,表明它的优先级别越高。高抢占优先级可以打断低抢占优先级。当两个中断向量的抢占优先级相同时,如果两个中断同时到达,则先处理响应优先级别高的中断。
3.NVIC优先级组有5种分配方式。
4.STM32的所有GPIO都引入到EXTI中断线上。
5.可以配置成上升沿触发,下降沿触发和双边沿触发三种触发方式。
6.当GPIO用作EXTI外部中断或者使用重映射功能时,必须开启AFIO,同时也要开启外设时钟。
7.stm32f10x_it.c文件是专门用来存放中断服务函数的,中断服务函数的名字必须要与启动文件startup_stm32f10x_hd.s中的中断向量表定义一致。
8.NVIC_InitStructure.NVIC_IRQChannel的值可以在stm32f10x.h中搜寻。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值