STM32f103 CubeMX封装 led程序
【摘要】 > 本文代码使用 `HAL` 库。@[TOC](文章目录)---# 前言从这篇文章开始,我们讲解 **stm32 f103** ,详细介绍各个模块的知识。---# 一、LED 原理图参考 原理图:可以看到 对于 103 板子,有 3 个 LED:分别为 ==LED1 , LED2 , LED3== ;分别对应 io 端口 ==PB0 , PB1 ,PB5==。可以看到 `LED 左边 接...
> 本文代码使用 `HAL` 库。
@[TOC](文章目录)
---
# 前言
从这篇文章开始,我们讲解 **stm32 f103** ,详细介绍各个模块的知识。
---
# 一、LED 原理图
参考 原理图:
可以看到 对于 103 板子,有 3 个 LED:
分别为 ==LED1 , LED2 , LED3== ;分别对应 io 端口 ==PB0 , PB1 ,PB5==。
可以看到 `LED 左边 接 3V` 的电压,要想点亮 LED,只需在 右边的 `io 端口输出 低电平` 即可。
反之,要想 `熄灭 LED`,就在 右边的 `io 端口输出 高电平` 。
我这里的是 RGB灯,可以闪烁不同的颜色:红,绿,蓝。
![在这里插入图片描述](https://img-blog.csdnimg.cn/75cc7fb175ff4799b0daca051bf48a5d.png)
# 二、CubeMX创建工程
1. 选择芯片
![在这里插入图片描述](https://img-blog.csdnimg.cn/951e644a478a4c648ccd4b776e47901c.png)
2. 选择 Debug 模式
![在这里插入图片描述](https://img-blog.csdnimg.cn/3e2b25670f6a4bc8974be436d52bef49.png)
3. 选择外部时钟
![在这里插入图片描述](https://img-blog.csdnimg.cn/c4cf418c573c4192825819ac1984cc6f.png)
4. 配置系统时钟,在 红框中输入 72 ,然后点击 回车 两次,即可配置好。
![在这里插入图片描述](https://img-blog.csdnimg.cn/01897a074b1b4ab68247208742990314.png)
5. 配置 io 引脚 为 输出引脚
![在这里插入图片描述](https://img-blog.csdnimg.cn/6258cf8de001475b8c3fc35adc338ee9.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/a05cd5e41c524fa89a9851887a3eb718.png)
6. 设置工程模式和版本
![在这里插入图片描述](https://img-blog.csdnimg.cn/4ba62069fa5442da954a804f2492a5fb.png)
7. 选取加入.c /.h文件(便于编写代码)
![在这里插入图片描述](https://img-blog.csdnimg.cn/1638a2a712854e48b01ededf0cc9c51f.png)
8. 创建工程
![在这里插入图片描述](https://img-blog.csdnimg.cn/1abb22f5f93c4f1a813a2cb9b916927e.png)
# 三、LED 相关函数
### 1. 输出电平函数:
功能 :控制一个 *GPIO* 引脚输出 高 或者 低 电平。
```c
HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
```
>例如: 点亮 LED1
```c
// 根据原理图,点电平点亮 led
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
```
### 2. 延时函数:
功能:作为 ==毫秒== 级延迟的函数。
```c
__weak void HAL_Delay(uint32_t Delay)
```
>例如:延迟 500 ms(毫秒)
```c
HAL_Delay(500);
```
### 3. 翻转电平函数:
功能 :控制一个 *GPIO* 引脚电平 翻转 ,调用一次电平 ==翻转一次==。
```c
HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
```
>例如:让 led 闪烁:
- 方法一:
```c
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
HAL_Delay(500);
```
- 方法二:
```c
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
HAL_Delay(500);
```
# 四、详细代码
由于我们采用 `封装`的方法来写程序:
> 函数封装:
> 函数封装是指将一组相关的功能封装到一个函数中,以便重复使用。它可以帮助程序员更有效地编写代码,并减少重复代码的重复编写。
所以 , 我们将 led 程序用一个 ==**.c .h**== 文件封装起来,这样便于我们对代码进行修改与移植。
**在 .c 里进行代码的实现 ;.h 里进行代码的声明和宏定义。**
![在这里插入图片描述](https://img-blog.csdnimg.cn/5318654d4ac742828ce63a9aca9a0024.png)
- 在 led.h 文件中声明 函数 :
```c
#ifndef _LED_H
#define _LED_H
/*led 初始化*/
void Led_init(void);
/* led 点亮 */
void Led_on(void);
/* led 熄灭 */
void Led_off(void);
#endif
```
- 在 led.c 中 进行函数的实现:
```c
#include "led.h"
#include "main.h"
//led 初始化
void Led_init(void)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);
}
/* led 点亮 */
void Led_on(void)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET);
}
/* led 熄灭 */
void Led_off(void)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);
}
```
- 在 main 中进行调用:
```c
Led_on();
HAL_Delay(500);
Led_off();
HAL_Delay(500);
```
`注意: 最好在 main 里面 初始化 led , 先让 led 全部熄灭,这样便于观察, 调用 Led_init 函数`
---
### 实验现象 :
对于RGB 灯闪烁的实验现象,我放在了 B占,有兴趣的可以看看,在以下网址:
https://www.bilibili.com/video/BV1384y1J7tr/?vd_source=986c364d205fa1124b337bc665f57c4f
# 总结
下篇文章我们讲解 **按键** 的驱动程序,大家可以自己试试 写一个 流水灯,跑马灯。
### 代码 源码:
[stm32f103 点亮 LED程序 源码](https://download.csdn.net/download/wuyiyu_/87484450)
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)