当前位置: 首页 > news >正文

STM32HAL 快速入门(一):点灯前的准备 —— 从软件安装到硬件原理

前言

大家好,这里是 Hello_Embed。嵌入式开发的 “Hello World” 是点灯 —— 通过控制单片机引脚的高低电平,让 LED 亮灭。要实现这个功能,前期准备必不可少:从软件安装到硬件原理理解,每一步都很关键。本文就来详细说说点灯前的准备工作,为后续实战打下基础。

一、准备工作:软件与资料

首先需要安装必要的开发工具,具体包括:

  • Keil5 ARM:用于编写和编译 STM32 程序的 IDE;
  • STM32CubeMX:图形化配置工具,可快速生成初始化代码;
  • ST-Link 驱动:用于将程序通过 ST-Link 下载到开发板。
    相关安装教程和资料,在 B 站的韦东山江协科技的视频中都有详细讲解。笔者使用的硬件是江协科技视频配套的开发板,虽然与韦东山 “HAL 快速入门与项目实战” 课程中使用的瑞士军刀开发板不同,但核心芯片(STM32F103C8T6)是一致的,不影响学习。
二、原理图:看懂 LED 与引脚的连接

要控制 LED,首先得通过原理图找到它与单片机引脚的连接关系。

完整原理图与 LED 部分解析

附开发板完整原理图如下:
请添加图片描述
我们重点看 LED 的连接:
请添加图片描述
从局部原理图可知:

  • LED 的左端接高电平(VCC),右端串联限流电阻后,标注为 “PC13”;
  • “PC13” 表示该端连接到 STM32 芯片的PC13 引脚(P 代表端口,C 是端口号,13 是引脚号)。
LED 亮灭的原理

根据连接关系,LED 的亮灭由 PC13 引脚的电平决定:

  • 当 PC13 输出高电平(3.3V) 时,LED 两端电压差为 0(VCC 与 PC13 都是高电平),LED 不亮;
  • 当 PC13 输出低电平(0V) 时,LED 两端产生电压差(VCC 到 0V),电流流过 LED,LED 点亮。
三、芯片引脚与命名:认识 STM32F103C8T6

要控制引脚,得先了解芯片的引脚分布和命名规则。

引脚与核心功能

STM32F103C8T6 芯片有 48 个引脚,引脚名如 “PB1、PB2” 等:
请添加图片描述
其中:

  • “P” 表示通用引脚,“B” 是端口组(类似 “端口 C”“端口 A”),“1”“2” 是组内引脚编号;
  • 不同引脚有不同功能,可通过芯片手册查询(如 “VDDA” 接高电平,“VSSA” 接地。
    请添加图片描述
    这款芯片有48个引脚,有了引脚编号与引脚名我们就能根据芯片手册查找其具体作用。
型号命名规则(C8T6)
  • C:表示 48 引脚(其他如 T-36 引脚、R-64 引脚、V-100 引脚);
  • 8:表示 Flash 存储空间为 64KB(B 代表 128KB);
  • T:表示封装类型为 LQFP;
  • 6:表示工作温度范围为 - 40~85℃。
四、单片机工作机理:控制引脚的底层逻辑

单片机要控制引脚(如 PC13),需要经过几个关键步骤,这与它的内部结构有关。

单片机的核心组成

STM32 集成了 CPU、RAM、Flash(存储程序)、GPIO(通用输入输出)、USB 控制器等模块,其中 GPIO 是控制引脚的核心。

控制引脚的步骤(以点灯为例)
  1. 使能 GPIO 模块:单片机默认关闭未使用的模块以节能,需先通过寄存器使能 GPIO 模块(如端口 C 的时钟);
  2. 引脚功能选择(多路选择):STM32 引脚可复用(如既接 GPIO,也可接 IIC、USB 等),需配置为 GPIO 功能;
  3. 配置 GPIO 方向:设置为输出模式(因为要控制 LED 亮灭,需要输出高低电平);
  4. 输出电平:通过寄存器设置 PC13 为低电平(点亮 LED)或高电平(熄灭 LED)。
/O 口电路图(辅助理解)

STM32 的 I/O 口内部电路体现了上述步骤:
请添加图片描述

  • 引脚信号可作为输入(连接模拟输入、TTL 模块等)或输出(GPIO 输出、其他功能输出);
  • 配置寄存器相当于控制电路中的开关,决定引脚的功能和方向。
结尾

本文梳理了点灯前的准备工作:安装必要软件(参考韦东山、江协科技的资料)、看懂 LED 与 PC13 引脚的连接、了解芯片命名和引脚功能,以及控制引脚的底层步骤。这些知识是后续编写代码的基础。
下一篇笔记,Hello_Embed 将带大家用 HAL 库实际编写点灯程序,记得提前安装好软件和驱动哦~

http://www.dtcms.com/a/319103.html

相关文章:

  • 利用微软SQL Server数据库管理员(SA)口令为空的攻击活动猖獗
  • 思途spring学习0807
  • Java -- Arrays类-- System类-- BigInteger和BigDecimal类
  • 串口通信02 温度传感DS18B20 01 day49
  • jetson上使用opencv的gstreamer进行MIPI和USB摄像头的连接以及udp推流
  • JAVA,Maven分模块设计
  • 语言模型(LM):n-gram模型原理与困惑度(Perplexity)计算详解
  • B-树与B+树
  • AI大模型专题:LLM大模型(初识)
  • dubbo的metadata-report是做啥的
  • 17.11 单卡24G显存微调GLM-4实战:QLoRA到全参数调优,准确率狂飙42.7%
  • Qt: WA_DontCreateNativeAncestors
  • 【缩点 拓扑序】P3119 [USACO15JAN] Grass Cownoisseur G|省选-
  • 【关于Java中==和equals( )和hashCode( )三者异同】
  • 写Rust GPU内核驱动:GPU驱动工作原理简述
  • 【性能测试】---测试工具篇
  • 医疗人效管理新标杆:盖雅工场如何赋能健康服务企业提质增效
  • 「iOS」————自动释放池底层原理
  • CSS包含块与百分比取值机制完全指南
  • 数据分析——Pandas库
  • 添加内容溢出时显示完整内容提示的功能
  • QT5.15 mingw
  • c++之 栈浅析
  • Python 数据类型及数据类型转换
  • platform总线简介和使用场景说明
  • 基于Ruby的IP池系统构建分布式爬虫架构
  • 《算法导论》第 9 章 - 中位数和顺序统计量
  • 网页图片视频一键下载+视频去重修改 ,覆盖B站等多个平台
  • 【基础知识】springboot+vue 基础框架搭建(更新中)
  • 中国MCP市场:腾讯、阿里、百度的本土化实践