前言
自己本来是学习Java的,但是秋招下来,也没有找到任何Java方向合适的工作。最后截至到现在,自己找到了某大厂测试开发offer,尽管是白菜价,但是也算是够到大厂的了。方向是硬件方向的测开,需要学习嵌入式方面的知识。经过综合考虑,自己打算学习嵌入式了,一者提前学习一下相关的知识,明年夏季入职后,可以更快的成长,二者自己春招可以试一下嵌入式。
然后经过自己几天的寻找,发现B站的江协科技所将的STM32是最好的一个,然后自己想跟着江协科技的视频来进行学习,来记录自己学习的知识笔记,以便后序的复习。另外也可以帮助小伙伴们,对相关知识进行查阅
GPIO基本介绍

0是低电平,1是高电平。
引脚电平:对于输出而言,最大的也就只能输出3.3v,但是对于输入而言,最大可以输入5V
具体那些可以容忍5V的,可以看STM32的引脚定义,带FT的就是容忍5V的

GPIO基本结构

APB2外设总线,STM32所有GPIO都挂在在这里
GPIO的外设名称是按照GPIOA,GPIOB,C这样来命名的
每个GPIO外设一共有16个引脚
每个GPIO里面都拥有寄存器和驱动器
寄存器是一段特殊的存储器,内核可以通过APB2总线对寄存器读写,这样就可以输出电平和读取电平了
例如,若输入为1,那么对应的端口输出就是高电平,若为0,则对应的端口就是低电平。
若读取为1,则说明端口输入高电平
STM的寄存器都是32位的,但是呢端口只有16位,那么只有低16位对应端口
驱动器是进行信号的驱动操作
GPIO位结构

三个寄存器,然后中间部分是驱动器,后面就是引脚了
然后上面是输入部分,下面是输出部分
输入设备
引脚和两个二极管
引脚旁边有两个保护二极管,这是给输入电压进行限伏的,VDD是3V,VSS是0V。
如果输入的电压高于3V,那么保护二极管就会导通,电流就会流入到VDD,而不会流入内部。
若电压低于VSS的电压,那么下方就会导通,就不会从内部汲取电流,保护电路
上拉电阻和下拉电阻
然后电路就走到了上拉电阻和下拉电阻,然后分为上拉输入模式和下拉输入模式。若两个都断开,就是浮空输入模式
给输入提供一个默认的输入电平。防止引脚没有输入的时候,导致电路被外接扰动,防止引脚悬空导致的输入数据不确定
若接入上拉电阻,引脚悬空时,还有上拉电阻保证引脚的高电平(默认高电平输入模式)反之就是默认低电平的输入模式
TTL施密特触发器
施密特触发器的作用就是对输入电压进行整型的
如果输入电压大于某一阈值,输出就会瞬间升为高电平,若低于某一个阈值,就变成低电平
可以避免因信号波动造成的输出抖动的现象
然后输入到输入数据寄存器种,就可以得到相应的数据
然后上方还有两个线路,
模拟输入:连接到ADC上,需要接受模拟量,那么就需要接到施密特触发器前面
复位功能输入:连接需要读取端口的外设上面的,是需要读取数字信号的,需要在施密特触发器后面
输出设备
输入部分有两个
通过输入数据寄存器,平台的IO口输出,操作某一位,就可以操作某一个端口了
未设置清楚寄存器:用来操作输出寄存器的某一位,而不会影响其他的
将操作的数改为1,然后没有操作的写成0,然后他内部的电路就会自动将输出数据寄存器对应位置为1,而0不变
也可以使用位带的方式(当前不是)
通过外设的复用功能输出
然后输出控制后就接到了两个MOS管
MOS管就是电子开关,信号来控制开关,将IO口接到VDD或者VSS
可以选择推挽(P-MOS和N-MOS均有效)
输出位1是,PMOS有效(VDD),位0是N-MOS有效(VSS)
开漏(P-MOS无效)若位1,则N-MOS断开,高电阻模式。若位0,N-MOS接通,输出直接到VSS(此时高电平有没有驱动能力,低电平有驱动能力)
关闭(当配置输入模式的时候,两个MOS管都无效)输出关闭
GPIO的八种工作模式

LED和蜂鸣器介绍

硬件电路
一个高电平和低电平电路

按照第一个为例
LED1正极接3.3V电路,负极通过一个限流电阻接到PA0上。当PA0输出低电平的时候,LED两端就会产生电压差,就会LED就会点亮了
关于高低电路的选择,主要看这个IO口的驱动能力如何了。
若在推挽输出能力下,高低电平的驱动能力都比较强,两个接法都可以。但是更加倾向于第一个接法,因为大部分都是高电平弱驱动,低电平强驱动的。防止高低电平打架
然后三极管驱动
如果驱动电路过大,可以使用一个三极管驱动电路去驱动
三极管的左边是基级
带箭头的是发射极
剩下的是集电级