GPIO
输入输出模式介绍
输入模式
1.四种输入模式,模拟输入;上拉输入;下拉输入;浮空输入
2.模拟信号输入包含模拟输入,剩下三种输入方式均为数字输入
3.三种数字信号输入区别为,I/O口悬空状态下,输入端电平为高或低或不确定
4.输入为数字信号原理,芯片内部集成有施密特触发器,当外部输入高于阈值为逻辑1,低于阈值为逻辑0
输出模式
1.四种模式,开漏输出,推挽输出,复用开漏输出,复用推挽输出
2.推挽输出,P-mos和N-mos只能有一个导通,另外一个截止,对应高低电平
3.开漏输出,P-mos始终截止,N-mos导通输出低电平,N-mos截止,就处于高阻态,当外接上拉电阻时,由于原本属于高阻态,即可分得所有电压,实现高电平输出
4.由于M4内核相较M3内核在输出端口,内部集成可控上下拉电阻,所以如果内部上拉电阻满足需要,可以不用外部再接上拉电阻
寄存器介绍
GPIO地址定位思路:gpio的各个寄存器,都是放在gpio模块下,gpio模块挂载在AHB1总线上的,而AHB1属于外设模块下的模块
定位描述:通过外设地址,找到AHB1地址,通过AHB1地址定位到GPIO地址,通过GPIO地址定位到GPIO的各个寄存器(见下图)
GPIO寄存器介绍:
模式配置寄存器前四个,初始化时配置
1.GPIOx_MODER模式寄存器,输入,输出,模拟,复用
2.GPIOx_OTYPER输出类型寄存器,推挽输出,开漏输出
3.GPIOx_OSPEEDR端口速度寄存器,2,25,50,100Mhz
4.GPIOx_PUPDR上拉下拉寄存器,上拉,下拉,无上拉下拉
读写寄存器
5.GPIOx_IDR输入数据寄存器,只能读取输入数据的值
6.GPIOx_ODR输出数据寄存器 ,可读可写输出的数据
7.1GPIOx_BSRRL,0无操作,1通过ODR写1
7.2GPIOx_BSRRH,0无操作,1通过ODR写0
8.GPIOx_LCKR端口配置锁定寄存器,锁定完端口配置无法修改
9.复用功能寄存器GPIOx_AFRL&&GPIOx_AFRH
GPIO库函数介绍
1.GPIO_DeInit()将各个GPIO模块的时钟非使能了
2.GPIO_Init()初始化配置,如果输入只配置mode以及上拉下拉电阻,如果输出,那么还包括输出类型以及输出速度
3.GPIO_StructInit(),对GPIO结构体变量赋写好的值
4.GPIO_PinLockConfig()用来锁定端口配置,具体原理不清楚待补充
5.GPIO_ReadInputDataBit()读取IO外部输入高低电平
6.GPIO_ReadInputData()将外部输入的16个IO口的数据读出来
7.GPIO_ReadOutputDataBit()读取IO输出的值
8.GPIO_ReadOutputData()读取输出16个IO口的数据
9.GPIO_ResetBits()操作的是BSRRH,写1清除
10.GPIO_WriteBit()操作的是,可以写1可以写0
11.GPIO_Write()用来写ODR寄存器,设置输出值
12.GPIO_ToggleBits()异或操作,操作ODR,将相应位的值输出反转
13.GPIO_PinAFConfig()GPIO引脚映射到复用功能上
GPIO配置步骤
1.使能AHB1的时钟
2.初始化GPIO模式
3.输入数据监控,输出数据配置,根据需要配置实现想要的功能
GPIO资源
1.7组GPIO,每组16个IO口,共112个IO口
2.GPIOA的基地址为0x40020000
3.两两GPIO之间有0x400字节的偏移
4.每组GPIO有9个寄存器,占用0x24个字节
GPIO复用功能
1.GPIO时钟使能(包括时钟链路配置以及GPIO模块使能)
2.复用功能挂载APB下的时钟使能(包括APB以及复用功能模块使能)
3.GPIO输出及复用模式配置
4.GPIO与复用功能相映射
5.复用功能寄存器配置
位操作,寄存器操作,库函数操作
位操作:根据基地址,偏移地址直接找到寄存器对应位,进行赋值即可
寄存器操作:通过封装好的结构体变量对相应寄存器进行配置
库函数操作:使用芯片厂商封装好的函数,有校验功能,使用起来更加安全,避免误操作
HAL库函数:待补充
寄存器图片:
1.外设内存到AHB1内存
2.外设基地址
3.外设地址到AHB1基地址
4.AHB1基地址到GPIOD基地址
5.GPIOD基地址到GPIOD的每一个寄存器(强制类型转换基地址就变成gpio结构体变量)
6.GPIO变量,就映射成了gpio的各个寄存器