STM32f103 CubeMX封装 led程序

简介: 可以看到 对于 103 板子,有 3 个 LED:分别为 LED1 , LED2 , LED3 ;分别对应 io 端口 PB0 , PB1 ,PB5。可以看到 LED 左边 接 3V 的电压,要想点亮 LED,只需在 右边的 io 端口输出 低电平 即可。反之,要想 熄灭 LED,就在 右边的 io 端口输出 高电平 。我这里的是 RGB灯,可以闪烁不同的颜色:红,绿,蓝。

前言


从这篇文章开始,我们讲解 stm32 f103 ,详细介绍各个模块的知识。


一、LED 原理图


参考 原理图:


可以看到 对于 103 板子,有 3 个 LED:

分别为 LED1 , LED2 , LED3 ;分别对应 io 端口 PB0 , PB1 ,PB5。


可以看到 LED 左边 接 3V 的电压,要想点亮 LED,只需在 右边的 io 端口输出 低电平 即可。

反之,要想 熄灭 LED,就在 右边的 io 端口输出 高电平 。


我这里的是 RGB灯,可以闪烁不同的颜色:红,绿,蓝。

04bbe50dc4a041bbec67ccd6731fde5.png


二、CubeMX创建工程


选择芯片

3606d453038ba400559a864dc990021.png


选择 Debug 模式

b2955031e7671f2b5a6194af7d55932.png


选择外部时钟

e39ffdc07f1f65d4fb8e30c14f108f7.png


配置系统时钟,在 红框中输入 72 ,然后点击 回车 两次,即可配置好。


6383d10fe73452549ea5d2b75dc591f.png

配置 io 引脚 为 输出引脚


246983ffa8f21d744bc4e5b883d67b7.png0f67d831b9e2000deeba0be7ac0f1de.png


设置工程模式和版本

e6b8cc3c92b8f55f0185ef0882ce9b0.png


dcc98371b8e957c352bfb5390381014.png取加入.c /.h文件(便于编写代码)


dcc98371b8e957c352bfb5390381014.png

创建工程

8e969bb31aee46364557e02a6b00157.png


三、LED 相关函数


1. 输出电平函数:

功能 :控制一个 GPIO 引脚输出 高 或者 低 电平。


HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);

1

例如: 点亮 LED1


// 根据原理图,点电平点亮 led
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);

1

2

2. 延时函数:

功能:作为 毫秒 级延迟的函数。


__weak void HAL_Delay(uint32_t Delay)

1

例如:延迟 500 ms(毫秒)


HAL_Delay(500);

1

3. 翻转电平函数:

功能 :控制一个 GPIO 引脚电平 翻转 ,调用一次电平 翻转一次。


HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
1

例如:让 led 闪烁:


方法一:

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);

1

2

3

4

方法二:

HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
  HAL_Delay(500);
1

2

四、详细代码


由于我们采用 封装的方法来写程序:


函数封装:

函数封装是指将一组相关的功能封装到一个函数中,以便重复使用。它可以帮助程序员更有效地编写代码,并减少重复代码的重复编写。


所以 , 我们将 led 程序用一个 .c .h 文件封装起来,这样便于我们对代码进行修改与移植。


在 .c 里进行代码的实现 ;.h 里进行代码的声明和宏定义。



在 led.h 文件中声明 函数 :

#ifndef _LED_H
#define _LED_H
/*led 初始化*/
void Led_init(void);
/* led 点亮 */
void Led_on(void);  
/* led 熄灭 */
void Led_off(void);
#endif


在 led.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 中进行调用:

 

Led_on();
   HAL_Delay(500);
   Led_off();
   HAL_Delay(500);

1

2

3

4

注意: 最好在 main 里面 初始化 led , 先让 led 全部熄灭,这样便于观察, 调用 Led_init 函数


实验现象 :

对于RGB 灯闪烁的实验现象,我放在了 B占,有兴趣的可以看看,在以下网址:


https://www.bilibili.com/video/BV1384y1J7tr/?vd_source=986c364d205fa1124b337bc665f57c4f


总结

下篇文章我们讲解 按键 的驱动程序,大家可以自己试试 写一个 流水灯,跑马灯。


代码 源码:

stm32f103 点亮 LED程序 源码


相关文章
|
芯片
最详细STM32,cubeMX 按键点亮 led
最详细STM32,cubeMX 按键点亮 led
193 0
|
传感器 芯片
最详细STM32,cubeMX 点亮 led
最详细STM32,cubeMX 点亮 led
163 0
|
5月前
使用STM32F103标准库实现定时器控制LED点亮和关闭
通过这篇博客,我们学习了如何使用STM32F103标准库,通过定时器来控制LED的点亮和关闭。我们配置了定时器中断,并在中断处理函数中实现了LED状态的切换。这是一个基础且实用的例子,适合初学者了解STM32定时器和中断的使用。 希望这篇博客对你有所帮助。如果有任何问题或建议,欢迎在评论区留言。
441 2
|
1月前
stm32学习 3-2 LED流水灯
stm32学习 3-2 LED流水灯
69 4
|
1月前
stm32学习3-1 LED闪烁
stm32学习3-1 LED闪烁
35 4
|
4月前
STM32CubeMX FreeRTOS点亮LED
STM32CubeMX FreeRTOS点亮LED
78 10
|
4月前
STM32CubeMX 按键控制LED
STM32CubeMX 按键控制LED
70 0
|
4月前
STM32CubeMX 点亮LED
STM32CubeMX 点亮LED
60 0
No.6 STM32F429IGT6 LED按键检测 按键点灯 (STM32F429/F767/H743)
No.6 STM32F429IGT6 LED按键检测 按键点灯 (STM32F429/F767/H743)
No.5 STM32F429IGT6 标准库实战GPIO输出LED灯 点亮闪烁(STM32F429/F767/H743)
No.5 STM32F429IGT6 标准库实战GPIO输出LED灯 点亮闪烁(STM32F429/F767/H743)