ST官方库函数之GPIO口读写函数

GPIO口读写函数有如下8个;

uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

这几个函数结构比较简单,一个个来看

uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
  uint8_t bitstatus = 0x00;
 
  if ((GPIOx->IDR & GPIO_Pin) != (uint32_t)Bit_RESET)
  {
    bitstatus = (uint8_t)Bit_SET;
  }
  else
  {
    bitstatus = (uint8_t)Bit_RESET;
  }
  return bitstatus;
}

此函数为读取GPIO端口输入寄存器IDR某一位的状态,返回一个8位的值;

uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx)
{
  
  return ((uint16_t)GPIOx->IDR);
}

此函数为读取一组GPIO端口输入寄存器IDR的值,返回一个16位的值;

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

此函数为读取GPIO端口输出寄存器ODR某一位的状态,返回一个8位的值;

uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx)
{
  return ((uint16_t)GPIOx->ODR);
}

此函数为读取一组GPIO端口输出寄存器ODR的值,返回一个16位的值;

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
  
  GPIOx->BSRR = GPIO_Pin;
}

此函数为对GPIO端口某一位进行置位操作,通过BSRR寄存器实现;

void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
   GPIOx->BRR = GPIO_Pin;
}

此函数为对GPIO端口某一位进行复位操作,通过BRR寄存器实现;

void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal)
{
    
  if (BitVal != Bit_RESET)
  {
    GPIOx->BSRR = GPIO_Pin;
  }
  else
  {
    GPIOx->BRR = GPIO_Pin;
  }
}

此函数为对GPIO端口某一位进行写操作,输入参数有3个值,其中参数BitVal可为整型值0或者1,

其中关于BitAction,见如下定义typedef enum
{ Bit_RESET = 0,
  Bit_SET
}BitAction;

void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal)
{
    GPIOx->ODR = PortVal;
}

此函数为对某一组GPIO口进行写操作,输入参数PortVal为一个16位的值,同过直接操作ODR寄存器来实现

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值