本文已参与「新人创作礼」活动,一起开启掘金创作之路。
一、概述
因为自己是零基础学习,直接看的视频,感觉最近的暴风吸入导致自己有点不稳定,在弹幕上看到过一句话,基础不牢,地动山摇,我也感觉是这样的,所以缓缓自己,复习一下之前的东西。并且补充一些之前遗漏的东西
二、stm32的四大输入输出
2.1 输入模式
1)输入浮空(GPIO_Mode_IN_FLOATING)
2 )输入上拉(GPIO_Mode_IPU)
3)输入下拉(GPIO_Mode_IPD)
4)模拟输入(GPIO_Mode_AIN)
2.1.1输入浮空(GPIO_Mode_IN_FLOATING)
顾名思义,输入不接高电平也不接低电平。一般实际运用时,引脚不建议悬空,易受干扰。 浮空最大的特点就是电压的不确定性,它可能是0V,也可能是VCC,还可能是介于两者之间的某个值(最有可能) 浮空一般用来做ADC输入用,这样可以减少上下拉电阻对结果的影响。由于其输入阻抗比较大,一般把这种模式用于标准的通讯协议,比如IIC、USART的等。
从这个图也可以看出浮空输入就是直接重IO端口进来,通过施密特触发器改变到电路的对应电平,然后就输入到数据到寄存器里面。
2.1.2 输入上拉(GPIO_Mode_IPU)
输入上拉模式:上拉就是把点位拉高,比如拉到VDD。上拉就是将不确定的信号通过一个电阻嵌位在高电平。电阻同时起到限流的作用。弱强只是上拉电阻的阻值不同,没有什么严格区分。
从这个图也可以看出输入上拉就是直接重IO端口进来,通过上拉电阻将电平拉高,再经过施密特触发器转换成0、1信号,读取此时的引脚电平为高电平, 然后就输入到数据到寄存器里面。
2.1.3 输入下拉(GPIO_Mode_IPD)
输入下拉:就是把电压拉低,拉到GND。
从这个图也可以看出输入上拉就是直接重IO端口进来,通过下拉电阻将电平拉低,再经过施密特触发器转换成0、1信号,读取此时的引脚电平为低电平, 然后就输入到数据到寄存器里面。
2.1.4 模拟输入(GPIO_Mode_AIN)
模拟输入是指传统方式的输入,数字输入是输入PCM数字信号,即0,1的二进制数字信号,通过数模转换,转换成模拟信号。 不经过施密特触发器,也不需要上拉下拉电阻。
2.2 输出模式
1)开漏输出(GPIO_Mode_Out_OD)
2)开漏复用功能(GPIO_Mode_AF_OD)
3)推挽输出(GPIO_Mode_Out_PP)
4)推挽复用功能(GPIO_Mode_AF_PP)
2.2.1 开漏输出(GPIO_Mode_Out_OD)
开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部的上拉电阻时,只能输出低电平,如果需要同时具备输出高电平的功能,则需要接上拉电阻。为了方便理解开口输出,我们先看一个三极管电路图
当Vin没有电流,Q5断开时,LED亮。当Vin流入电流,Q5导通时,LED灭。
所以开漏输出就是通过控制我们内部输出的高低(0或者1)来控制外部电阻是否接地。
2.2.2 开漏复用功能(GPIO_Mode_AF_OD)
可以理解为GPIO口被用作第二功能时的配置情况(即并非作为通用IO口使用)。作为芯片内外设功能(TX1,MOSI,MISO.SCK.SS)。
2.2.3 推挽输出(GPIO_Mode_Out_PP)
可以输出高,低电平,连接数字器件;推挽结构一般是指两个三级管分别受到互补信号的控制,总是在一个三极管导通的时候另一个截止。高低电平由IC的电源低定。
当内部有电源为V+的时候,上方三极管导通,电流冲上到下流动,并提供给负载,这就是推。
当内部有电源为V-的时候,下方三极管导通,电流从下到上流动,并提供给负载,这就是挽。
2.2.4 推挽复用功能(GPIO_Mode_AF_PP)
可以理解为GPIO口被用作第二功能时的配置情况(并非作为通用IO口使用),芯片内外设功能(I2C的SCL,SDA)。
其实关于这个输入输出中文手册上有很详细的讲解。
就在这个8.1这节里面,包括我们改用什么输出这些,都有说明。大家可以去详细看看。
三、如何调库
对于一个新手来说,我们总是看到大佬在跳来跳去,但是自己却找不到所以然,所以这里记录一下我自己的方法,可能不是最好的。
对于我来说,无论是操作GPIO,EXTI,USART,如果是调库,那么第一步就是找到对应的头文件,然后拉到最后,这里一般都会有一大堆void声明。这就是代表的的对应的.c文件里面的函数,不过这里集中在一起,我们很好找。包括复位,初始化这些,这里都有。
下一步就是找到对应函数,我们去分析这个参数,这个时候我们只需要进入到这个函数内部就行。按F12或者鼠标右击,点击 go to definition 对应函数
然后我们就会定位到对应的函数,这时候我们先看函数上面的解释。
在stm32里面,大多数结构体都是直接给你定义好了的,你只需要直接调用接口就行。
具体详细的就是还需要去看对应的手册,头痛的是英语,脑子不够用。
今天就先写到这里吧!晚安。