STM32通过寄存器来控制GPIO

本文详细介绍了如何通过GPIO的ODR、BSRR、BRR寄存器进行I/O口的控制,包括输出数据、位设置/清除和位清除操作。同时讲解了输入配置的IDR寄存器以及端口配置寄存器CRL和CRH的使用,帮助理解并优化嵌入式系统的时序操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、输出配置

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

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

此寄存器也可以实现对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)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值