关于STM32 CubeMX LL库中没有读取单个引脚电平的函数

STM32CubeMX生成的LL库居然没有标准库中读取单个引脚电平的函数
标准库中例如:
GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
这两个函数可以直接读取某个引脚的电平,很方便。但是偏偏LL库里没有这两个函数
关于STM32 CubeMX LL库中没有读取单个引脚电平的函数_第1张图片
只有读取所有端口的函数。
·
想要读取单个引脚电平,我想了2种实现方式

方法① 使用类似标准库的实现方式

关于STM32 CubeMX LL库中没有读取单个引脚电平的函数_第2张图片
标准库是通过if语句判断,可以仿照LL库的格式命名一个LL_GPIO_ReadOutputPin的函数:

__STATIC_INLINE uint32_t LL_GPIO_ReadOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask)
{
  if (READ_BIT(GPIOx->ODR, PinMask) != PinMask)
  {
   return (uint32_t)SET;
  }
  else
  {
   return (uint32_t)RESET;
 }
}

方法② 使用类似LL库的实现方式

if 语句效率较低,不符合LL库的高优化的思想,所以可以仿照LL库思想来写一个

__STATIC_INLINE uint32_t LL_GPIO_ReadOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask)
{
	 return ((READ_BIT(GPIOx->ODR, PinMask) == (PinMask)) ? 1UL : 0UL);
}

两种方法都可以,本质是利用LL库里自带读寄存器某一位函数实现READ_BIT(REG, BIT)
明明就两句话的事,不知道为什么LL库没有LL_GPIO_ReadOutputPin()这种函数

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