GPIO的简介

其实GPIO就是类似于51单片机的IO口 有采集和控制的作用


翻转指的是高电平到低电平 或者低电平到高电平

1.不能接5v的电压 接了就烧
2.coms端口和ttl端口的识别

在芯片手册内IO口(可以理解为GPIO)后面又FT就是TTL端口 没有就是COMS端口 接着以COMS为例 在第一个范围内的电压GPIO就识别为0 在第二个电压范围内GPIO就识别为1 如果电压的范围是1.164~1.833则会获得一个随机值(避免这样的情况发生) GPIO的单端输出电流为25MA 极限情况 但是不能每个GPIO口都输出25MA 因为超过了芯片的的最大电流值就会烧毁

IO端口基本结构介绍


上下分为输入和输出驱动 分别处理输入和输出的信号
上面为输入信号的路径 下面为输出信号的路径 2为上下拉电阻 输入的信号和进入片上外设 也可进入寄存器IDO从而读出IO口是高电平还是低电平 然后输出信号进入输出控制 通过控制作用使得上下两个mos管输出高电平或低电平(上面高电平 下面低电平)从而IO口有输入和输出的作用


而二极管有保护作用如果输入5v的电阻则使得芯片内部输入信号的电位为3.6v起到钳位的作用(钳位电路) 下面的二极管也是如此
触发器的作用就是把正弦波转化为方波

第一个坐标图是正弦波(输入的信号) 第二个坐标图是经过触发器输出的波形图

模电的mos管

GPIO的八种输入模式分析


四个输出模式 四个输入模式
空闲时就是高阻态

空闲时(高阻态)由于上拉电阻的存在使得IO口为高电平

空闲时(高阻态)由于下拉电阻的存在使得IO口为低电平

当寄存器(ODO)对应的位写入0 下面的Pmos管导通 则输出VSS0低电平 如果寄存器对应的位写入1 则下面的Pmos截至 处于高阻态状态 无法输出高电平 (想要输出高电平必须外接上拉电阻)


F1和F4以及其他系列的差别


注意看F4以及其他系列的上下拉电阻是接在输入驱动器外部的 所以可以使用内部上下拉

GPIO的寄存器介绍


F1系列的BRR和LCKR都不用 不用学习 同理F4的LCKR寄存器
(GPIOA) CRL 和CRH都是32位寄存器 一共加起来是64位bit 而GPIOA有16个IO口引脚 相当于每四个bit控制一个IO口引脚
四个位控制一个IO口 圈起来的分别控制PA0 和PA1 所以这CRL一共控制8个IO口

如要设置PA10位推完模式 首先PA10对应的寄存器为CRH(CRL是控制低八位的) 就是CRH中 8 9 10 11这四个位 其中8 9 是设置IO口的输入和输出模式 (8 9设置为工程需要的模式 如设置为输出模式 速度为需要的模式 就设置为1 0 给8 9 位写入 1 1)然后后面两个位 10 11写入0 0 就设置成功
如果要设置为上下拉电阻 就写入1 0 但是不知道到底是上拉还是下拉模式?
引出ODR寄存器
ODR寄存器一共有16个位 一共对应16个IO口 每一个IO口对应一个位 加上了这个位就可以配置IO口的上下拉模式了 设置为1就输出高电平 设置为0就输出低电平


r 和rw 和w 分别是只读 读写 和只写的意思 举个例子 如果GPIOB_IDR 的第0位读到的是1 那么就说明PB0这个IO引脚接到的是高电平 (联想GPIO引脚的结构图)

一共有32个位 两个位控制IO口的ODR寄存器 这个寄存器 BSRR 只写 如果一个IO口引脚 如 PA10 对应GPIOA 而GPIOA的寄存器中的BSRR的BR10为1 BS10为0 那么 对应的寄存器ODR就为0 就输出低电平 反之ODR就为1 输出高电平

F4系列的配置输入输出




相比于F1只是把功能分开了 多了一个上下拉电阻 (因为上下拉电阻是在IO信号进入的必经之路)
后面的IDR 和ODR BSRR都是和F1一样的

使用BSRR寄存器

物联沃分享整理
物联沃-IOTWORD物联网 » STM32 GPIO(1)详解

发表评论