ST单片机GPIO工作模式

     
     在使用STM8单片机进行开发时,我们在配置管脚时会看到下面这个文件,对于输出有
OD(开漏),PP(推挽),输入FL(浮空),PU (上拉)都有不同选项,那么如何选择,首先的弄清楚他们分别代表什么意思。
typedef enum
{
  GPIO_Mode_In_FL_No_IT      = (uint8_t)0x00,   /*!< Input floating, no external interrupt */
  GPIO_Mode_In_PU_No_IT      = (uint8_t)0x40,   /*!< Input pull-up, no external interrupt */
  GPIO_Mode_In_FL_IT         = (uint8_t)0x20,   /*!< Input floating, external interrupt */
  GPIO_Mode_In_PU_IT         = (uint8_t)0x60,   /*!< Input pull-up, external interrupt */
  GPIO_Mode_Out_OD_Low_Fast  = (uint8_t)0xA0,   /*!< Output open-drain, low level, 10MHz */
  GPIO_Mode_Out_PP_Low_Fast  = (uint8_t)0xE0,   /*!< Output push-pull, low level, 10MHz */
  GPIO_Mode_Out_OD_Low_Slow  = (uint8_t)0x80,   /*!< Output open-drain, low level, 2MHz */
  GPIO_Mode_Out_PP_Low_Slow  = (uint8_t)0xC0,   /*!< Output push-pull, low level, 2MHz */
  GPIO_Mode_Out_OD_HiZ_Fast  = (uint8_t)0xB0,   /*!< Output open-drain, high-impedance level, 10MHz */
  GPIO_Mode_Out_PP_High_Fast = (uint8_t)0xF0,   /*!< Output push-pull, high level, 10MHz */
  GPIO_Mode_Out_OD_HiZ_Slow  = (uint8_t)0x90,   /*!< Output open-drain, high-impedance level, 2MHz */
  GPIO_Mode_Out_PP_High_Slow = (uint8_t)0xD0    /*!< Output push-pull, high level, 2MHz */
}GPIO_Mode_TypeDef;

今天看了百问网的资料总结如下:

I/O引脚共有8种工作模式,其中输出模式有四种:推挽输出、开漏输出、复用推挽 输出、复用开漏输出;输入模式有四种:上拉输入、下拉输入、浮空输入、模拟输入。

1. 推挽输出
       推挽结构由两个MOS管按互补对称的方式连接,任意时刻总是其中一个三极管导通,另一个三极管截 止,推挽模式让“输出控制”变为了VDD/Vss输出,使得输出电流增大,提高了输出引脚的驱动能力,提高了电路的负载能力和开关的动作速度。
2.开漏输出   漏是指MOS的漏极
   开漏输出模式即MOS管的漏极悬空,通常需要外接上拉电阻才能输出高电平,但开漏输出拥有 一些推挽输出不具有的特性:
①利用外部电路驱动能力。 “输出控制”只需要提供一个很小的栅极驱动电流, VCC 经过上拉电阻为外部负载提高驱动电流;
②实现电平转换。推挽输出模式由 V DD 提供,即只能提供 3.3V 电平。使用开漏输出模式后, VCC 可以为 5V,从而实现了电平转换的效果。
③方便实现“逻辑与”功能。多个开漏的引脚可以直接并在一起使用,统一接一个合适的上拉电阻,就 可以实现“逻辑与”关系,即当所有引脚均输出高电平时,输出才为高电平,若任一引脚输出低电平,则输 出低电平。在I 2 C SMBUS 等总线电路中经常会用到。
3.复用推挽输出、复用开漏输出
   
