STM32-02基于HAL库(CubeMX+MDK+Proteus)GPIO输出案例(LED流水灯)

news2025/1/19 16:15:17

文章目录

  • 一、功能需求分析
  • 二、Proteus绘制电路原理图
  • 三、STMCubeMX 配置引脚及模式,生成代码
  • 四、MDK打开生成项目,编写HAL库的GPIO输出代码
  • 五、运行仿真程序,调试代码

一、功能需求分析

在完成开发环境搭建之后,开始使用STM32GPIO的功能,可以看到上次测试案例,LED点亮实验,在其基础上,调用HAL库的读写引脚,反转引脚状态的API函数,实现流水灯效果。

需求分析:

  1. 使用PA0-PA3引脚,分别连接LED0-3;
  2. 实现回马枪样式的流水灯效果,首先LED0-3依次点亮,然后LED3-0逆序点亮;
  3. LED使用低电平驱动方式;
  4. 为了演示效果,四个LED选取不同的颜色。

二、Proteus绘制电路原理图

绘制电路原理图的步骤:创建画布=》芯片选型及放置=》元器件选型及放置=》连接电路=》修改元器件参数=》仿真运行。

下图为绘制LED所需元器件清单。
在这里插入图片描述

下图为按键检测案例的电路原理图。
在这里插入图片描述
注意,此处的LED为低电平驱动方式,即引脚输出0点亮,输出1熄灭。

三、STMCubeMX 配置引脚及模式,生成代码

接下来,根据原理图绘制,创建CubeMX项目,配置引脚及工作模式,生成MDK项目代码。

创建项目,在Pinout配置模块,点击PA0,选择GPIO_Output推挽输出模式,同理,配置PA1。
在这里插入图片描述

按照上述步骤,依次配置PA1-PA3引脚为GPIO_Output。

在clock单元,配置系统时钟为72MHz。
在这里插入图片描述在Project单元,填写项目名称、保存路径、IDE和版本。
在这里插入图片描述
在 code generator中,配置添加库的方式为所需库,用户代码在每次项目重新生成时保留。
在这里插入图片描述配置完成,通过以上步骤,完成了2个LED引脚的模式配置及时钟配置,接下来,点击GENERATE,生成项目代码。
在这里插入图片描述找到生成路径,可以看到项目目录文件。在这里插入图片描述

四、MDK打开生成项目,编写HAL库的GPIO输出代码

在编写代码之前,简单介绍会用到的几个API小函数:

  1. 写引脚
    在这里插入图片描述这个函数很常用,写引脚,有三个参数,分别是GPIO的名称、引脚端口号、引脚状态。

     HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);
     HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
    

GPIO_PIN_RESET 清零,写0
GPIO_PIN_SET 置位,写1

结合电路,赋值GPIO_PIN_RESET LED点亮,赋值GPIO_PIN_SET LED熄灭。

  1. 延时函数
    在这里插入图片描述使用延时函数实现时间间隔控制,完成不同流速的流水灯效果。这里需要一个参数,单位是毫秒。

从上面步骤中,生成了MDK项目。
在MDK-ARM目录中,找到项目快捷方式,打开项目。
在这里插入图片描述
找到main.c文件,在main函数的while循环中,添加LED流水灯代码。
这里分析流水灯,用以上介绍的两个API函数来实现,可以分成8个状态:

第一个状态是PA0点亮,PA1-PA3熄灭;
然后是PA1点亮,其余灯熄灭;
然后是PA2点亮,其余灯熄灭;
最后是PA3点亮,其余灯熄灭。
以上四个状态是正向逐个点亮一次,然后反向点亮逐个点亮,回到最初PA0点亮。

第一个状态PA0点亮的实现代码如下,写在main函数的while循环中。

	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET);
	HAL_Delay(20);

根据第一个状态代码,完成其他7个状态,相信你可以很轻松的做到 ^ _ ^。

