单片机入门---最重要的外设控制(GPIO)

本文中主要介绍STM32中的GPIO,在最后简单介绍下PIC的IO设置。

基本功能需求

我们在使用STM32的管脚时,主要使用串口,I2C,SPI,或者直接作为输入输出管脚。而这些管脚的实现都是通过GPIO完成的。
下面简单介绍下GPIO的四种输入模式和四种输出模式。
在这里插入图片描述
四种输出模式
首先我们回顾一下我们常用的输出形式,I2C,SPI,输出高低电平,通过外部上拉输出高电平。
推挽输出:该模式下引脚可以输出高低电平,可连接驱动数字器件。
开漏输出:该模式下只能输出低电平,不能输出高电平,需要引脚加上拉电阻才能得到高电平。
推挽模式和开漏模式对比:
1 推挽模式延时小,开漏模式上拉延时大。
2 开漏模式可以连接与主控电平不匹配的器件,只需要将上拉电阻的上拉端连接到对方电平即可。
3 开漏模式可以以小博大,利用外部电路的驱动能力,减小内部电流,内部只需要很小的栅极驱动电流。

复用推挽输出:UART、SPI等输出引脚就是复用的推挽输出。
复用开漏输出:I2C就是这种模式,所以用I2C的时候外部需要上拉电阻。
四种输入模式
浮空输入:这种模式一般多用于检测外部高低电平状态,比如按键。浮空输入时上下拉电阻都没有连接,引脚电平状态不确定。那这时候读取的电平是否是合理的按键值呢???
上拉、下拉输入:很明显,这种模式下必定是连接了上拉或者下拉电阻。
模拟输入:我们通常使用的ADC采样正是采集的模拟信号。

另外需要特别强调:在使用GPIO时,需要注意alternate function的使用,有两个方法可以验证是否可用,一个是使用cubeMX进行选择,如果能正确的选择我们需要的功能,则说明这个跨越或者不跨越AF的功能可用。或者查阅下面的表,来验证我们选择的功能是否能够正常工作。
在这里插入图片描述
我们在使用GPIO的过程中,有时候可能需要进行输出输出等GPIO功能的切换,下面提供一段参考代码

void Convert_sysrst_gpio(int io)
{
	  GPIO_InitTypeDef GPIO_InitStruct = {0};
	  if (io == 1) {//input
		  /*Configure GPIO pin : PtPin */
		  GPIO_InitStruct.Pin = SYS_RST_X_Pin;
		  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
		  GPIO_InitStruct.Pull = GPIO_PULLUP;
		  HAL_GPIO_Init(SYS_RST_X_GPIO_Port, &GPIO_InitStruct);
	  } else if (io == 0) {
		  /*Configure GPIO pin Output Level */
		    HAL_GPIO_WritePin(GPIOC, SYS_RST_X_Pin, GPIO_PIN_RESET);
		  /*Configure GPIO pins : PCPin PCPin PCPin */
		    GPIO_InitStruct.Pin = SYS_RST_X_Pin;
		    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
		    GPIO_InitStruct.Pull = GPIO_NOPULL;
		    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
		    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
	  }
}

当我们传入参数1时,为input模式,传入参数为0时,为output模式。

PIC单片机
在这里插入图片描述
每个端口都有三个工作寄存器,这些寄存器是:

  • TRIS 寄存器(数据方向寄存器)
  • PORT寄存器(读取的引脚的电平设备)
  • LAT寄存器(输出锁存器)
    在文档中对PORT寄存器和LAT寄存器的描述应该是一样的。上述相当于做出了区分和解释。
    Writes to PORTA are actually written to corresponding LATA register. Reads from PORTA register is return of actual I/O pin values.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值