【工具使用】STM32CubeMX-GPIO配置

news2024/11/26 22:26:49

一、概述

    无论是新手还是大佬,基于STM32单片机的开发,使用STM32CubeMX都是可以极大提升开发效率的,并且其界面化的开发,也大大降低了新手对STM32单片机的开发门槛。
    本文主要讲述STM32芯片的GPIO的配置及其相关知识。GPIO(全称General-purpose input/output)通用型输入输出,是单片机中使用最为广泛,也是最为简单的一种外设。

二、软件说明

    STM32CubeMX是ST官方出的一款针对ST的MCU/MPU跨平台的图形化工具,支持在Linux、MacOS、Window系统下开发,其对接的底层接口是HAL库,另外习惯于寄存器开发的同学们,也可以使用LL库。STM32CubeMX除了集成MCU/MPU的硬件抽象层,另外还集成了像RTOS,文件系统,USB,网络,显示,嵌入式AI等中间件,这样开发者就能够很轻松的完成MCU/MPU的底层驱动的配置,留出更多精力开发上层功能逻辑,能够更进一步提高了嵌入式开发效率。
    演示版本 6.7.0

三、GPIO简介

    GPIO(全称General-purpose input/output)通用型输入输出,作为单片机最常用的一种外设,我们得先看下它有哪些功能。首先从芯片手册上,我们可以找到这么一张图。
    从英文名称不难看出,GPIO的基本功能有两个,一个是I(Input)输入,一个是O(Output)输出。因为嵌入式软件是最贴近硬件的驱动级软件,所以这里需要涉及一点硬件的知识。其中最常讲的就是上、下拉、高阻态,推挽、开漏。

  • 上拉

    下图圈出来的部分就是上拉电路,其实就是对VCC接一个电阻。常态未接任何东西的情况下,直接使用万用表测量地跟上拉电阻下端的电压,测出来的电压值就是VCC。这就是上拉电路最重要的功能,将电压稳定在高电平。当输出端对地时,VCC通过上拉电阻对地形成回路,此时就会在回路上产生电流,上拉电阻就作为一个分流的作用。
在这里插入图片描述

  • 下拉

    对地接一个电阻,就变成了下拉电路。常态未接任何东西的情况下,直接使用万用表测量地跟下拉电阻上端的电压,测出来的电压值就是0V。这就是下拉电路最重要的功能,将电压稳定在低电平。当输出端对VCC时,VCC通过下拉电阻对地形成回路,此时就会在回路上产生电流,下拉电阻就作为一个分流的作用。
在这里插入图片描述

  • 高阻态

    对地和对VCC的电阻很大(一般是M欧级别的),接近断连,此时即称为高阻态,又称浮空。对于STM32的GPIO端口,初始未配置的情况下,默认一般是高阻态。

  • 推挽

    直接由单片机内部的MOS管输出高低电平,驱动力有限。

  • 开漏

    需要外部接上拉电阻才能进行控制,好处是外部器件的驱动电流可完全由外部的电压和上拉电阻决定,驱动力强。

基本功能

在这里插入图片描述
    STM32的GPIO基本功能有下面这么几种:模拟输入/输出,复用输入/输出,IO输入/输出。本文重点介绍IO输入输出。
    复用模式是用于将该端口连接到单片机的其他外设上,如定时器、外部中断等。而模拟输入/输出模式,则是将该端口连接到单片机的ADC/DAC模块上。这两部分会在其他外设的篇章中单独提及。

四、GPIO配置

  • 输出配置

    GPIO的相关配置项,除了上面说的上、下拉模式,推挽、开漏模式,复用模式,还有速度的配置。GPIO的速度模式需要根据实际使用的翻转速度进行选择。
    下面以点个开发板上的LED灯为例子进行配置。首先看下开发板上是LED灯电路,是GND接发光二极管直接接到单片机口。所以当单片机GPIO口输出高电平时,因为LED灯两边存在电势差,电流通过R31电阻,经过LD2到地,使LED灯亮;当输出低电平时,因为LED灯两端无电势差,电路不导通,LED灯灭。

在这里插入图片描述

    根据原理图所示,这里将PA5引脚配置成"GPIO_OUTPUT",即普通输出口。
在这里插入图片描述

    再在"System Core"选项中,找到"GPIO",选择PA5,配置成初始电平配置为低电平,推挽输出(驱动LED灯的电流不大,可以直接驱动),无上下拉,速度为低速。
在这里插入图片描述

    配置为HAL或LL库,并配置好时钟,输出Keil工程,生成代码工程。
在这里插入图片描述

    在生成的工程中添加如下代码,每500ms翻转一下灯的状态。

