stm32 学习笔记:GPIO输出

一、GPIO简介

       引脚电平 0-3.3V,部分可容忍5V,对输出而言最大只能输出3.3V,

       只要可以用高低电平来控制的地方,都可以用GPIO来完成,如果控制的功率比较大的设备,只需加入驱动电路即可

        GPIO 通用输入输出口,可配置为 8种 输入输出模式。

  • 输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等。而如果控制的是功率比较大的设备,只需要再添加驱动电路即可。

  • 输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入(GPIO甚至还能配置成模拟信号输入的模式,配合内部的ADC外设就能直接读取模拟电压了)、ADC电压采集、模拟通信协议接收数据等。

二、GPIO基本结构

  所有的 GPIO 都是挂载在 ABP2 总线结构上的
  每个 GPIOX 外设有 16 个引脚,编号从 0~15,比如GPIOA 的第0引脚称为 PAO
  每个 GPIO 模块内,主要包含了寄存器和驱动器这些东西,内核可以通过 APB2 总线对寄存器进行读写。
  stm32 是32位单片机,所以寄存器是32位,GPIO模块的寄存器只有低 16 对应IO 引脚
  其中的驱动器是用来增加信号的驱动能力,比如电灯操作

三、 (重要)GPIO 位结构电路

四、GPIO模式

五、外设GPIO配置

六、LED和蜂鸣器模块

七、外设硬件电路

     GPIO在推挽输出模式下,高低电平均有较强的驱动能力,但在单片机里,一般用第一种,因为使用高电平弱驱动 ,低电平强驱动的规则

 

八、LED闪烁电路接线:

 九、主要程序:

1、第一步:使用RCC初始化GPIO时钟

2、第二步:使用GPIO_Init函数初始化GPIO 

3、第三步设置高低电平 

1、点亮一个灯(低电平亮)(LED连接PA0口) 

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
int main(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使用RCC初始化GPIO时钟//使用GPIO_Init函数初始化GPIOGPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   //点灯通用推挽输出GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;          //用的是GPIOA外设的0号引脚GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  //50兆hz的速度//用结构体的函数初始化GPIO口GPIO_Init(GPIOA,&GPIO_InitStructure);              //第二个参数为指向结构体的指针,故传地址GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);while(1){GPIO_ResetBits(GPIOA,GPIO_Pin_0);Delay_ms(500);GPIO_SetBits(GPIOA,GPIO_Pin_0);Delay_ms(500);GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);//加两个延时函数Delay_ms(500);//毫秒延时函数(参数500)GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);//熄灭LEDDelay_ms(500);//毫秒延时函数(参数500)GPIO_WriteBit(GPIOA,GPIO_Pin_0,(BitAction)0);Delay_ms(500);//毫秒延时函数(参数500)//加两个延时函数GPIO_WriteBit(GPIOA,GPIO_Pin_0,(BitAction)1);Delay_ms(500);}
}

2、流水灯(低电平亮)(LED连接PA0~PA6)

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
int main(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;           //初始化所有端口 配置为推挽输出模式GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);while(1){GPIO_Write(GPIOA,~0x0001); //0000 0000 0000 0001Delay_ms(500);GPIO_Write(GPIOA,~0x0002); //0000 0000 0000 0010Delay_ms(500);GPIO_Write(GPIOA,~0x0004); //0000 0000 0000 0100Delay_ms(500);GPIO_Write(GPIOA,~0x0008); //0000 0000 0000 1000Delay_ms(500);GPIO_Write(GPIOA,~0x0010); //0000 0000 0001 0000Delay_ms(500);GPIO_Write(GPIOA,~0x0020); //0000 0000 0010 0000Delay_ms(500);GPIO_Write(GPIOA,~0x0040); //0000 0000 0100 0000Delay_ms(500);GPIO_Write(GPIOA,~0x0080); //0000 0000 1000 0000Delay_ms(500);}
}

3、蜂鸣器(低电平的时候响)(蜂鸣器接口为PB12

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
int main(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStructure);while(1){GPIO_ResetBits(GPIOB,GPIO_Pin_12); Delay_ms(100);GPIO_SetBits(GPIOB,GPIO_Pin_12); Delay_ms(100);GPIO_ResetBits(GPIOB,GPIO_Pin_12); Delay_ms(100);GPIO_SetBits(GPIOB,GPIO_Pin_12); Delay_ms(700);}
}

十、下面是程序详解 :来自于博主的笔记:

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

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

相关文章

2023国赛数学建模E题思路代码 - 黄河水沙监测数据分析

# 1 赛题 E 题 黄河水沙监测数据分析 黄河是中华民族的母亲河。研究黄河水沙通量的变化规律对沿黄流域的环境治理、气候变 化和人民生活的影响, 以及对优化黄河流域水资源分配、协调人地关系、调水调沙、防洪减灾 等方面都具有重要的理论指导意义。 附件 1 给出了位…

【实训】“宅急送”订餐管理系统(程序设计综合能力实训)

👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》 🌝每一个不曾起舞的日子,都是对生命的辜负 前言 大一小学期,我迎来了人生中的第一次实训…

2023/9/8 -- C++/QT

作业 1> 自行封装一个栈的类,包含私有成员属性:栈的数组、记录栈顶的变量 成员函数完成:构造函数、析构函数、拷贝构造函数、入栈、出栈、清空栈、判空、判满、获取栈顶元素、求栈的大小 02stack.h: #ifndef __02STACK_H__ #define __…

无涯教程-JavaScript - IMSIN函数

