淘先锋技术网

首页 1 2 3 4 5 6 7

好了,朋友们,今天又开始新的学习了,哈哈。让我们怀着激动地心,颤抖的手,继续看视频奋斗,记录,学习吧!
好了,直接进入主题,拿干货!
GPIO口
用软件控制GPIO口是1还是0;
STM32F429总共有176个引脚。
在这里插入图片描述这里我们借用视频中的几个引脚说明记录一下。
这是一些不能用软件来控制的。
一共有9组IO,一组IO16个。所以可以用软件控制的IO有9×16=144
英文数据手册中找到在这里插入图片描述在这里插入图片描述
在这里插入图片描述
这是我自己做的笔记,大家监督并且观看或者指出错误。这里我跟着视频教程一起,在这里做了些笔记。在数据手册中,可以查询到各个IO口的功能。
我们这里也介绍一下GPIO的简介。一共有4个32位配置寄存器。2个32位数据寄存器。1个32位置位/复位寄存器。我觉得作为小白这些东西需要背过,1个32位锁定寄存器,和2个32位复用功能选择寄存器
在这里插入图片描述
在这里插入图片描述
每个 I/O 端口位均可自由编程,但 I/O 端口寄存器必须按 32 位字、半字或字节进行访问。
GPIOx_BSRR 寄存器旨在实现对 GPIO ODR 寄存器进行原子读取/修改访问。这样便可确保
在读取和修改访问之间发生中断请求也不会有问题。

在这里插入图片描述
上拉下拉在
在这里插入图片描述在这里插入图片描述在这里插入图片描述
我们如果想让GPIO输出一个高电平,我们需要先把IO配置成输入,或者输出。在手册中是控制在这里插入图片描述在这里插入图片描述
其中每两位控制一个IO端口
复位状态该都是输入状态在这里插入图片描述基本上都是浮空输入,除了下载口。如果配置成LED的话,要配置成通用输出模式,也就是上图的01.
复用功能是由SPI,I2C.模拟模式是在这里插入图片描述
模拟模式是DAC功能,意思是把芯片内部的信号转换成模拟信号,然后输出到引脚里面。也是配置上述寄存器MODER。在这里插入图片描述再向下走就是有输出驱动器。这里有个输出控制在这里插入图片描述这里对应的寄存器是在这里插入图片描述在这里插入图片描述
在这里插入图片描述总共两种模式:一个是输出推挽。一个是输出开漏。
那么朋友们,什么叫推挽输出呢,这是个重大的问题,我这个小白也不懂,所以让我们一起好好学习一下。
在这里插入图片描述上面的是PMOS,下面的是NMOS,这两个MOS管是这个互补信号来驱动,轮流导通来控制输出OUT的。
假如这个INT输入是0,首先经过这个反相器在这里插入图片描述,经过反相器0变成1 。上面的PMOS是1 ,PMOS管那里有个二极管在这里插入图片描述,这个G接到二极管的正极,负极接VDD,这样二极管两端都是高电平了,所以这个PMOS管不导通在这里插入图片描述
然后我们再来看下面这个 NMOS在这里插入图片描述因为我们这个S接的是地,G是1,所以。所以在这里OUT被拉低。输出0.反过来如果输入是1,那么上面PMOS导通输出1.所以结论:输入1输出1,输入0输出0
这个电路有两个优点:
1.输出低电平或者高电平的效率非常高
2.这个MOS管导通的时候内部阻值只有几毫欧,所以输出的电流非常的大,驱动负载的能力很强
所以我们使用GPIO的时候
不管是通用GPIO还是复用GPIO,一般都使用这推挽输出。
好了朋友们,都懂推挽输出了吗?我也是看了视频后懵懵懂懂,但是我已经明白了,相信你也会明白的!
下面让我们一起来看看开漏输出是什么样子吧!
在这里插入图片描述
开漏输出简单意思就是上面的PMOS管完全不工作,只有下面的这个NMOS管工作。
我们来分析一下,加入INT输入是0,经过反相器变成1,G也是1,S接地,所以Ug>Us在这里插入图片描述所以这个N管就导通了,然后这个OUT直接被这个地给拉低了,所以输出低电平。如果输入是1经过反相器变成0,G是0,S接地也是0,两个相等就截止了。现在既不是0也不是1,我们现在把这种状态叫做高阻态这时候必须外部上拉一个电阻。在这里插入图片描述
如果接上去了 就是上面这样流了,所以高电平完全由外部VDD来决定。
所以总结:
INT输入0,输出0
INT输入1,完全由外部VDD决定高电平大小。

