STM32通过寄存器来控制GPIO

一、输出配置

前言:为什么要介绍寄存器来控制I/O口呢,我们在平常时序操作时会用到GPIO,调用库函数去控制不仅显得代码冗长且可能造成响应时间变长,所以了解一下寄存器操作IO口是有必要的。 

1.端口输出数据寄存器(GPIOx_ODR) (x=A..E)

STM32通过寄存器来控制GPIO_第1张图片此寄存器也可以实现对GPIO的控制,例如想控制GPIOC的13口置0(为第一行)

当然,也能实现对GPIO的读操作,第二行;

GPIOC->ODR = 0xef;
temp = GPIOC->ODR;

可以发现对于ODR寄存器操作必须以16位的形式进行。

对于ODR的读可以发现库函数对于读取输出IO口状态用到了此寄存器:

uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
  uint8_t bitstatus = 0x00;
  /* Check the parameters */
  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  assert_param(IS_GET_GPIO_PIN(GPIO_Pin)); 
  
  if ((GPIOx->ODR & GPIO_Pin) != (uint32_t)Bit_RESET)
  {
    bitstatus = (uint8_t)Bit_SET;
  }
  else
  {
    bitstatus = (uint8_t)Bit_RESET;
  }
  return bitstatus;
}

 2.端口位设置/清除寄存器(GPIOx_BSRR) (x=A..E)

STM32通过寄存器来控制GPIO_第2张图片

BSRR是一个32位的寄存器,为端口的置1或清0寄存器,低16位的作

你可能感兴趣的:(STM32,stm32,嵌入式硬件,单片机)