STM32F4寄存器与IO输入输出学习

IO设置函数

包括两个函数:GPIO_Set和GPIO_AF_Set. GPIO_AF_Set,每次只能设置一个IO口的复用功能。

STM32F4的每组通用I/O端口包括4个32位配置寄存器(MODER,OTYPER,OSPEEDR和PUPDR),2个32位数据寄存器(IDR和ODR),1个32位置位/复位寄存器(BSRR),1个32位锁定寄存器(LCKR)和2个32位复用功能选择寄存器(AFRH和AFRL).

这样,STM32F4每组IO有10个32位寄存器控制,其中常用的有4个配置寄存器+2个数据寄存器+2个复用功能选择寄存器,共8个。

各个寄存器介绍

1.MODER寄存器,该寄存器是GPIO端口模式控制寄存器,用于控制GPIOx(STM32F4最多有9组IO,x=A/B/C/D/E/F/G/H/I)的工作模式。
MODERy[1:0]:端口x配置位(y=0~15)这些位通过软件写入,用于配置I/O方向模式。

00:输入(复位状态)

01: 通用输出模式

10: 复用功能模式

11:模拟模式

该寄存器各位在复位后,一般都是0(个别不是0,比如JTAG占用的几个IO口),也就是在默认状态下是输入状态的。每组IO下有16个IO口,该寄存器共32位,每两个控制一个IO,位31:16 保留,必须保持复位值。

2.OSPEEDR寄存器,该寄存器用于控制GPIOx的输出速度。(输出模式)复位时,寄存器值一般为0.

00: 2MHz(低速)

01: 25MHz(中速)

10: 50MHz(快速)

11: 30pF时为100MHz(高速)(15pF时为80MHz输出(最大速度))

3.PUPDR寄存器,用于控制GPIOx的上拉/下拉。复位后,寄存器值为0.

00: 无上拉/下拉

01: 上拉

10: 下拉

11: 保留

4.ODR寄存器,用于设置某个IO输出低电平(ODRy=0)还是高电平(ODRy=1),该寄存器也仅在输出模式下有效,在输入模式下(MODER[1:0])不起作用.

5.IDR寄存器,用于读取GPIOx的输入,用于读取某个IO的电平,如果对应的位为0,则说明该IO输入的是低电平

6.OTYPER寄存器,在输入模式不起作用,低16位有效。

0: 输出推挽(复位状态)

1: 输出开漏

7.AFRL和AFRH,是用来设置IO引脚复用和映射的,STM32F4每个IO引脚通过一个复用器连接到板载外设,该复用器一次仅允许一个外设的复用功能(AF)连接到IO引脚,AFRL控制0…7这8个IO口,AFRH控制8…15这8个IO口。4个位控制一个IO。

0000: AF0

1111: AF15

8.BSRR寄存器是端口位设置/清除寄存器,BSRR低16位用于设置GPIO口对应位输出高电平,高16位用于设置GPIO口对应位输出低电平.

void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
{
  /* Check the parameters */
  assert_param(IS_GPIO_PIN(GPIO_Pin));
  assert_param(IS_GPIO_PIN_ACTION(PinState));

  if(PinState != GPIO_PIN_RESET)
  {
    GPIOx->BSRR = GPIO_Pin;
  }
  else
  {
    GPIOx->BSRR = (uint32_t)GPIO_Pin << 16U;
  }
}

STM32F4的IO的8种模式

4种输入模式
1.GPIO_Mode_IN_FLOATING 浮空输入

MCU直接读取I/O电平,I/O电平状态不确定,完全由外部输入决定

2.GPIO_Mode_IPU 上拉输入

IO内部接上拉电阻,此时如果IO口外部没有信号输入或引脚悬空,IO默认为高电平,如果要大电流还是要外部上拉

3.GPIO_Mode_IPD 下拉输入

IO内部接上拉电阻,没有外部信号或引脚悬空,IO默认为低电平

4.GPIO_Mode_AIN 模拟输入

当位于模拟输入配置下,通过数模转换,转换成模拟信号,CPU不能在"输入数据寄存器"上读到有效数据.

4种输出模式

1.GPIO_Mode_OUT_OD 开漏输出

2.GPIO_Mode_AF_OD 复用开漏输出

3.GPIO_Mode_OUT_PP 推挽输出

4.GPIO_Mode_AF_PP 复用推挽输出

开漏输出:可以输出强低电平,高电平得靠外部电阻拉高

推挽输出:可以输出强高低电平.

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值