描述 IMSIN函数以x yi或x yj文本格式返回复数的正弦。复数的正弦为- $$\sin(x yi) \sin(x)\cosh(y) \cos(x)\sin(y)i $$ 语法 IMSIN (inumber)争论 Argument描述Required/OptionalInumberA Complex Number for which you want the sine.Required Notes Excel中的复数仅…

活动预告 | 龙智、紫龙游戏与JFrog专家将出席龙智DevSecOps研讨会,探讨企业大规模开发创新

2023年9月8日(周五)下午13:30-19:45,龙智即将携手Atlassian与JFrog在上海共同举办主题为“大规模开发创新:如何提升企业级开发效率与质量”的线下研讨会。 在此次研讨会上,龙智高级咨询顾问、Atlassian认证专家叶燕秀…

【List篇】使用Arrays.asList生成的List集合,操作add方法报错

早上到公司,刚到工位,测试同事就跑来说"功能不行了,报服务器异常了,咋回事";我一脸蒙,早饭都顾不上吃,要来了测试账号复现了一下,然后仔细观察测试服务器日志,发现报了一个…

K8S 基础概念学习

1.K8S 通过Deployment 实现滚动发布,比如左边的ReplicatSet 的 pod 中 是V1版本的镜像,Deployment通过 再启动一个 ReplicatSet 中启动 pod中 镜像就是V2 2.每个pod 中都有一个pause 容器,他会连接本pod中的其他容器,实现互通。p…

【计算机网络】HTTP(上)

文章目录 1.HTTP概念2. URLurlencode 和 urldecode转义规则 3. HTTP的宏观理解HTTP的请求HTTP的响应 4. 见一见HTTP请求和响应请求报头 1. 模拟一个简单的响应response响应报头 2. 从路径中获取内容ReadFile函数的实现 3.不同资源进行区分反序列化的实现ReadOneLine函数的实现P…

2.11 PE结构:添加新的节区

在可执行PE文件中,节(section)是文件的组成部分之一,用于存储特定类型的数据。每个节都具有特定的作用和属性,通常来说一个正常的程序在被编译器创建后会生成一些固定的节,通过将数据组织在不同的节中&…

数学建模B多波束测线问题B

数学建模多波束测线问题 1.问题重述: 单波束测深是一种利用声波在水中传播的技术来测量水深的方法。它通过测量从船上发送声波到声波返回所用的时间来计算水深。然而,由于它是在单一点上连续测量的,因此数据在航迹上非常密集,但…

多通道振弦数据记录仪应用桥梁安全监测的关键要点

多通道振弦数据记录仪应用桥梁安全监测的关键要点 随着近年来桥梁建设和维护的不断推进,桥梁安全监测越来越成为公共关注的焦点。多通道振弦数据记录仪因其高效、准确的数据采集和处理能力,已经成为桥梁安全监测中不可或缺的设备。本文将从以下几个方面…

zabbix企业微信告警

目前,企业微信使用要设置可信域名 华为云搜索云函数 创建函数 选择http函数,随便输入函数名字 回到函数列表,选择刚创建的函数,创建触发器,安全模式选择none 点击右上角管理 选刚创建的api,右边操作点…

07-ThreadLocal有哪些使用场景?【Java面试题总结】

ThreadLocal有哪些使用场景? 7.1 多线程场景下共享变量问题 ThreadLocal是线程本地变量,可以存储共享变量副本,每一个独立线程都有与共享变量一模一样的副本。ThreadLocal在当前线程下共享变量是全局共享的,各个线程之间是相互独…

基于Dubbo实现服务的远程调用

目录 前言 RPC思想 为什么使用Dubbo Dubbo技术框架 ​编辑 调用关系流程 基础实现 A.提供统一业务Api B.编辑服务提供者Product B.a 添加依赖 B.b 添加Dubbo 配置(基于yaml配置文件) B.c 编写并暴露服务 C.编辑服务消费者 C.a 添加依赖 C.b 添加Dubbo配置 C.c 引用…

【Redis】3、Redis主从复制、哨兵、集群

Redis主从复制 主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的,只能由主节点到从节点。 默认情况下,每台Redis服务器…

PostgreSQL安装异常,服务无法启动导致创建服务器超时

win上安装pg后无法创建服务器,提示创建超时,发现服务列表里面pg15服务 并没有启动,启动服务器发现服务不了,截图忘记截了,复现不了,解决方法是 换个身份,然后继续启动,然后就可以在…

如何使用Docker部署Nacos服务?Nacos Docker 快速部署指南: 一站式部署与配置教程

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

说说 TCP的粘包、拆包

分析&回答 拆包和粘包是在socket编程中经常出现的情况, 在socket通讯过程中,如果通讯的一端一次性连续发送多条数据包,tcp协议会将多个数据包打包成一个tcp报文发送出去,这就是所谓的粘包。如果通讯的一端发送的数据包超过一…

【C++漂流记】一文搞懂类与对象的封装

本篇文章主要说明了类与对象中封装的有关知识,包括属性和行为作为整体、访问权限、class与struct的区别、成员属性的私有化,希望这篇文章可以帮助你更好的了解类与对象这方面的知识。 文章目录 一、属性和行为作为整体二、访问权限三、class与struct的区…

某米ax3000路由器组网解析

我们使用某米k60手机与某米ax3000 wifi6路由器组网,来分析和学习网络速率与瓶颈限制。 某米 AX3000 路由器简介 某米 AX3000 路由器是一款支持 WiFi 6 的双频路由器,它的 MIMO 是 22,也就是两根天线。MIMO 是 Multiple Input Multiple Outpu…