最详细STM32,cubeMX 点亮 led
>这篇文章将详细介绍 如何在 stm32103 板子上点亮一个LED.
@[TOC](文章目录)
---
# 前言
- 实验开发板:STM32F103C8T6。
- 所需软件:keil5 , cubeMX 。
- 实验目的:了解 led 点亮原理,cubeMX配置 , GPIO 等相关函数 。
---
# 一、开发环境搭建。
1. 代码编写软件 : MDK keil5 。
2. 图形化配置软件 :STM32cubeMX。
3. 仿真器驱动 : STLINK 。
4. 串口驱动 :CH340 。
对于以上软件的安装可以参考 : [最详细 keil5 和 cubeMX安装教程](https://blog.csdn.net/wuyiyu_/article/details/133647700)
# 二、LED 原理图解读
![在这里插入图片描述](https://img-blog.csdnimg.cn/e61d4e7142544810932943439e4081ef.png)
芯片的原理图如上图,可以看到控制 LED1 的引脚是 `PB4` 。
![在这里插入图片描述](https://img-blog.csdnimg.cn/79c39618398c4972be71d6d05f565687.png)
灯 D1 的 右边接在 VCC 电源上,如果 想要点亮 led , 需要`将 led 的左侧 GPIO 引脚 PB4 设置为 低电平`即可。那么该图是 `低电平控制 led` 。
- 高电平:通常表示逻辑1,可以是与电源电压相对应的电压(例如3.3V或5V)。
- 低电平:通常表示逻辑0,可以是与地电压(0V)相对应的电压。
# 三、什么是 GPIO
GPIO ,全称为通用输入输出(General-Purpose Input/Output ),是 连接外部设备的通用接口。用于与外部设备进行数字信号的输入和输出。它在嵌入式系统、单片机、单板计算机等领域都有广泛的应用,使数字系统能够与外部世界互动和通信。
1. 输入:
GPIO 可以用于接受外部设备发送的数字信号,如 按钮的状态,传感器数据。获取外部数据或事件。
2. 输出:
GPIO 可以用于向外部设备发送数字信号,如控制 LED, 继电器,电机等。 操作和控制外部设备。
# 四、cubeMX 配置工程
1. 首先创建工程。
![在这里插入图片描述](https://img-blog.csdnimg.cn/e5c22dbbd9494c17a394ab61c6efbcea.png)
2. 选择芯片,开始创建工程。
![在这里插入图片描述](https://img-blog.csdnimg.cn/f63f29040030400ca084f37aab7fa93b.png)
3. 设置 SYS 模块,选择串行线。
![在这里插入图片描述](https://img-blog.csdnimg.cn/afe981e6aa2a4d98b23b57a84342842b.png)
4. 选择晶体共振。
![在这里插入图片描述](https://img-blog.csdnimg.cn/7b1ea35253de4b39b98bead96c5efc53.png)
5. 将 PB4 引脚设置为 gpio 输出口。
![在这里插入图片描述](https://img-blog.csdnimg.cn/de1467fb475f4d72ad5872ac5f86ee7c.png)
6. 设置时钟频率。
直接设置为 最大频率 72 ,然后双击 enter 即可。
![在这里插入图片描述](https://img-blog.csdnimg.cn/87770cba2a0c46f2ab3dd9080d72f44e.png)
7. 设置工程的名字,工具链选择 MDK。
![在这里插入图片描述](https://img-blog.csdnimg.cn/e7262d9f5cfe4c36b84552e974dcbe78.png)
8. 点击自动生成 .c / .h 文件。
. ![在这里插入图片描述](https://img-blog.csdnimg.cn/c40457370b9c42b8978311ae06cb36d8.png)
9. 点击生成即可。
这样就可以生成 keil 的工程文件。
![在这里插入图片描述](https://img-blog.csdnimg.cn/dc9ddedc8fe743c99d7eef2ac06ffc7d.png)
# 五、解读 cubeMX 生成的代码
cubeMX 会自动生成 GPIO 初始化的代码。
![在这里插入图片描述](https://img-blog.csdnimg.cn/5da1e42f43194b29bc266ee5c063412b.png)
==代码解析==:
1. 首先创建一个 GPIO 变量。
```c
GPIO_InitTypeDef GPIO_InitStruct = {0};
```
2. GPIO 引脚的使能。
可以看到这里分别使能了 GPIOA , GPIOB , GPIOD 端口。
```c
__HAL_RCC_GPIOD_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
```
3. 设置 GPIO 中PB4 引脚的输出电平。
这里设置的是输出低电平 GPIO_PIN_RESET。
```c
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_RESET);
```
4. 设置 GPIO 端口的引脚号,模式,上拉电阻,速度。
```c
GPIO_InitStruct.Pin = GPIO_PIN_4;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
```
5. 初始化引脚设置。
```c
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
```
# 六、延时函数
```c
__weak void HAL_Delay(uint32_t Delay);
```
**uint32_t** Delay :表示要延时时间,以毫秒(ms)为单位。这是一个无符号的 32 位整数。
**__weak** :是一个弱符号。
# 七、控制引脚状态函数
1. GPIO 写函数:
用于设置指定 GPIO 引脚输出状态。
```c
void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState
PinState);
```
==参数解释==:
- **GPIOx** : 这是一个指向 GPIO_TypeDef 结构体的指针,指定了要控制的GPIO端口,例如GPIOA、GPIOB等。
- **GPIO_Pin** : 这是一个16位的整数,指定要设置的特定引脚。可以使用宏定义来指定要控制的引脚,例如GPIO_PIN_0,GPIO_PIN_1,GPIO_PIN_2等。
- **PinState** : 这是一个枚举类型 GPIO_PinState,用于指定要写入的引脚状态。它有两个可能的值:**GPIO_PIN_RESET和GPIO_PIN_SET**,分别代表引脚输出低电平和高电平。
2. GPIO 翻转函数:
这里的函数参数 和 写函数的参数大致相同,可以参考 HAL_GPIO_WritePin 函数 。
```c
void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
```
### 点亮 LED
==在 工程的 while 函数中使用 写函数 **HAL_GPIO_WritePin** 点亮 LED.==
`tips`:
可以讲代码写在 BEGIN 和 END 之间,这样当我们重新生成代码时 就不会造成代码销毁。
![在这里插入图片描述](https://img-blog.csdnimg.cn/67ea11cde4e343cf98b3e77d01b0de2d.png)
# 八、GPIO 的工作模式
GPIO的8种工作模式:
1. `输入模式`(Input Mode):GPIO引脚被配置为输入模式时,它可以接收外部设备发送的信号。引
脚可以检测输入信号的高电平或低电平,并将其转换为数字值供系统使用。
2. `输出模式`(Output Mode):GPIO引脚被配置为输出模式时,它可以向外部设备发送信号。系统
可以控制引脚输出的高电平或低电平,从而控制外部设备的行为。
3. `推挽输出模式`(Push-Pull Output Mode):在推挽输出模式下,GPIO输出引脚可以提供强驱动
电平。引脚在高电平和低电平之间切换,可以提供较低的输出电阻,适合驱动较重的负载。
4. `开漏输出模式`(Open-Drain Output Mode):在开漏输出模式下,GPIO输出引脚变为开漏输
出。引脚在低电平时为接地(GND)连接,而在高电平时处于高阻态。这种模式适合与其他开漏设
备或外部上拉电阻结合使用。
5. `复用输入模式`(Alternate Function Input Mode):GPIO引脚可以配置为复用输入模式,用于
接收外部信号并执行特定功能。在此模式下,引脚还可以用于其他功能,例如定时器输入或串行通
信接口。
6. `复用输出模式`(Alternate Function Output Mode):GPIO引脚可以配置为复用输出模式,用
于将特定功能的输出信号发送到外部设备。在此模式下,引脚还可以用于其他功能,例如PWM输
出或串行通信接口。
7. `模拟模式`(Analog Mode):有些GPIO引脚支持模拟模式,可以用于连接模拟电路,例如传感器
或音频设备。在模拟模式下,引脚可以输入或输出连续的模拟电信号。
8. `中断模式`(Interrupt Mode):GPIO引脚可以配置为中断模式,以便在引脚状态发生变化时触发中断。这允许系统在无需不断轮询GPIO状态的情况下,对引脚的变化进行响应。
# 九、为什么使用推挽输出驱动 LED
1. 推挽输出可以提供稳定的高电平和低电平。
2. 能够提供较高的输出电流能力。
3. 可以连接到 LED,为不需要外部的电流限制电阻。
4. 适用于数字信号的控制。
---
# 总结
下一篇文章将继续为大家介绍 STM32F103C8T6 使用 cubeMX 通过 按键 点亮 led。
- 点赞
- 收藏
- 关注作者
评论(0)