int main(void)
{
    /* 省略初始化部分 */
    ......
    
    while(1)
    {
        /* 单片机界的Hello world! */
        /******** HAL库的实现--CubeMX中配置为HAL库 ********/
		HAL_GPIO_WritePin(GPIOA,			/* GPIOx,x为A~H */
							GPIO_PIN_5,		/* GPIO_PIN_x,x为0~15 */
							GPIO_PIN_SET);	/* GPIO_PIN_SET为高电平,GPIO_PIN_RESET为低电平 */
		HAL_Delay(500);						/* 延时500ms */
		
		HAL_GPIO_WritePin(GPIOA,
							GPIO_PIN_5,
							GPIO_PIN_RESET);
		HAL_Delay(500);



        /********* LL库的实现--CubeMX中配置为LL库 ********/
        #if 0
        LL_GPIO_SetOutputPin(GPIOA,
        						LL_GPIO_PIN_5);		/* 跟HAL库比,多了个LL的标识 */
		HAL_Delay(500);
		
		LL_GPIO_ResetOutputPin(GPIOA, LL_GPIO_PIN_5);
		HAL_Delay(500);
        #endif
    }
}

效果展示
在这里插入图片描述

  • 输入配置

    上面的配置+代码已经可以让LED灯自己闪动起来,现在我们要增加点自己的存在感,通过一个按键来控制灯闪——按下按键灯亮,放开灯灭。
    同样的,先查看原理图,找到按键连接的GPIO口。先分析下这个电路,按键B1按下时,GPIO口连接到地,也就是逻辑信号变0;松开B1键时,GPIO口上拉至VDD,即逻辑信号变为1。
在这里插入图片描述
    根据原理图所示,这里将PC13引脚配置成"GPIO_INPUT",即普通输入口。
在这里插入图片描述

    再在"System Core"选项中,找到"GPIO",选择PC13,配置为输入模式,无上下拉。
在这里插入图片描述

    然后将刚才闪灯的代码稍微改造一下。

int main(void)
{
    /* 省略初始化部分 */
    ......
    
    while(1)
    {
    	/******** HAL库的实现--CubeMX中配置为HAL库 ********/
    	/* 判断按键为按下-输入端口变为逻辑0,则点亮灯 */
    	if (GPIO_PIN_RESET == HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13))
		{
			HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
		}
		/* 否则灭灯 */
		else
		{
			HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
		}



    	/********* LL库的实现--CubeMX中配置为LL库 ********/
    	#if 0
        if (0 == LL_GPIO_IsInputPinSet(GPIOC, GPIO_PIN_13))
		{
			LL_GPIO_SetOutputPin(GPIOA, LL_GPIO_PIN_5);
		}
		else
		{
			LL_GPIO_ResetOutputPin(GPIOA, LL_GPIO_PIN_5);
		}
		#endif
    }
}

效果展示

在这里插入图片描述

五、注意事项

1、GPIO的配置跟硬件电路相关性较大,需要根据不同的电路特性进行配置,所以想要搞好单片机,还是得先从硬件基础走起。
2、对于高频使用,比如用GPIO模拟SWD接口时,需要把GPIO的速度调快,否则可能会因为一些电容特性导致波形失真。

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

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

相关文章

(转载)基本粒子群算法及惯性权重分析(matlab实现)

1 理论基础 粒子群算法(particle swarm optimization,PSO)是计算智能领域,除了蚁群算法、鱼群算法之外的一种群体智能的优化算法。该算法最早由Kennedy和Eberhart在1995年提出的。PSO算法源于对鸟类捕食行为的研究,鸟类捕食时,找到食物最简单…

一零五九、Windows系统(amd)通过VMware安装黑苹果

我来详细的说一下过程: 配置: windows amd锐龙VMware 16.0 (16.1.0 build-17198959)macos 11.1unlocker(工具,让虚拟机支持引导苹果系统) 总体步骤: 下载iso镜像和unlocker工具,这里提供两个链接&#…

Spring Cloud Alibaba Nacos 构建配置中心

构建配置中心 新建命名空间 登录 Nacos 面板,依次点击左侧菜单栏【命名空间→新建命名空间】、填写命名空间名和描述信息,点击【确定】: 新建配置文件 依次点击左侧菜单栏【配置管理→配置列表】、切换到指定命名空间【此处为 shop】、点击…

MySQL中的CONCAT()函数和CONCAT_WS()函数

一、介绍 1. CONCAT() MySQL的CONCAT()函数用于将多个字符串连接在一起。它接受两个或多个字符串参数,并返回它们的连接结果。 示例: select concat("hello"," ","world") as concatenated_str; 执行结果&#xff1a…

基于SpringBoot的爱心家园服装捐赠系统

目录 1、项目介绍 2、项目技术 3、运行环境 4、项目介绍 5、项目代码 5、运行截图 6、源码获取 1、项目介绍 角色:管理员、用户 管理员:管理员登录系统后,可以对首页、个人中心、用户管理、捐赠记录管理、论坛管理、留言管理、心愿管理等功能进行相应的操作…

二、KeilMDK+STM32CubeMX建立工程_LED灯闪烁为例

1、开发环境 (1)KeilMDK:V5.38.0.0 (2)STM32CubeMx:V6.8.1 (3)MCU:STM32F407ZGT6 2、实验目的&原理图 2.1、实验目的 实现两个LED灯以500毫秒闪烁一次。 2.2、原理图 (1)LED阴极接GPIO,GPIO输出低电平,LED点亮;GPIO输…

