江科大/江协科技 STM32学习笔记P4-5


GPIO输出

1、GPIO简介

GPIO(General Purpose Input Output)通用输入输出口
可配置为8种输入输出模式
引脚电平:0V~3.3V,部分引脚可容忍5V
输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等,
输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等

2、GPIO基本结构

在这里插入图片描述
所有GPIO都挂载在APB2外设总线上,每个GPIO有16个引脚,内部有寄存器和驱动器,寄存器存储数据,驱动器增加信号的驱动能力。

3、GPIO位结构

在这里插入图片描述
左寄存器,中间驱动器,右边引脚电路,上班输入,下边输出。

引脚电路

二极管起到保护作用,电流过大保护二极管导通连接VDD,不会流入内部电路,电压低于0V从VSS流出,不会从内部电路汲取电流。

上拉和下拉

在图右上角带两个开关的VSS和VDD,提供默认的输入电平,如果啥都不接输入处于浮空的状态,输入电平易受外界干扰而改变,接入上拉、下拉电阻保证引脚的高低电平。
曲曲折折的线就是上下拉电阻,上拉电阻的英语是 pull-up resistor。

接上拉电阻的IO口怎么还能输入低电平

因为上拉电阻的阻值很大,从VDD到上拉电阻再到GND,上拉电阻把绝大部分电压分走,剩下的电压很小就约为0了,这就是低电平。

施密特触发器

对输入电压进行整形,如果输入电压大于某阈值,输出瞬间升为高电平,如果输入电压小于某阈值,输出瞬间降为低电平,抗干扰,避免因信号波动造成的输出抖动现象。

位设置/位清除寄存器

在寄存器需要操作的位写1即可。因为输出数据寄存器同时控制16个端口,并且寄存器只能整体读写,如果想单独控制一个端口不影响其他时,需要特殊操作。

MOS管

电子开关,负责将IO口接到VDD或VSS。
在推挽输出模式下,P-MOS和N-MOS均有效,数据寄存器为1时,上管导通,下管断开,输出直接接到VDD,就是输出高电平。数据寄存器为0时,上管断开,下管导通,输出直接接到VSS,就是输出低电平。这种模式下,高低电平均有较强的驱动能力,所以推挽输出模式也叫强推输出模式。
开漏输出模式下,P-MOS无效,N-MOS工作,数据寄存器为1时,下管断开,输出相当于断开,高阻模式,数据寄存器为0时,下管导通,输出直接接到VSS,输出低电平。该模式只有低电平有驱动能力,高电平没有,可作为通信协议的驱动方式
,比如I2C通信的引脚。在多机通信的情况下,这个模式可以避免各个设备的相互干扰。另外开漏模式还能输出5V的电平信号,比如在IO口外接一个上拉电阻到5V的电源,当输出低电平时,由内部的N-MOS直接接VSS,当输出高电平时,由外部上拉电阻拉高至5V,这样就可以输出5V的电平信号,用于兼容一些5V电平的设备。
在输出关闭时,两个MOS管无效,端口的电平由外部信号来控制。

4、GPIO八种工作模式

在这里插入图片描述

通过配置GPIO的端口配置寄存器,上面位结构的电路就会根据配置进行改变,比如开关、MOS管和数据选择器的选择

浮空输入

输入的电平不确定,端口一定要接连续的驱动源

上拉输入

下拉输入

模拟输入

开漏输出

推挽输出

在输入模式下,输出都是无效的,也就是读的时候不能写,因为写会改变引脚信号影响读。
在输出模式下,可以输入,也就是写的时候可以读,因为读可以观测数据

复用开漏输出

复用推挽输出

由片上外设的线代替通用输出的线

5、LED和蜂鸣器的硬件电路

在这里插入图片描述
左上低电平驱动LED,LED正极接3.3V,负极通过一个限流电阻接到PA0上,当PA0输出低电平时,LED两端产生电压差,形成定向导通电流。高电平时两端都是3.3V的电压,不会形成电流。
左下高电平驱动,原理类似,相反。
右边驱动蜂鸣器,对于功率大的直接用IO口驱动会导致STM32负担过重,这时可以用三极管驱动电路来完成驱动的任务。上面是PNP三极管的驱动电路,三极管的左边是基极,带箭头的是发射极,剩下的是集电极。基极给低电平,三极管导通,给高电平,三极管截止。 右下是NPN三极管,基极给高电平导通。PNP的三极管接在上边,NPN的三极管接在下边,因为三极管的通断,需要在发射极和基极直接产生一定的开启电压,如果把负载接在发射极这边,可能导致三极管不能开启。解释一下,如果被控电器接在发射极,要求控制信号电压大于被控电器的需要的电压,这不符合以弱控强的要求。

  • 23
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
嗨!对于学习STM32笔记,我可以给你一些基本的指导。首先,你需要了解STM32是一系列由STMicroelectronics公司开发的32位微控制器。它们具有广泛的应用领域,包括嵌入式系统、物联网和工业自动化等。 在学习STM32时,你可以按照以下步骤进行: 1. 硬件准备:获取一块STM32开发板,例如STM32F4 Discovery或NUCLEO系列。这些开发板通常带有一些外设和接口,便于学习和实验。 2. 开发环境搭建:下载并安装Keil MDK或者IAR Embedded Workbench等集成开发环境(IDE)。这些IDE提供了编译器、调试器和其他工具,方便你编写和调试STM32的代码。 3. 学习基本知识:了解STM32的体系结构、寄存器和外设等基本知识。可以通过阅读相关的参考手册、数据手册和应用笔记来深入了解。 4. 编写代码:使用C/C++语言编写STM32的应用程序。你可以使用相关的库函数来简化开发过程,如标准外设库(StdPeriph Library)或者新的STM32Cube库。 5. 调试和测试:使用调试器和仿真器来调试和测试你的代码。这些工具能够帮助你单步执行代码、观察寄存器和内存的状态,以及检查外设的操作。 6. 实践项目:尝试一些小型的项目,如LED闪烁、按键输入和PWM输出等,以巩固你的学习成果。随着经验的积累,你可以尝试更复杂的项目,如通信接口、传感器应用和无线通信等。 记得在学习过程中多查阅官方文档、参考资料和在线论坛,以便解决遇到的问题。祝你学习STM32的旅程愉快!如果你有具体的问题,欢迎随时向我提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值