STM32入门教程:按键控制LED

STM32是一款广泛应用于嵌入式系统开发的微控制器系列。本教程将带领读者入门STM32的基础知识,并通过编写一个简单的代码案例来演示如何使用按键控制LED灯。

本教程将以STM32F4 Discovery板作为开发板,使用Keil MDK作为开发环境进行演示。

在开始之前,我们需要先准备好以下的开发硬件和软件环境:

  1. STM32F4 Discovery板
  2. USB电缆
  3. Keil MDK软件
  4. STM32CubeMX软件

首先,我们需要使用STM32CubeMX来配置STM32的引脚设置。STM32CubeMX是一款图形化的配置工具,可以帮助我们快速地设置STM32的外设和引脚。

  1. 打开STM32CubeMX软件,在左侧的"Part Number"栏目中选择我们使用的STM32型号(例如:STM32F407VG)。
  2. 在右侧的"Pinout & Configuration"栏目中,可以看到STM32的引脚图。我们需要根据需要配置LED和按键的引脚。
  3. 在"Pinout & Configuration"栏目中,选择两个GPIO引脚作为LED的控制引脚。例如,我们选择GPIOA的Pin 5和Pin 6作为控制LED的引脚。
  4. 同样,在"Pinout & Configuration"栏目中,选择一个GPIO引脚作为按键的输入引脚。例如,我们选择GPIOC的Pin 13作为按键的输入引脚。

配置完毕后,点击左上角的"Project"按钮生成代码。

接下来,我们需要在Keil MDK软件中编写代码来实现按键控制LED。具体步骤如下:

  1. 打开Keil MDK软件,点击"File" -> "New" -> "Project"来创建一个新的工程。
  2. 在创建工程的过程中,选择我们使用的STM32型号(例如:STM32F407VG)。
  3. 在弹出的对话框中,选择工程的保存路径和工程名,并点击"Save"按钮。
  4. 在"Project"窗口中,右键点击"Source Group"文件夹,选择"Add Files to Group 'Source Group'",然后选择我们生成的代码文件(通常为"main.c")。
  5. 在"main.c"文件中,输入以下代码:
#include "stm32f4xx.h"

// 定义LED和按键的引脚宏定义
#define LED_GPIO_PORT       GPIOA
#define LED_PIN             GPIO_Pin_5

#define BUTTON_GPIO_PORT    GPIOC
#define BUTTON_PIN          GPIO_Pin_13

// 定义按键状态
#define BUTTON_PRESSED      1
#define BUTTON_RELEASED     0

// 函数定义
void GPIO_Config(void);
void Delay(__IO uint32_t nCount);
void LED_On(void);
void LED_Off(void);

// 主函数
int main(void)
{
    // 初始化GPIO引脚配置
    GPIO_Config();
    
    while (1)
    {
        // 检测按键状态
        if (GPIO_ReadInputDataBit(BUTTON_GPIO_PORT, BUTTON_PIN) == BUTTON_PRESSED)
        {
            // 如果按键被按下,则开启LED灯
            LED_On();
        }
        else
        {
            // 否则关闭LED灯
            LED_Off();
        }
    }
}

// 配置GPIO引脚
void GPIO_Config(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    
    // 使能LED和按键的时钟
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC, ENABLE);
    
    // 配置LED引脚为输出
    GPIO_InitStructure.GPIO_Pin = LED_PIN;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(LED_GPIO_PORT, &GPIO_InitStructure);
    
    // 配置按键引脚为输入
    GPIO_InitStructure.GPIO_Pin = BUTTON_PIN;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(BUTTON_GPIO_PORT, &GPIO_InitStructure);
}

// 延时函数
void Delay(__IO uint32_t nCount)
{
    while (nCount--)
    {
    }
}

// 打开LED灯
void LED_On(void)
{
    GPIO_SetBits(LED_GPIO_PORT, LED_PIN);
}

// 关闭LED灯
void LED_Off(void)
{
    GPIO_ResetBits(LED_GPIO_PORT, LED_PIN);
}

  1. 点击Keil MDK软件界面上的"Build"按钮编译代码,确保没有错误。
  2. 将STM32F4 Discovery板通过USB电缆连接到电脑上,并将开发板的BOOT0引脚接地(即连接到GND引脚)。
  3. 点击Keil MDK软件界面上的"Flash"按钮烧录代码到STM32F4 Discovery板上。
  4. 断开BOOT0引脚的连接,并重新上电开发板。
  5. 现在,我们可以通过按下按键来控制LED的亮灭状态了。

至此,我们已经完成了一个简单的按键控制LED灯的代码案例。通过这个例子,我们可以了解到如何使用STM32CubeMX来配置STM32的引脚和外设,以及如何在Keil MDK中编写和烧录代码。希望这个教程对你入门STM32有所帮助!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CrMylive.

穷呀,求求补助

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值