【Python】列表 List ② ( 使用下标索引访问列表 | 正向下标索引 | 反向下标索引 | 嵌套列表下标索引 | 下标索引越界错误 )

文章目录 一、使用下标索引访问列表1、下标索引用法2、正向下标索引3、反向下标索引4、代码示例 - 列表下标索引基本用法 二、嵌套列表下标索引1、嵌套列表下标索引简介2、代码示例 - 嵌套列表下标索引 三、下标索引越界错误 一、使用下标索引访问列表 1、下标索引用法 在 Pyth…

java SSM 宠物寄养管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 JSP SSM 宠物寄养管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采…

吐血整理,Selenium4自动化测试常用函数总结,各种场景操作实战...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 Selenium4自动化测…

GC 调优(实战篇)

高分配速率(High Allocation Rate) 分配速率(Allocation rate)表示单位时间内分配的内存量。通常使用 MB/sec作为单位, 也可以使用 PB/year 等。 分配速率过高就会严重影响程序的性能。在JVM中会导致巨大的GC开销。 如何测量分配速率? 指定JVM参数: -XX:PrintGCDetails -X…

WPS小技巧:在word进行手写批注、观看版式、自动保存、检测拼写错误的单词。

手写批注: 在审阅中可以看到一个画笔功能 点开后可以进行手写批注: 观看版式: 在视图选项卡中可以看到各种不同的版式: 选择不同,表现效果也不同: 全屏显示: 阅读模式: 写作模式&am…

【白话机器学习系列】白话向量点积

白话向量点积 点积(Dot Product)是机器学习中最常见的向量操作。本文将通过简洁易懂的语言配合大量图形为大家介绍点积运算及其背后的数学意义。 文章目录 背景知识几何视角向量的大小Cosine举例几何意义 坐标视角两种视角的等价性点积的作用总结 背景…

GC 调优(基础篇)

GC调优(Tuning Garbage Collection)和其他性能调优是同样的原理。初学者可能会被 200 多个 GC参数弄得一头雾水, 然后随便调整几个来试试结果,又或者修改几行代码来测试。其实只要参照下面的步骤,就能保证你的调优方向正确: 列出性能调优指标(State your performan…

2023-06-04 Unity ScriptableObject1——ScriptableObject数据文件

文章目录 一、创建数据模板二、创建数据文件三、使用数据文件四、非持久化特性 ​ ScriptableObject 是 Unity 提供的一个数据配置存储基类,可以用来保存大量数据的数据模板,类似于可以自定义的数据资源文件模板 ​ 它是一个类似 MonoBehavior 的基类&am…

简单易懂的基础封装模块,让Web测试更简单!

目录 前言: 1. 环境配置 2. 创建基础封装模块的类 3. 运行测试用例 4. 结论 前言: 在当今互联网时代,Web应用程序的开发变得越来越重要。随着Web应用程序数量的增加,需要进行测试的Web应用程序也日益增加。为了加速测试过程&…

京东太狠:100W数据去重,用distinct还是group by,说说理由?

背景说明: Mysql调优,是大家日常常见的调优工作。所以,Mysql调优是一个非常、非常核心的面试知识点。在40岁老架构师 尼恩的读者社群(50)中,其相关面试题是一个非常、非常高频的交流话题。 近段时间,有小伙伴面试京东…

【论文】——Robust High-Resolution Video Matting with Temporal Guidance浅读

视频matting 时序监督 摘要 我们介绍了一种稳健、实时、高分辨率的人类视频抠图方法,该方法取得了新的最先进性能。我们的方法比以前的方法轻得多,可以在Nvidia GTX 1080Ti GPU上以76 FPS处理4K,以104 FPS处理HD。与大多数现有的逐帧作为独…

118.【微信小程序 - 02】

微信小程序-02 (六)、小程序基础加强1.自定义组件-组件的创建与引用(1).创建自定义组件(2).引用组件(全局和局部)(3).局部引用组件(4).全局引用组件(5).全局引用和局部引用的建议(6).组件和页面的区别 2.自定义组件-样式(1).组件样式隔离(2).组件样式隔离的注意点(3).修改组键的…

【2023】Redis哨兵模式集群

目录 🎶 哨兵模式🎶 搭建哨兵模式集群🎶 搭建一主二从复制集群🎶 创建哨兵节点 🎶 哨兵节点的其他配置🎶 哨兵模式下故障自动恢复效果🎶 通过日志查看故障恢复过程 🎶 哨兵模式 一般…

华为OD机试真题 Java 实现【获取字符串中连续出现次数第k多的字母的次数】【2023Q1 100分】,附详细解题思路

一、题目描述 给定一个字符串&#xff0c;只包含大写字母&#xff0c;求在包含同一字母的子串中&#xff0c;长度第 k 长的子串的长度&#xff0c;相同字母只取最长的那个子串。 二、输入描述 第一行有一个子串(1<长度<100)&#xff0c;只包含大写字母&#xff1b;第二…