在项目中勾选生成HEX选项,HEX文件就是MDK编译生成的十六进制文件,作为烧录到开发板的源程序文件使用,当然,这里我们使用仿真,在Proteus中加载HEX即可。
在这里插入图片描述

点击编译程序,生成HEX文件。在编译窗口显示生成了以下信息,则编译成功,保证 0 errors再进行下一步。
在这里插入图片描述

五、运行仿真程序,调试代码

在Proteus中,双击芯片,选择加载程序路径。
02_RunningWater\RunningWater_MDK\RunningWater\MDK-ARM\RunningWater
上面是我的项目的HEX文件目录路径。
在这里插入图片描述

点击仿真按钮,运行程序,查看功能执行结果。
请添加图片描述

可以看到,四个LED往返点亮,功能正常。

代码链接:STM32-02基于HAL库(CubeMX+MDK+Proteus)GPIO输出案例(LED流水灯)

至此,我们已经完成了STM32的GPIO输出案例的编写,后面,会给大家介绍输入检测案例。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1571986.html

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

相关文章

python标准数据类型--列表常用方法

在Python中,列表(List)是一种非常常用的数据类型,用于存储一组有序的元素。Python提供了许多内置方法来操作列表,使得对列表的处理变得非常灵活和便捷。在本篇博客中,我们将介绍一些常用的列表方法&#xf…

Python | Leetcode Python题解之第8题字符串转换整数atoi

