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

来源:互联网 发布:js思维导图插件 编辑:程序博客网 时间:2024/06/14 18:08

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寄存器来实现