stm32f103封装 入门教学(一)LED程序CubeMX

news2024/11/25 23:37:47

本文代码使用 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.coloradmin.cn/o/365189.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Springboot 为了偷懒,我封装了一个自适配的数据单位转换工具类

前言 平时做一些统计数据,经常从数据库或者是从接口获取出来的数据,单位是跟业务需求不一致的。 比如, 我们拿出来的 分, 实际上要是元 又比如,我们拿到的数据需要 乘以100 返回给前端做 百分比展示 又比如&#xff…

如何通俗地理解原码、反码和补码

进制是什么?进制是人为设计的一套带进制计数方法,比如日常使用的十进制,就是0-9这10个数字,每逢十就会向高位进一。因为人类只有十根手指,所以天生地就会想到使用十进制--数到10发现手指头不够用了,就只能进…

JVM20浅堆深堆与内存泄露

浅堆深堆与内存泄露 1. 浅堆(Shallow Heap) 浅堆是指一个对象所消耗的内存。在 32 位系统中,一个对象引用会占据 4 个字节,一个 int 类型会占据 4 个字节,long 型变量会占据 8 个字节,每个对象头需要占用…

synchronized和ReentrantLock有什么区别呢?

第15讲 | synchronized和ReentrantLock有什么区别呢? 从今天开始,我们将进入 Java 并发学习阶段。软件并发已经成为现代软件开发的基础能力,而 Java 精心设计的高效并发机制,正是构建大规模应用的基础之一,所以考察并发…

(考研湖科大教书匠计算机网络)第六章应用层-第五节:文件传送协议FTP

获取pdf:密码7281专栏目录首页:【专栏必读】考研湖科大教书匠计算机网络笔记导航 文章目录一:概述二:工作原理三:控制连接与数据连接本节对应视频如下 【计算机网络微课堂(有字幕无背景音乐版)】…

Linux NOR 开发指南

Linux NOR 开发指南 1 简介 编写目的 此文档描述Sunxi NOR 模块的使用方法,为相关人员调试提供指导 适用范围 boot0: 适用于brandy-2.0u-boot: 适用于u-boot-2018kernel: 适用于linux-4.9/linux-5.4 内核 BSP 的开发人员、测试人员 2 模块介绍 2.1 模块功能…

量化免费行情源最强对比分析--看这篇就够了

序言 很多想做量化的用户一直苦于没有稳定的行情源,我也是一个,但是其实市面上有很多免费好用的行情源,在这边给大家推荐几个我用过的,给大家做个参考 先做一下对比: INSIGHTTushare聚宽米筐支持语言java&#xff0c…

Python:try except 异常处理整理

目录 一、try except异常处理的语句格式 二、获取相关异常信息 (1)sys.exec_info() 三、traceback模块的常用方式 (1)traceback.print_tb(tb, limitNone, fileNone) 打印指定堆栈异常信息 (2)tracebac…

python自动化测试学习笔记-6redis应用

上次我们学到了redis的一些操作,下面来实际运用以下。 这里我们先来学习一下什么是cookie和session。 什么是Cookie 其实简单的说就是当用户通过http协议访问一个服务器的时候,这个服务器会将一些Name/Value键值对返回给客户端浏览器,并将…

ArcGIS土地利用变化出图

一、数据说明 1. lt51190382010144bjc00文件夹:2010年的影像数据存放在此文件夹中。 2. class2015.tif:2015年的土地利用结果数据。 3. 训练样本2010.shp:对2010年影像执行最大似然分类法所使用的训练样本数据。 4. 点位置.txt&#xff1…

剑指 Offer 47. 礼物的最大价值

剑指 Offer 47. 礼物的最大价值 难度:middle\color{orange}{middle}middle 题目描述 在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次…

深度剖析数据在内存中的存储(上)

目录 1. 数据类型介绍 1.1 类型的基本归类 2. 整形在内存中的存储 2.1 原码、反码、补码 2.2 大小端介绍 2.3 一道小题 本章重点 1. 数据类型详细介绍 2. 整形在内存中的存储:原码、反码、补码 3. 大小端字节序介绍及判断 4. 浮点型在内存中的存储解析 正文…

【手把手一起学习】(三) Altium Designer 20 原理图库添加元件

1 添加元件 元件符号是元件在原理图上的表现形式,主要由边框、管脚、名称等组成,原理图库中的元件管脚(顺序,间距等)与电子元件实物的引脚严格对应,绘制原理图库时,一定参考元件规格书和芯片数据手册中的说明&#xf…

狂飙吧,Lifecycle与协程、Flow的化学反应

前言 协程系列文章: 一个小故事讲明白进程、线程、Kotlin 协程到底啥关系?少年,你可知 Kotlin 协程最初的样子?讲真,Kotlin 协程的挂起/恢复没那么神秘(故事篇)讲真,Kotlin 协程的挂起/恢复没那么神秘(原理…

Elasticsearch:使用 pipelines 路由文档到想要的 Elasticsearch 索引中去

路由文件 当应用程序需要向 Elasticsearch 添加文档时,它们首先要知道目标索引是什么。在很多的应用案例中,特别是针对时序数据,我们想把每个月的数据写入到一个特定的索引中。一方面便于管理索引,另外一方面在将来搜索的时候可以…

从0开始学python -37

Python3 错误和异常 作为 Python 初学者,在刚学习 Python 编程时,经常会看到一些报错信息,在前面我们没有提及,这章节我们会专门介绍。 Python 有两种错误很容易辨认:语法错误和异常。 Python assert(断…

C语言实现用堆解决 TOP-K 问题

目录 TopK函数实现 如何测试 完整源码 生活中我们经常能见到TopK问题,例如:专业前10名、世界500强、富豪榜、游戏中前100的活跃玩家等。 所以,TopK问题即求出一组数据中前K个最大或最小的元素,一般情况下,数据量都…

[ Java ] 时间API在更新,传奇已经谢幕,但技术永远不死

(Bill Joy(左一),Vinod Khosla(左二),Andy Bechtolsheim(右二),Scott McNealy(右一) ) CSDN 博文征集活动(和日期相关的代码和bug):点击这里 各位 “big guys”,这篇博文…

【数据结构】顺序表的深度剖析

🌇个人主页:平凡的小苏 📚学习格言:别人可以拷贝我的模式,但不能拷贝我不断往前的激情 🛸C语言专栏:https://blog.csdn.net/vhhhbb/category_12174730.html 🚀数据结构专栏&#xff…

Dart的安装及环境变量配置

本文介绍dart的安装步骤及环境变量配置,以及如何在vscode中进行开发环境配置。一、dart的安装访问dart官网https://dart.cn/,点击网站右上角的获取DART SDK进行下载页面。如下图,选择下载SDK的zip压缩文件。根据自己的操作系统情况选择合适版…