打印
[STM32F1]

如何使用STM32F103开发板实现基本的LED控制

[复制链接]
50|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
公羊子丹|  楼主 | 2025-1-9 07:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32F103系列是STMicroelectronics公司推出的32位微控制器(MCU),以其出色的性能和高性价比,广泛应用于嵌入式系统开发。本文将通过一个简单的LED控制项目,介绍如何使用STM32F103开发板进行编程。我们将利用STM32CubeMX配置开发环境,使用HAL库进行开发,控制LED闪烁。
项目概述在这个项目中,我们的目标是使用STM32F103的GPIO功能来控制开发板上的LED。通过配置一个引脚(例如PC13)为输出模式,编写简单的代码控制LED的开关,从而实现LED闪烁的效果。
硬件要求
  • STM32F103开发板(如STM32F103C8T6)
  • 一颗LED灯
  • 电阻(一般为220Ω)
  • 面包板及跳线
软件要求
  • STM32CubeMX:用于配置STM32硬件的工具
  • Keil uVision或STM32CubeIDE:用于编写和调试代码
步骤一:配置STM32CubeMX
  • 创建新工程:打开STM32CubeMX,点击“新建工程”,选择STM32F103C8T6作为目标芯片。
  • 配置时钟系统:默认情况下,STM32F103的系统时钟已经配置为HSI(高速内部振荡器)。你可以在“Clock Configuration”标签下调整时钟源,但对于本项目,默认配置已经足够。
  • 配置引脚:在“Pinout & Configuration”标签页中,将PC13设置为“GPIO_Output”,这意味着该引脚将作为输出端口用于控制LED。
  • 启用GPIO外设:在左侧的“Peripherals”树形结构中,找到“GPIO”并配置PC13为输出。
  • 生成代码:配置好硬件后,点击“Project”设置工程名,并选择IDE工具(Keil或STM32CubeIDE)。点击“Generate Code”生成初始化代码。

步骤二:编写代码生成代码后,打开Keil或STM32CubeIDE,开始编写应用程序代码。
代码结构
  • main.c:主程序文件,包含LED控制逻辑。
  • stm32f1xx_hal_conf.h:包含HAL库的配置选项。
以下是完整的代码示例。
#include "main.h"

/* 定义LED引脚 */
#define LED_PIN GPIO_PIN_13
#define LED_GPIO_PORT GPIOC

/* 主程序 */
int main(void)
{
    /* HAL初始化 */
    HAL_Init();
   
    /* 配置时钟 */
    SystemClock_Config();
   
    /* 初始化GPIO */
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    __HAL_RCC_GPIOC_CLK_ENABLE();
   
    GPIO_InitStruct.Pin = LED_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct);

    /* 主循环 */
    while (1)
    {
        /* 点亮LED */
        HAL_GPIO_WritePin(LED_GPIO_PORT, LED_PIN, GPIO_PIN_SET);
        HAL_Delay(500);  // 延时500毫秒
        
        /* 熄灭LED */
        HAL_GPIO_WritePin(LED_GPIO_PORT, LED_PIN, GPIO_PIN_RESET);
        HAL_Delay(500);  // 延时500毫秒
    }
}

/* 时钟配置函数 */
void SystemClock_Config(void)
{
    /* 根据具体需要配置时钟,这里使用默认的HSI时钟 */
    /* 代码略 */
}

/* HAL库中断处理函数 */
void HAL_MspInit(void)
{
    /* 初始化硬件抽象层(HAL) */
    /* 代码略 */
}
代码解析
  • 初始化HAL库:HAL_Init()函数初始化HAL库,确保所有外设正确配置。
  • GPIO配置:使用HAL_GPIO_Init()函数配置PC13引脚为推挽输出模式。通过配置GPIO_PIN_13和GPIO_MODE_OUTPUT_PP,我们使PC13引脚可以控制LED。
  • LED控制:在主循环中,使用HAL_GPIO_WritePin()函数来控制PC13引脚的电平。GPIO_PIN_SET表示LED亮,GPIO_PIN_RESET表示LED灭。
  • 延时函数:使用HAL_Delay()函数控制LED的闪烁周期。每500毫秒切换一次LED的状态。

步骤三:编译和下载
  • 编译程序:在Keil或STM32CubeIDE中编译程序。确保没有编译错误。
  • 下载到开发板:使用ST-Link或者其他编程工具将程序烧录到STM32F103开发板上。
  • 调试:下载程序后,连接开发板并观察LED是否按照预期闪烁。

调试与测试如果LED没有闪烁,请检查以下几点:
  • 是否正确连接了LED及电阻。
  • 检查GPIO引脚配置是否正确。
  • 确认开发板的电源是否正常。
总结通过这个简单的项目,我们学习了如何使用STM32F103开发板进行基本的GPIO控制,成功实现了LED闪烁效果。此项目可以作为学习STM32F103系列微控制器的基础,进一步的项目可以加入更多功能,如按键输入、PWM控制等。

使用特权

评论回复
沙发
周半梅| | 2025-1-9 07:43 | 只看该作者
看完这个教程,终于知道怎么用STM32做LED闪烁了!

使用特权

评论回复
板凳
帛灿灿| | 2025-1-9 07:43 | 只看该作者
这个例子真是太简单了,非常适合刚入门的人。

使用特权

评论回复
地板
童雨竹| | 2025-1-9 07:43 | 只看该作者
一开始不太理解GPIO怎么用,现在清楚多了,感谢分享!

使用特权

评论回复
5
万图| | 2025-1-9 07:44 | 只看该作者
这个代码直接复制粘贴就可以用了,太方便了!

使用特权

评论回复
6
Wordsworth| | 2025-1-9 07:44 | 只看该作者
STM32的开发流程挺复杂的,不过这个小项目还是蛮有意思的。

使用特权

评论回复
7
Pulitzer| | 2025-1-9 07:44 | 只看该作者
这篇文章让我对STM32有了新的认识,以后可以尝试更复杂的项目了。

使用特权

评论回复
8
Bblythe| | 2025-1-9 07:44 | 只看该作者
用STM32做LED控制是我入门的第一步,希望能学习更多有趣的东西。

使用特权

评论回复
9
Uriah| | 2025-1-9 07:45 | 只看该作者
看着LED闪烁就有一种成就感,哈哈哈。

使用特权

评论回复
10
Clyde011| | 2025-1-9 07:45 | 只看该作者
以前用过Arduino,感觉STM32要高级很多,得多花点时间学习。

使用特权

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

本版积分规则

70

主题

4154

帖子

2

粉丝