题目: 题解: INT_MAX 2 ** 31 - 1 INT_MIN -2 ** 31class Automaton:def __init__(self):self.state startself.sign 1self.ans 0self.table {start: [start, signed, in_number, end],signed: [end, end, in_number, end],in_number: [end, end,…

基于Java+SpringBoot+vue3点餐/外卖管理系统设计与实现

博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

linux 安装 pptp 协议

注意:目前iOS已不支持该协议 yum -y install ppp wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/p/pptpd-1.4.0-2.el7.x86_64.rpm yum -y install pptpd-1.4.0-2.el7.x86_64.rpm vi /etc/pptpd.conf 去除 localip 和 remoteip的注释 …

Linux:进程等待究竟是什么?如何解决子进程僵尸所带来的内存泄漏问题?

Linux:进程等待究竟是什么?如何解决子进程僵尸所带来的内存泄漏问题? 一、进程等待的概念二、进程等待存在的意义三、如何进行进程等待3.1 wait()是实现进程等待1、wait()原型2. 验证wait()能回收僵尸子进程的空间 3.2 waitpid()实现进程等待…

阿里云2核2G服务器租用价格,真便宜

阿里云2核2G服务器配置优惠价格61元一年和99元一年,61元是轻量应用服务器2核2G3M带宽、50G高效云盘;99元服务器是ECS云服务器经济型e实例ecs.e-c1m1.large,2核2G、3M固定带宽、40G ESSD entry系统盘,阿里云活动链接 aliyunfuwuqi.…

真--开源个人收款系统方案--部署方案

继上文:真--个人收款系统方案,今天主要推出部署方案 1.下载源码 首先需要下载源码,源码地址:PayServer: 个人收款系统方案 - Gitee.com 并且pip下载依赖库: Flask2.5.1 Flask-Cors3.0.10 gevent23.6.0 websockets10.9 urllib31.26.1 2.修改配置 路径下有两个py文件&#xf…

【Frida】【Android】09_爬虫之Socket

🛫 系列文章导航 【Frida】【Android】01_手把手教你环境搭建 https://blog.csdn.net/kinghzking/article/details/136986950【Frida】【Android】02_JAVA层HOOK https://blog.csdn.net/kinghzking/article/details/137008446【Frida】【Android】03_RPC https://bl…

机器学习笔记 - 文字转语音技术路线简述以及相关工具不完全清单

一、TTS技术简述 今天的文本到语音转换技术(TTS)的目标已经不仅仅是让机器说话,而是让它们听起来像不同年龄和性别的人类。通常,TTS 系统合成器的质量是从不同方面进行评估的,包括合成语音的清晰度、自然度和偏好,以及人类感知因素,例如可理解性。 1、技术路线 (1)基…

【Java网络编程】HTTPS协议

HTTPS协议 由于HTTP协议是采用明文传输的方式,因此带来了很大的数据安全隐患,所以在最近几年的时间内,大部分平台都采用了HTTPS逐渐取代了HTTP,但HTTPS并不是一种全新的协议,而是建立在HTTP协议的基础之上&#xff0c…

单链表的排序

目录 题目来源: 题目描述: 初始代码: 思路: 具体做法: 我的代码: 优化代码: 对比: 复习:List 基本介绍 常用方法 遍历方式 题目来源: 单链表的排…

达梦使用disql登录数据库显示“未连接”

基础环境 操作系统:Red Hat Enterprise Linux Server release 7.9 (Maipo) 数据库版本:DM Database Server 64 V8 架构:单实例问题:达梦数据库在使用disql登录时,显示“未连接”。 指定了IP和端口号还是连接异常。 […

PTA天梯赛练习题 L1-029 是不是太胖了

PTA | 程序设计类实验辅助教学平台 思路简析 挺简单的一道输出题&#xff0c;但是有几个细节注意&#xff1a; 整数类型与浮点类型的混合运算控制小数位数 解法代码 #include<stdio.h> int main () {int H;scanf("%d", &H);float result;result 2 * (H …

Vulnhub:BOSSPLAYERSCTF: 1

目录 信息收集 arp nmap nikto whatweb WEB web信息收集 dirmap 命令执行漏洞 反弹shell 提权 系统信息收集 get root 信息收集 arp ┌──(root㉿ru)-[~/kali/vulnhub] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:50:56:2f:dd:9…

基于java+SpringBoot+Vue的月度员工绩效考核管理系统设计与实现

基于javaSpringBootVue的月度员工绩效考核管理系统设计与实现 开发语言: Java 数据库: MySQL技术: SpringBoot VUE工具: IDEA/Eclipse、Navicat、Maven 系统展示 前台展示 绩效考核查询模块&#xff1a;员工可以查询自己的绩效考核结果和历史记录。 后台展示 部门管理模…

物联网实战--入门篇之(十)安卓QT--后端开发

目录 一、项目配置 二、MQTT连接 三、数据解析 四、数据更新 五、数据发送 六、指令下发 一、项目配置 按常规新建一个Quick空项目后&#xff0c;我们需要对项目内容稍微改造、规划下。 首先根据我们的需要在.pro文件内添加必要的模块&#xff0c;其中quick就是qml了&…

阿里云服务器资费:一年或1个月费用价格,2024年更新

阿里云服务器资费多少钱&#xff1f;一年或1个月费用价格&#xff1a;2核2G3M轻量服务器61元一年、ECS云服务器2核2G3M 99元一年&#xff0c;2核4G轻量165元一年&#xff0c;2核4G ECS 199元一年&#xff0c;阿里云服务器网aliyunfuwuqi.com整理如下&#xff1a; 1、ECS经济型e…

vue 实现的h5 页面,如何设置页面中的 title

修改页面中的title 公共修改方式在App.vue 中&#xff1a; created() {document.title "测试标题"; },单个页面修改&#xff0c;就在单个页面编写就ok

(ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类

文章目录 相关论文摘要引言类别嵌入局限性——问题1普通ZSL模型局限性——问题2自动属性注释过程——对应问题1深度语义-视觉对齐&#xff08;DSVA&#xff09;模型——对应问题2 基于遥感多模态相似性的自动属性标注属性词汇表构造使用CLIP模型自动标注属性对CLIP模型进行训练…

移动Web学习04-移动端订单结算页PC端个人中心页面

5、电商结算页面案例 css body{background-color: #F2F2F2; } * {box-sizing: border-box;margin: 0;padding: 0; }.main{padding: 12px 11px 80px; }.pay{display: flex;height: 80px;background-color: #fff;bottom: 0;width: 100%;border-top: 1px solid #ededed;position:…