1.什么是GPIO:
a.哪些引脚可以容忍5V电频(带FT的引脚口)
b.GPIO基本结构(APB2外设总线)
*寄存器是32位的但是引脚却只有16位所以寄存器只用到低16位(高16位是没有用到的)
*寄存器对应GPIO状态——>GPIOA=0x01,PA0输出/输入高电平取决于GPIO输入输出模式
*驱动器作用接收来自寄存器的信号,然后将信号进行处理再转移有关的执行器(如灯)
c.GPIO位结构示意图
*从左往右可分为寄存器——驱动器——对应引脚
*从上到下可分为输入部分和输出部分:
1.对应I/O引脚——输入驱动器——读出:
保护电路如何运行:a.当输入电压大于VDD3.3V/5V时正向导通从而防止I/O脚高电平流入电路导致元器件烧坏 b.当输入电压小于0V时VSS正向导通直接从VSS流入I/O脚
默认输入模式:当开关上面导通下面截止 输入电平为(VDD-VR)+VI/O(因为VR相对而言比较大所以属于弱上拉对输入电平影响不大),反之下拉输入模式为VSS 两边都截止则为浮空输入模式(引脚输入极易受外界影响)
这种输入模式就类似于重力->浮空输入模式就是在太空上,而有输入电平就相当于在地球上有了重力作用总还是要落到地面上的吗,虽然重力对于你的体重可能是九牛一毛但是还是让你无法飞起来
施密特触发器:对电压整形
高于上限输出为高,低于下限输出为低,在中间输出不变(防止信号发生抖动)
模拟输入接入ADC上(如光敏)需要接受模拟量才能输出对应电压
复用功能输入
2.输出
a.位写入对寄存器某一位进行控制
b.整体写入对整个寄存器的16位进行整体编写
c.推挽输出:当输出位高P-MOS导通输出接到VDD 反之输出接到VSS
d.开漏输出模式:(一般用于通信协议输出和外接高电平输出)
输出1,P-MOS没有用并且N-MOS也没有用即没有输入外部高电平就可输出5V电压
输出0,N-MOS导通如果I/O口外接上拉高电平那么就直接输出高电平
d.GOIO八种模式(江科大3-1:21分钟)
*一个端口只能有一个输出但可以有多个输入
除了模拟输入会关闭数字输入,及不经过施密特触发器
输入模式下输出不能用,输出模式下输入可以用
实录电路连接图
写代码思路
1.时钟开启(使用各个外设前必须开启时钟,否则对外设的操作无效)STM32——理解时钟系统
RCC_APB2PeriphClockCmd
2.GPIO初始化
GPIO_InitTypeDef GPIO_InitStructure
结构体变量GPIO_InitStructure补充:
GPIO_InitStructure.GPIO_Mode
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0 (有多个引脚的话通过|来连接)
如GPIO_Pin_0 |GPIO_Pin_1|GPIO_Pin_2
GPIO_InitStructure.GPIO_Speed
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;//GPIO引脚,赋值为所有引脚
GPIO_Init(GPIOA, &GPIO_InitStructure)
3.设置高低电平
a.按位操作
GPIO_ResetBits(高电平)
GPIO_SetBits(低电平)
GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET(高)/SET(低));
通过延迟函数来实现led闪烁间隔
b.整体赋值
GPIO_Write(GPIOA, ~0x0001);//PA0引脚为低电平,其他引脚均为高电平
c.蜂鸣器:低电平,蜂鸣器鸣叫
高电平,蜂鸣器停止
拓展·STM32基本架构