这就叫做开漏输出,你学会了吗?既然学会了就给本小白点个赞吧!本小白也是初学者,但是喜欢把自己的学习心得都教给大家,虽然似乎不是那么的严谨,但是我相信,笨办法总会让人明白的!
开漏输出比较多的是I2C,I2C一定是开漏的,I2C协议里面有这样的规定,如果总线被占用的时候,总线肯定是低电平,控制它的时候是高电平,多个I2C接到一起的时候,它判断这个总线是否被占用的时候,就判断一下这个设配这个总线是不是高电平,如果是低电平表示在通信,被占用了。如果是高电平表示总线空闲。
接下来我们继续学习哈,这个VDD是3.3V,VSS是0V,可是有些设备必须5V启动的,这时候要用STM32驱动怎么办呢。我们一起来看一下,
我们可以加一个MOS管来控制这个开关的通断在这里插入图片描述
也就是用我们刚才说的开漏输出,如果VDD就是5V的话,那么OUT输出就是5V,那么我们就可以直接驱动5V的东西了。
这里输入0 是截止的。所以OUT取决于VDD
输入1 是导通的,直接OUT接地,是0。这边和上边不一样,这里是反向输出
如果想让他同向,在后面再接个8050在这里插入图片描述
现在再次总结一下:
推挽输出:
1.可以输出高低电平,用于连接数字器件,高电平由VDD决定,低电平由VSS决定
2.推挽结构指两个三极管受两路互补信号控制,总在一个导通的时候另外一个截止,优点效率高,电流大,驱动能力强。
3.输出高电平的时候,电流输出负载,叫灌电流,可以理解成推,输出低电平的时候,负载流向芯片,叫拉电流,即挽。
开漏输出:
1.只能输出低电平,不能输出高电平。
2如果要需要输入高电平,则需要外接上拉电阻到VDD。这个VDD一般是3.3V
3.开漏输出具有“线与”功能,一个为低,全部为低,多用于I2C和SMBUS总线。
好了我们接着向下讲。
这里向后有两个 一个是普通输出,一个功能输出。
我们先看普通的,普通的是操作这两个寄存器。
在这里插入图片描述
一个是叫置位/复位寄存器,一个是输出数据寄存器。
写这个寄存器最终操作的还是这个输出数据寄存器。这个寄存器是可读可写
如果我们想看下写出的有没有成功,就可以监控这个寄存器。
我们先看这个置位/复位寄存器。在这里插入图片描述在这里插入图片描述在这里插入图片描述
比如往0写1 ,那么1就是置位了。就是1.
往16写1,那么16就是复位了,就是0.
不管是写0还是写1都会影响这个端口输出数据寄存器。
在这里插入图片描述
这里是如果是0就输出0,如果是1就输出1.如果想让一个GPIO口是0或者1,可以直接操作这个端口输出数据寄存器(ODR),也可以操作这个支付复位寄存器(BSRR)。好了 让我们看下这个复用功能输出。
在这里插入图片描述
我们在数据手册里面找到PA9
在这里插入图片描述
发现他的复用功能有很多,其中有USART1_TX,表示串口1的发送功能。
就比如说PA9想配置UASTR1_TX,想配置串口这方面的功能,那么上一条线就断开了。
同理 这个输出搞明白了,输入就是输出的对称。
但是要讲一下这个TTL施密特触发器,这个触发器的功能是让图形更加漂亮。(视频上这样讲的)
让输入的信号确保是0或者是1.
对了上面有个地方没有讲,配置输入时候有个在这里插入图片描述端口输出速度寄存器可以配置。
最后总结一下,感谢你陪伴我一起学习,今天的任务要完事啦。
理论知识结束了哈。
总结一下
GPIO输出初始化顺序
1.确定GPIO是输入,通用输出、复用功能还是模拟输入(MODER)
2.如果输出还是要推挽输出还是开漏输出(OTYPER)
3.配置输出的速度(OSPEEDR)
4.输出的时候内部上/下拉电阻要不要开启(PUPDR)
5.具体要输出的内容(置位/复位寄存器BSRR和数据输出寄存器ODR)