打印

中断方式按键点灯实验

[复制链接]
360|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
道子|  楼主 | 2020-4-8 11:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*
中断方式按键点灯实验
按键,A口0脚输入
led,B口0脚输出
开机led灯亮
按一下灭再按一下亮
*/
#include "stm32f10x.h"

void EXTI0_IRQHandler(void) //中断处理函数
{
        if(EXTI_GetITStatus(EXTI_Line0) != RESET) //确实中断事件
        {
                if (!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0)) //检测led亮
      GPIO_SetBits(GPIOB,GPIO_Pin_0);//关闭led
                else GPIO_ResetBits(GPIOB,GPIO_Pin_0);//打开led
                EXTI_ClearITPendingBit(EXTI_Line0);//清除中断标志
        }  
}

int main(void)
{
    GPIO_InitTypeDef gpiojiegouti;//定义输入输出结构体
    EXTI_InitTypeDef extijiegouti;//定义外部中断结构体
    NVIC_InitTypeDef nvicjiegouti;//定义中断控制结构体

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);//打开AB端口外部中断时钟

    //端口输入输出配置
    gpiojiegouti.GPIO_Pin=GPIO_Pin_0;//0号引脚
    gpiojiegouti.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出
    gpiojiegouti.GPIO_Speed=GPIO_Speed_10MHz;//输出速度
    GPIO_Init(GPIOB, &gpiojiegouti);//设置B端口
    gpiojiegouti.GPIO_Mode=GPIO_Mode_IN_FLOATING;//悬浮输入
    GPIO_Init(GPIOA, &gpiojiegouti);//设置A端口

    //外部中断事件配置
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);//A口0脚中断源
    extijiegouti.EXTI_Line = EXTI_Line0;//0号外部中断线
    extijiegouti.EXTI_Mode = EXTI_Mode_Interrupt;//外部中断模式
    extijiegouti.EXTI_Trigger = EXTI_Trigger_Rising;//上升中断
    extijiegouti.EXTI_LineCmd = ENABLE;//外部中断线开通
    EXTI_Init(&extijiegouti);//设置中断寄存器

    //中断控制器配置
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//第一组优先级
    nvicjiegouti.NVIC_IRQChannel = EXTI0_IRQn;//中断通道
    nvicjiegouti.NVIC_IRQChannelPreemptionPriority = 1;//配置抢先优先级
    nvicjiegouti.NVIC_IRQChannelSubPriority = 1;//配置子优先级
    nvicjiegouti.NVIC_IRQChannelCmd = ENABLE;//打开通道
    NVIC_Init(&nvicjiegouti); //设置中断控制器

        while(1) //这个不要漏掉                        
        {
        }
}

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

443

主题

448

帖子

0

粉丝