STM32学习心得(五)--对gpio硬件电路的理解

1.STM32中GPIO基本结构为

2.STM32共有4种输入,4种输出模式

2.1输入

2.1.1输入浮空模式

 浮空输入下,Vdd和Vss都断开,施密特触发器打开,数据直接送入“输入数据寄存器”,然后cpu就可以都寄存器中的数据

2.2.2输入上拉模式&输入下拉模式

 与2.2.1输入浮空模式相区别的是,此时上拉开关Vdd闭合,下拉开关仍断开。输入下拉模式与之正好相反。

2.2.3模拟输入

此时,Vdd和Vss都断开,施密特触发器也关闭。数据从I/O口进入后将会送至模拟输入端口,

2.2输出

2.2.1.开漏输出模式

 case1、若此时由CPU发送1给位设置/清除寄存器,同时映射给输出数据寄存器,再到输出控制电路,此时N-MOS管截止,I/O端口由与上拉电阻所连Vdd控制输出1,此时输出的电平可以由输入电路读入CPU。所以,此时CPU都到的电平并不是CPU送出的电平,而是由外部电路所决定的。

 case2、若此时由CPU发送0给位设置/清除寄存器,同时映射给输出数据寄存器,再到输出控制电路,此时N-MOS管导通,输出低电平给I/O口,并且此时输出的电平也可以由输入电路读入CPU

适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内).

2.2.2开漏复用输出模式

 类似于2.2.1.开漏输出模式,只是输出不再是CPU,而是外设。

2.2.3推挽输出模式(常用)

其数据输出寄存器部分等同于2.2.1,不同之处在于输出控制电路之后的部分,在推挽模式下,两个MOS管都会用到,当输出为1时,N-MOS管截止,P-MOS管导通,反之输出为0时, P-MOS管截止,N-MOS管导通,有助于增大输出功率。

2.2.4复用推挽输出模式

略,可以参考2.2.1--2.2.3不难总结出其作用 

具体可以参考这篇帖子:STM32的I/O口的8种工作模式

3. 一些引脚存在着复用的情况

这里举一些常用的例子,如串口USART1,详情可以查阅对应的芯片手册

特别的,“FT”表示该引脚能够容忍5V输入

4.一些推荐的输出/输入模式

4.1定时器

4.2.串口 

 

4.3.I2C

(寄存器相关的说明此处省略。。。)

5.打开stm32f10x_gpio.h文件,下拉到最底部,可以看到有如下几个函数

void GPIO_DeInit(GPIO_TypeDef* GPIOx);
void GPIO_AFIODeInit(void);
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct);
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_EventOutputConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);
void GPIO_EventOutputCmd(FunctionalState NewState);
void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState);
void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);
void GPIO_ETH_MediaInterfaceConfig(uint32_t GPIO_ETH_MediaInterface);

原子哥的视频中把这几个函数归类如下:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值