STM32f103 CubeMX封装 led程序

news/2024/11/24 2:49:41/

本文代码使用 HAL 库。

文章目录

  • 前言
  • 一、LED 原理图
  • 二、CubeMX创建工程
  • 三、LED 相关函数
      • 1. 输出电平函数:
      • 2. 延时函数:
      • 3. 翻转电平函数:
  • 四、详细代码
      • 实验现象 :
  • 总结
      • 代码 源码:


前言

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


一、LED 原理图

参考 原理图:

可以看到 对于 103 板子,有 3 个 LED:
分别为 LED1 , LED2 , LED3 ;分别对应 io 端口 PB0 , PB1 ,PB5

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

我这里的是 RGB灯,可以闪烁不同的颜色:红,绿,蓝。
在这里插入图片描述

二、CubeMX创建工程

  1. 选择芯片
    在这里插入图片描述

  2. 选择 Debug 模式
    在这里插入图片描述

  3. 选择外部时钟
    在这里插入图片描述

  4. 配置系统时钟,在 红框中输入 72 ,然后点击 回车 两次,即可配置好。
    在这里插入图片描述

  5. 配置 io 引脚 为 输出引脚
    在这里插入图片描述
    在这里插入图片描述

  6. 设置工程模式和版本
    在这里插入图片描述

  7. 选取加入.c /.h文件(便于编写代码)
    在这里插入图片描述

  8. 创建工程
    在这里插入图片描述

三、LED 相关函数

1. 输出电平函数:

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

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

例如: 点亮 LED1

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

2. 延时函数:

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

__weak void HAL_Delay(uint32_t Delay)

例如:延迟 500 ms(毫秒)

HAL_Delay(500);

3. 翻转电平函数:

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

HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);

例如:让 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);
  • 方法二:
	HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);HAL_Delay(500);

四、详细代码

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

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

所以 , 我们将 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);

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


实验现象 :

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

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

总结

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

代码 源码:

stm32f103 点亮 LED程序 源码


http://www.ppmy.cn/news/27334.html

相关文章

Java缓存面试题——Redis应用

文章目录1、为什么要使用Redis做缓存?2、为什么Redis单线程模型效率也能那么高?3、Redis6.0为什么要引入多线程呢?4、Redis常见数据结构以及使用场景字符串(String)哈希(Hash)列表(list)集合&am…

机器学习主要内容的思维导图

机器学习 机器学习: 定义:能够从经验中学习从而能够 把事情不断做好的计算机程序 人工智能的一个分支和 实现方式 理论基础:概率论 数理统计 线性代数 数学分析 数值逼近 最优化理论 计算复杂理论 核心要素:数据 算法 模型 机器…

[数据结构]时间复杂度与空间复杂度

[数据结构]时间复杂度与空间复杂度 如何衡量一个算法的好坏 long long Fib(int N) {if(N < 3)return 1;return Fib(N-1) Fib(N-2); } 这是一个求斐波那契数列的函数&#xff0c;使用递归的方法求得&#xff0c;虽然代码看起来很简洁&#xff0c;但是简洁真的就好吗&#…

华为OD机试真题Python实现【 喊七】真题+解题思路+代码(20222023)

喊七 题目 喊 7,是一个传统的聚会游戏, N 个人围成一圈,按顺时针从1 - 7编号, 编号为1的人从1开始喊数, 下一个人喊得数字是上一个人喊得数字+1, 但是当将要喊出数字7的倍数或者含有7的话, 不能喊出,而是要喊过。 假定N个人都没有失误。 当喊道数字k时, 可以统计每…

OSCP-课外1(http万能密码、hydra密码暴力破解http、代码审计、Win缓存区溢出)

目录 难度 主机发现&端口扫描 信息收集 万能密码 hydra密码暴力破解

别担心ChatGPT距离替代程序猿还有距离

经过多天对chat-GPT在工作的使用&#xff0c;我得出一个结论&#xff0c;它睁眼瞎说就算了&#xff0c;它还积极认错&#xff0c;绝不改正&#xff0c;错误答案极具误导性&#xff0c;啥也不说了&#xff0c;请看图。 经过N次较量它固执的认为 0011 1101 0110 0101在最高位是左…

spring boot项目中i18n和META-INF.spring下的文件的作用

目录标题一、resource下的文件二、i18n下messages_zh_CN.properties三、spring.factories文件四、org.springframework.boot.autoconfigure.AutoConfiguration.imports一、resource下的文件 org.springframework.boot.autoconfigure.AutoConfiguration.imports &#xff1b; - …

Idea修改Git账号及密码的方法

IDEA修改git账号及密码的方法&#xff1a;1、file->settings->passwords2、重启IDEA3、执行一次提交或更新当执行提交或更新之后&#xff0c;idea会自动提示输入账号、密码&#xff0c;如下&#xff1a;4、以上如果还修改不了&#xff0c;请尝试如下方式解决办法&#xf…