STM32f103封装 led程序CubeMX

news2024/11/24 20:30:56

本文代码使用 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/365546.html

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

相关文章

关于Kubernetes不兼容Docker

本博客地址:https://security.blog.csdn.net/article/details/129153459 参考文献:https://www.cnblogs.com/1234roro/p/16892031.html 一、总结 总结起来就是一句话: k8s只是弃用了dockershim,并不是弃用了整个Docker&#xf…

JS代码可以重复进行混淆加密吗?

JS代码可以重复进行混淆加密吗?问题 同一段JS代码,是否可以反复、重复进行混淆加密? 本文,用实验给出答案。 实验过程 准备一段代码,如下: 运行,可以显示出代码执行耗时: 可以看…

华为OD机试 - 上班之路(Python)【2023-Q1 新题】

华为OD机试300题大纲 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址:blog.csdn.net/hihell/category_12199275.html 华为OD详细说明:https://dream.blog.csdn.net/article/details/128980730 上班之路 题目描…

打不过就拉拢!ChatGPT和MidJourney已经成我小秘书!太爽了

大家好,我是晓衡。这两周,我战斗力爆棚了!每天大概睡了四~五个小时,而且中午也没有休息过,但精神却还很亢奋。直到周一下午,身体才有种被掏空的感觉,晚上 10 点就睡了。可能是兴奋劲还在&#x…

Python 刚学习就放弃的原因?

很大一部分小伙伴根本不清楚自己学的知识重点是什么,今天咱们就来整理一下python自学容易混淆的知识点【收藏有用】 Python 2 和 Python 3 的区别: Python 2 和 Python 3 有一些不兼容的语法和库,例如 Python 3 默认使用 Unicode 编码&#…

MySql_基础篇从下载到DDL语法

本笔记基于b站up主黑马程序员的视频整理 用于记录与回顾 数据库相关概念 数据库 DS 存储数据的仓库 数据库管理系统 DSMS 操纵和管理数据库的大型软件 sql 操作关系型数据库的编程语言是一套标准 mysql 默认端口号是3306 下载数据库 //下载部分建议转移到b站 搜索“MyS…

深度学习实战16(进阶版)-虚拟截图识别文字-可以做纸质合同和表格识别

大家好,我是微学AI,今天给大家带来一个关于虚拟截图识别文字的应用,可以运用在多个领域。 案例主要结合Mediapipe手势识别模型,识别出手势的21个关键点的坐标,计算机的摄像头根据食指的坐标信息获取用户想要截取的图片…

面试加分项:JVM 锁优化和逃逸分析详解

1 锁优化JVM 在加锁的过程中,会采用自旋、自适应、锁消除、锁粗化等优化手段来提升代码执行效率。1.1 自旋锁和自适应自旋现在大多的处理器都是多核处理器 ,如果在多核心处理器,有让两个或者以上的线程并行执行,我们可以让一个等待…

JavaScript前端中的伪类元素before和after使用详解

在前端开发中,伪类是一种让你可以选择元素的某个状态或位置的 CSS 选择器。其中,:before 和 :after 伪类允许你在一个元素之前或之后插入内容。 :before 和 :after 伪类创建的元素是不在 HTML 文档中的,它们是通过 CSS 生成的。可以用它们来…

PMP考试详解,新考纲有什么变化?

一,为什么优先考虑PMP持证人员? PMP证书在我国大型企业、跨国企业、央企/国企等单位的招聘中都比较重视,特别是在许多项目投标环节中,明确标明需要有PMP持证人员,才能在投标、竞标中代表公司有资格承担项目。 除此之…

Unity中的Mathf数学运算讲解(值得收藏)

Unity中的Mathf数学运算有哪些? Mathf.Abs(f)绝对值 计算并返回指定参数 f 绝对值 例如: // 输出 10 Debug.log(Mathf.Abs(-10)) Debug.log(Mathf.Abs(10))Mathf.Sin正弦 static function Sin (f : float) : float 计算并返回以弧度为单位指定的角 f 的…

分布式架构之详解幂等

幂等的概念 在数学里,幂等有两种主要的定义。 1、在某二元运算下,幂等元素是指被自己重复运算(或对于函数是为复合)的结果等于它自己的元素。例如,乘法下仅有两个幂等实数,为0和1。 2、某一元运算为幂等的时,其作用在…

醒醒吧,外包测试哪有前途,你只是一块干电池而已,随时会被替换掉

我25岁的时候,外包测试,薪资13.5k,人在深圳。 内卷什么的就不说了,而且人在外包那些高级精英年薪大几十的咱也接触不到,就说说外包吧。假设以我为界限,25岁一线城市13.5k,那22-24大部分情况下是…

【项目】Vue3+TS 退出登录 menu header搭建

💭💭 ✨:【项目】Vue3TS 退出登录 menu header搭建   💟:东非不开森的主页   💜: 今天永远比昨天更好💜💜   🌸: 如有错误或不足之处,希望可以指正&#x…

Cesium集成WebXR_连接VR设备

Cesium集成WebXR 文章目录Cesium集成WebXR1. 需求2. 技术基础2.1 WebGL2.2 WebXR2.3 其他3. 示例代码4. 效果图5. 参考链接1. 需求 通过WebXR接口,将浏览器端连接到VR头盔,实现在VR头盔中浏览Cesium场景,并可将头盔旋转的操作同步映射为场景…

干测试5年,经常被开发看不起,现在总算证明了自己····

测试不止是点点点 我感觉我是一个比较有发言权的人吧,我在测试行业摸爬滚打5年,以前经常听到开发对我说,天天的点点点有意思没? 和IT圈外的同学、朋友聊起自己的工作,往往一说自己是测试,无形中也会被大家…

CVE-2022-39197 POC(CobaltStrike XSS <=4.7)漏洞复现

漏洞说明 根据9.20日CobaltStrike官方发布的最新4.7.1版本的更新日志中介绍&#xff0c;<4.7的teamserver版本存在XSS漏洞&#xff0c;从而可以造成RCE远程代码执行 一位名为“Beichendream”的独立研究人员联系我们&#xff0c;告知我们他们在团队服务器中发现的一个 XSS …

ABBYY FineReader16最新PDF图片文字识别软件

ABBYY FineReader16是非常好的一款 OCR 识别软件&#xff08;可以识别不可编辑的PDF和图片文件&#xff09;&#xff0c;操作非常简单。ABBYY FineReader 16是一款知名的OCR文字识别软件&#xff08;图片文字识别&#xff09;。ABBYY 16采用了ABBYY最新推出的基于AI的OCR技术&a…

JVM记录

一、JVM体系结构&#xff1a; 类装载器ClassLoader&#xff1a;用来装载.class文件执行引擎&#xff1a;执行字节码&#xff0c;或者执行本地方法运行时数据区&#xff1a;方法区、堆、Java栈、程序计数器、本地方法栈1、方法区&#xff1a; 也称“永久代”&#xff0c;“非堆”…

渗透测试之主机探测存活性实验

渗透测试之主机探测存活性实验实验目的一、实验原理1.1 TCP/IP协议1. TCP2. IP1.2 Ping的原理二、实验环境2.1 操作机器2.2 实验工具三、实验步骤1. 学会使用ping命令2. 使用Nmap进行多种方式的探测总结实验目的 熟悉TCP/IP协议、Ping命令基本概念学习nmap、SuperScan扫描方式…