使用STM32CubeMX新建小熊派的STM32L431RCT6工程实现按键控制LED(循环查询&外部中断)

作者介绍

刘懿宵,男,西安工程大学电子信息学院,2017级本科生。
专业:通信工程
电子邮件:yixiao_liu1999@163.com

开发板上的按键

在这里插入图片描述

确定按键引脚

根据原理图:
1)PC13为LED控制引脚;
2)PB2为KEY1引脚;
3)PB3为KEY2引脚。JTDO-TRACE SWO/PB3
在这里插入图片描述

循环查询实现按键

选择引脚和配置时钟

配置按键引脚PB2和PB3为输入模式通过读取引脚电平信号来判断按键是否按下。
配置LED引脚PC13为输出模式。
在这里插入图片描述

详细配置GPIO

下面是基于STM32F103RCT6的按键使用外部中断控制LED的代码: ``` #include "stm32f10x.h" void EXTI0_IRQHandler(void) { if (EXTI_GetITStatus(EXTI_Line0) != RESET) { GPIO_WriteBit(GPIOB, GPIO_Pin_12, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_12))); EXTI_ClearITPendingBit(EXTI_Line0); } } void initGPIO() { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &GPIO_InitStructure); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; EXTI_InitStructure.EXTI_Line = EXTI_Line0; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } int main(void) { initGPIO(); while (1) { // Loop } } ``` 该代码的作用是,将按键连接到PA0引脚,将LED连接到PB12引脚。按下按键时,LED将切换状态。在代码中使用外部中断来检测按键的状态,并在触发中断时切换LED的状态。在初始化中,使用GPIO_Init函数来配置PB12为推挽输出模式,PA0为下拉输入模式。使用EXTI_Init函数来配置外部中断,以便在检测到按键状态变化时触发中断。在中断处理函数中,使用GPIO_WriteBit函数来切换LED的状态,并使用EXTI_ClearITPendingBit函数清除中断标志位。整个程序将被放在一个无限循环中,以便在触发中断后继续运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值