【库函数】简要举例STM32对GPIO进行SetBits和ResetBits

2024-03-21 03:08

本文主要是介绍【库函数】简要举例STM32对GPIO进行SetBits和ResetBits,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.要解决的问题: STM32 如何对几个GPIO引脚进行单独操作

2.第一步骤:在XXX.c文件中配置好相关GPIO定义

    如果我们要开启GPIOA的Pin0和Pin1,那么就要先进行相关配置,这里举例一个GPIO配置

void LED_GPIO_Config(void)
{  /*定义一个GPIO_InitTypeDef类型的结构体*/GPIO_InitTypeDef GPIO_InitStructure;/*开启GPIOA的外设时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);/*选择要控制的GPIOA引脚*/                  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;/*设置引脚模式为通用推挽输出*/GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  /*设置引脚速率为50MHz */   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;/*调用库函数,初始化GPIOA*/GPIO_Init(GPIOA, &GPIO_InitStructure);     
}

我们可以看到,配置GPIO的时候要先定义一个GPIO结构体,再给结构体内的成员赋值。其相关值都是设定好的,我们只需要配置和使用,配置完成即可调用。相关名称与函数定义在stm32f10x_gpio.c文件中,所以说要多看《STM32用户手册》,不知道的地方就查询用户手册,笔者在这里就是简单的举例。

如果要针对某个GPIO引脚进行输出高;输出低,则可以在.c文件中这样写

GPIO_SetBits(GPIOA,GPIO_Pin_0)  \\PA0 = 1
GPIO_ResetBits(GPIOA,GPIO_Pin_0)  \\PA0 = 0

.c文件写好之后我们就开始写.h头文件,头文件十分重要,我们可以进行很多的宏定义,减少我们代码的复杂度,增加可读性。把.h头文件中某代码片段拿出来举例:

#define ON  0
#define OFF 1
这里是进行宏定义,把0赋值给ON;把1赋值给OFF,我们再看下面代码

#define PA0(a) if (a) \GPIO_SetBits(GPIOA,GPIO_Pin_0);\else  \GPIO_ResetBits(GPIOA,GPIO_Pin_0)

那么我们在.c文件中的使用就可以如下:

PA0(1)  //PA0 = 1
PA0(0)  //PA0 = 0
或者

PA0(OFF)  //PA0 = 1
PA0(ON)  //PA0 = 0

这样用起来就大大的增加了代码的可读性和编写效率。


我们再来看最后的完成代码

led.c文件代码如下

#include "led.h"  //导入led头文件
#include "stm32f10x.h"  //导入STM32官方库
#include "stm32f10x_rcc.h"  //导入STM32的RCC时钟库
#include "delay.h" //导入延时函数void LED_GPIO_Config(void)  //定义LED的引脚的初始化函数
{GPIO_InitTypeDef GPIO_InitStructure;   //定义GPIO_InitTypeDef结构体RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE);  //开启引脚时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3; //定义LED的引脚GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //通用推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  //设置输出功率GPIO_Init(GPIOA, &GPIO_InitStructure);  //初始化GPIOC的引脚参数,写进
}void LED_Run(void)  //定义一个流水灯程序
{LED1(ON);  //LED1亮Delay_ms(500);  //亮500msLED1(OFF) //LED2熄灭,下同LED2(ON);Delay_ms(500);LED2(OFF);LED3(ON);Delay_ms(500);LED3(OFF);
}

led.h文件代码如下

#ifndef __LED_H  //如果未定义__LED_H
#define __LED_H  //如果未定义__LED_H#include "stm32f10x.h"  //导入STM32库文件
#include "stm32f10x_gpio.h"  //导入STM32库GPIO文件#define OFF  1  //定义ON 为0
#define ON 0  //定义OFF为1//如果a的值是1则调用STM32官方库调用引脚电流拉高函数 GPIO_SetBits;若a的值是0 则调用STM32官方库调用引脚电流拉高函数GPIO_ResetBits.
//设置GPIOC_Pin_0的引脚是LED1#define LED1(a) if (a)  \GPIO_SetBits(GPIOA,GPIO_Pin_0);\
else  \GPIO_ResetBits(GPIOA,GPIO_Pin_0)#define LED2(a) if (a)  \GPIO_SetBits(GPIOA,GPIO_Pin_1);\
else  \GPIO_ResetBits(GPIOA,GPIO_Pin_1)#define LED3(a) if (a)  \GPIO_SetBits(GPIOA,GPIO_Pin_2);\
else  \GPIO_ResetBits(GPIOA,GPIO_Pin_2)#define LED4(a) if (a)  \GPIO_SetBits(GPIOA,GPIO_Pin_3);\
else \GPIO_ResetBits(GPIOA,GPIO_Pin_3)void LED_GPIO_Config(void);  #endif   //定义__LED_H完成

是不是非常简单?有问题留言,尽力回复。

本文不接收任何复制和转载


这篇关于【库函数】简要举例STM32对GPIO进行SetBits和ResetBits的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

linux解压缩 xxx.jar文件进行内部操作过程

《linux解压缩xxx.jar文件进行内部操作过程》:本文主要介绍linux解压缩xxx.jar文件进行内部操作,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、解压文件二、压缩文件总结一、解压文件1、把 xxx.jar 文件放在服务器上,并进入当前目录#

SpringBoot中如何使用Assert进行断言校验

《SpringBoot中如何使用Assert进行断言校验》Java提供了内置的assert机制,而Spring框架也提供了更强大的Assert工具类来帮助开发者进行参数校验和状态检查,下... 目录前言一、Java 原生assert简介1.1 使用方式1.2 示例代码1.3 优缺点分析二、Spring Fr

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

Python包管理工具核心指令uvx举例详细解析

《Python包管理工具核心指令uvx举例详细解析》:本文主要介绍Python包管理工具核心指令uvx的相关资料,uvx是uv工具链中用于临时运行Python命令行工具的高效执行器,依托Rust实... 目录一、uvx 的定位与核心功能二、uvx 的典型应用场景三、uvx 与传统工具对比四、uvx 的技术实

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

Java中常见队列举例详解(非线程安全)

《Java中常见队列举例详解(非线程安全)》队列用于模拟队列这种数据结构,队列通常是指先进先出的容器,:本文主要介绍Java中常见队列(非线程安全)的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一.队列定义 二.常见接口 三.常见实现类3.1 ArrayDeque3.1.1 实现原理3.1.2

Linux使用scp进行远程目录文件复制的详细步骤和示例

《Linux使用scp进行远程目录文件复制的详细步骤和示例》在Linux系统中,scp(安全复制协议)是一个使用SSH(安全外壳协议)进行文件和目录安全传输的命令,它允许在远程主机之间复制文件和目录,... 目录1. 什么是scp?2. 语法3. 示例示例 1: 复制本地目录到远程主机示例 2: 复制远程主