好了,朋友们,今天又开始新的学习了,哈哈。让我们怀着激动地心,颤抖的手,继续看视频奋斗,记录,学习吧!
好了,直接进入主题,拿干货!
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)