STM32是一款广泛应用于嵌入式系统开发的微控制器系列。本教程将带领读者入门STM32的基础知识,并通过编写一个简单的代码案例来演示如何使用按键控制LED灯。
本教程将以STM32F4 Discovery板作为开发板,使用Keil MDK作为开发环境进行演示。
在开始之前,我们需要先准备好以下的开发硬件和软件环境:
- STM32F4 Discovery板
- USB电缆
- Keil MDK软件
- STM32CubeMX软件
首先,我们需要使用STM32CubeMX来配置STM32的引脚设置。STM32CubeMX是一款图形化的配置工具,可以帮助我们快速地设置STM32的外设和引脚。
- 打开STM32CubeMX软件,在左侧的"Part Number"栏目中选择我们使用的STM32型号(例如:STM32F407VG)。
- 在右侧的"Pinout & Configuration"栏目中,可以看到STM32的引脚图。我们需要根据需要配置LED和按键的引脚。
- 在"Pinout & Configuration"栏目中,选择两个GPIO引脚作为LED的控制引脚。例如,我们选择GPIOA的Pin 5和Pin 6作为控制LED的引脚。
- 同样,在"Pinout & Configuration"栏目中,选择一个GPIO引脚作为按键的输入引脚。例如,我们选择GPIOC的Pin 13作为按键的输入引脚。
配置完毕后,点击左上角的"Project"按钮生成代码。
接下来,我们需要在Keil MDK软件中编写代码来实现按键控制LED。具体步骤如下:
- 打开Keil MDK软件,点击"File" -> "New" -> "Project"来创建一个新的工程。
- 在创建工程的过程中,选择我们使用的STM32型号(例如:STM32F407VG)。
- 在弹出的对话框中,选择工程的保存路径和工程名,并点击"Save"按钮。
- 在"Project"窗口中,右键点击"Source Group"文件夹,选择"Add Files to Group 'Source Group'",然后选择我们生成的代码文件(通常为"main.c")。
- 在"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);
}
- 点击Keil MDK软件界面上的"Build"按钮编译代码,确保没有错误。
- 将STM32F4 Discovery板通过USB电缆连接到电脑上,并将开发板的BOOT0引脚接地(即连接到GND引脚)。
- 点击Keil MDK软件界面上的"Flash"按钮烧录代码到STM32F4 Discovery板上。
- 断开BOOT0引脚的连接,并重新上电开发板。
- 现在,我们可以通过按下按键来控制LED的亮灭状态了。
至此,我们已经完成了一个简单的按键控制LED灯的代码案例。通过这个例子,我们可以了解到如何使用STM32CubeMX来配置STM32的引脚和外设,以及如何在Keil MDK中编写和烧录代码。希望这个教程对你入门STM32有所帮助!