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.hqwc.cn/news/100819.html

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

相关文章

PyCharm 虚拟环境搭建

Anaconda搭建虚拟环境 安装 前往Anaconda官网(https://www.anaconda.com/products/individual),下载适合您操作系统的Anaconda版本,建议下载最新的稳定版。这里可以直接进入这个:https://repo.anaconda.com/archive/ …

M1 Pro 新芯片安装python2 方案汇总

前言:磨刀不误砍柴工,环境装好,才能打工。M1 Pro 新芯片安装python2 文章目录 方案一 docker 容器构造环境(如果涉及本地两个仓库需要关联则不适用)方案二 使用 pyenv 🚀 作者简介:作为某云服务…

uniapp 下拉框数据回显的问题

问题 : 现在是下拉框数据回显不了, 绑定的v-model 原因 : uniui 下拉框数据绑定要是 value text 这种格式的 解决办法: 将获取到的后端数据 转换为 需要的格式 ,再进行绑定 下拉框的数据 遍历

【Java SE】抽象类与接口

目录 【1】抽象类 【1.1】抽象类概念 【1.2】抽象类语法 【1.3】抽象类特性 【1.4】抽象类的作用 【2】接口 【2.1】接口的概念 【2.2】语法规则 【2.3】接口使用 【2.4】接口特性 【2.5】实现多个接口 【2.6】接口间的继承 【2.7】接口使用实例 【2.8】Clonable …

Android逆向学习(二)vscode进行双开与图标修改

Android逆向学习(二)vscode进行双开与图标修改 写在前面 这其实应该还是吾爱的第一个作业,但是写完上一个博客的时候已经比较晚了,如果继续敲机械键盘吵到室友,我怕我看不到明天的太阳,所以我决定分成两篇…

如何压缩图片大小?缩小图片体积跟我学

在日常生活中,我们常常需要处理图片,但是由于图片大小过大,常常带来许多不便。那么,如何压缩图片大小呢?下面就为大家介绍三个方法,让你轻松解决这个问题。 一、使用图片编辑软件 市面上有许多图片编辑软件…

2023-08-31 LeetCode每日一题(一个图中连通三元组的最小度数)

2023-08-31每日一题 一、题目编号 1761. 一个图中连通三元组的最小度数二、题目链接 点击跳转到题目位置 三、题目描述 给你一个无向图,整数 n 表示图中节点的数目,edges 数组表示图中的边,其中 edges[i] [ui, vi] ,表示 ui…

并发测试工具 apache-jmeter使用发送post请求JSON数据

目录 1 下载安装 2 汉化 3 创建高并发测试 配置线程组 创建web请求 创建监听器 结果树 汇总报告 为web请求添加token 添加Content-Type用于发送json 4 启动测试 5 查看结果 1 下载安装 官网Apache JMeter - Download Apache JMeter 解压运行 2 2 汉化 打开软件…

elasticsearch的索引库操作

索引库就类似数据库表,mapping映射就类似表的结构。我们要向es中存储数据,必须先创建“库”和“表”。 mapping映射属性 mapping是对索引库中文档的约束,常见的mapping属性包括: type:字段数据类型,常见的…

【两周学会FPGA】从0到1学习紫光同创FPGA开发|盘古PGL22G开发板学习之DDR3 IP简单读写测试(六)

本原创教程由深圳市小眼睛科技有限公司创作,版权归本公司所有,如需转载,需授权并注明出处 适用于板卡型号: 紫光同创PGL22G开发平台(盘古22K) 一:盘古22K开发板(紫光同创PGL22G开发…

​Bigemap软件在农业行业中的应用

​Bigemap软件在农业上面的一些应用 在农业工作者平时的工作应用中 Bigemap可以帮助农业用户更好地管理土地、作物和水资源 ;提高农业生产效率和质量 ;以及 野外调查定位,地层分析论证,水文地质调查等, 大部分的农业…

猫头虎博主的 2023 Google 开发者大会感受

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