GPIO 引脚除了作为通用输入 / 输出引脚使用外,还可以作为片上外设( USART 、I2 C SPI 等)专用引脚, 即一个引脚可以有多种用途,但同一时刻一个引脚只能使用复用功能中的一个。
当引脚设置为复用功能时,可选择复用推挽输出模式或复用开漏输出模式,在设置为复用开漏输出模式 时,需要外接上拉电阻。
4.上拉输入
上拉电阻,连接外部 I/O 引脚。当开关闭合,外部 I/O 无输入信号 时,默认输入高电平。
该模式的典型应用就是外接按键,当没有按键按下时候, MCU 的引脚为确定的高电平,当按键按下时 候,引脚电平被拉为低电平。
5. 下拉输入
V ss 经过开关、下拉电阻,连接外部 I/O 引脚。当开关闭合,外部 I/O 无输入信号时,
默认输入低电平。
6. 浮空输入
既无上拉也无下拉, I/O 引脚直接连接 TTL 肖特基 触发器,此时I/O 引脚浮空,读取的电平是不确定的,外部信号是什么电平, MCU 引脚就输入什么电平。 MCU 复位上电后,默认为浮空输入模式。
7.模拟输入
引脚信号直接 连接模拟输入,实现对外部信号的采集。
GPIO 输出速度
STM32 I/O 引脚工作在输出模式下时,需要配置 I/O 引脚的输出速度。该输出速度不是输出信号的速度, 而是I/O 口驱动电路的响应速度。
STM32 提供三个输出速度: 2MHz 10MHz 50MHz 。实际开发中需要结合实际情况选择合适的相应速 度,以兼顾信号的稳定性和低功耗。通常,当设置为高速时,功耗高、噪声大、电磁干扰强;当设备为低速 时,功耗低、噪声小、电磁干扰弱。
通常简单外设,比如 LED 灯、蜂鸣器灯,建议使用 2MHz 的输出速度,而复用为 I 2 C SPI 等通信信号引 脚时,建议使用10MHz 50MHz 以提高响应速度。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,需要了解 GD32 单片机的 IIC 接口是如何工作的。IIC(Inter-Integrated Circuit)接口是一种串行通信协议,常用于连接微控制器和外围设备。ST480 是一款 IIC 总线收发器,用于将单片机的 IIC 接口转换为 RS-485 通信接口,以便连接远程设备。 下面是 GD32 单片机使用 IIC 协议驱动 ST480 的步骤: 1. 配置 GD32 单片机GPIO 端口为 IIC 接口模式。在 GD32 的 GPIO 控制寄存器中,需要设置相应的引脚为 IIC 功能,如下所示: ``` GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); ``` 2. 配置 GD32 单片机的 IIC 控制器。在 GD32 的 IIC 控制器寄存器中,需要设置 IIC 总线的时钟速度、地址、工作模式等参数。例如: ``` I2C_InitStructure.I2C_ClockSpeed = 100000; I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2; I2C_InitStructure.I2C_OwnAddress1 = 0x00; I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; I2C_Init(I2C1, &I2C_InitStructure); ``` 3. 发送 IIC 数据。在 GD32 的 IIC 控制器寄存器中,需要设置 IIC 数据的传输方式,如读或写、数据长度等参数。例如: ``` I2C_GenerateSTART(I2C1, ENABLE); while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)); I2C_Send7bitAddress(I2C1, slave_addr, I2C_Direction_Transmitter); while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)); I2C_SendData(I2C1, data); while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)); I2C_GenerateSTOP(I2C1, ENABLE); ``` 其中,`slave_addr` 是 ST480 的从机地址,`data` 是要发送的数据。 4. 接收 IIC 数据。在 GD32 的 IIC 控制器寄存器中,需要设置 IIC 数据的传输方式,如读或写、数据长度等参数。例如: ``` I2C_GenerateSTART(I2C1, ENABLE); while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)); I2C_Send7bitAddress(I2C1, slave_addr, I2C_Direction_Receiver); while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED)); while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED)); data = I2C_ReceiveData(I2C1); I2C_GenerateSTOP(I2C1, ENABLE); ``` 其中,`slave_addr` 是 ST480 的从机地址,`data` 是接收到的数据。 以上是使用 GD32 单片机驱动 ST480 的基本步骤,具体实现需要根据实际情况进行调整和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值