LL库中常见关键字__STATIC_INLINE

电子说

1.3w人已加入

描述

LL库中常见关键字__STATIC_INLINE,其定义见cmsis_gcc.h:

#ifndef   __ASM
  #define __ASM                 __asm
#endif
#ifndef   __INLINE
  #define __INLINE             inline
#endif
#ifndef   __STATIC_INLINE
  #define __STATIC_INLINE      static inline
#endif

关于一些宏定义:

#define SET_BIT(REG, BIT)     ((REG) |= (BIT))

#define CLEAR_BIT(REG, BIT)   ((REG) &= ~(BIT))

#define READ_BIT(REG, BIT)    ((REG) & (BIT))

#define CLEAR_REG(REG)        ((REG) = (0x0))

#define WRITE_REG(REG, VAL)   ((REG) = (VAL))

#define READ_REG(REG)         ((REG))

#define MODIFY_REG(REG, CLEARMASK, SETMASK)  WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK)))

#define POSITION_VAL(VAL)     (__CLZ(__RBIT(VAL)))

(一)GPIO

文件:stm32fxxx_ll_gpio.h ; stm32fxxx_ll_gpio.c

GPIO

1.引脚初始化结构体 LL_GPIO_InitTypeDef

typedef struct
{
  uint32_t Pin; /*
  指定引脚 ,Pin =  LL_GPIO_PIN_x   x为引脚号或ALL;
  可以进行位操作
  例:LL_GPIO_PIN_1 | LL_GPIO_PIN_2
*/
  uint32_t Mode;/*
  五种模式可选:
  LL_GPIO_MODE_ANALOG     Analog模式
  LL_GPIO_MODE_FLOATING   引脚浮空(Reset_State)模式
  LL_GPIO_MODE_INPUT      输入模式
  LL_GPIO_MODE_OUTPUT     输出模式
  LL_GPIO_MODE_ALTERNATE  复用功能模式
  */
  uint32_t Speed; /*
  输出变换速度选择(输出模式时):
  LL_GPIO_MODE_OUTPUT_10MHz或LL_GPIO_SPEED_FREQ_MEDIUM   10MHz
  LL_GPIO_MODE_OUTPUT_2MHz或LL_GPIO_SPEED_FREQ_LOW       2MHz
  LL_GPIO_MODE_OUTPUT_50MHz或LL_GPIO_SPEED_FREQ_HIGH     50MHz
  */
  uint32_t OutputType;/*
  引脚配置为输出时:
  LL_GPIO_OUTPUT_PUSHPULL    推挽输出
  LL_GPIO_OUTPUT_OPENDRAIN   开漏输出
  */
  uint32_t Pull;/*
  上/下拉电阻:
  LL_GPIO_PULL_DOWN    下拉电阻使能
  LL_GPIO_PULL_UP      上拉电阻使能
  */
} LL_GPIO_InitTypeDef;

相关函数1:

/*定义USE_FULL_LL_DRIVER后可用*/

ErrorStatus LL_GPIO_Init(GPIO_TypeDef *GPIOx, LL_GPIO_InitTypeDef *GPIO_InitStruct);/*
初始化选中的GPIO; GPIOx=GPIOA,GPIOB...;成功返回ErrorStatus.SUCCESS*/
ErrorStatus LL_GPIO_DeInit(GPIO_TypeDef *GPIOx);/*
恢复默认引脚配置(整组引脚);成功返回ErrorStatus.SUCCESS*/
void LL_GPIO_StructInit(LL_GPIO_InitTypeDef *GPIO_InitStruct);/*
重设选择的LL_GPIO_InitTypeDef类型结构*/

/*********返回值ErrorStatus*********/
typedef enum
{
  SUCCESS = 0U,
  ERROR = !SUCCESS
} ErrorStatus;

相关函数2: 这些函数被static修饰,位于.h文件中。

__STATIC_INLINE void LL_GPIO_SetPinMode(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Mode);/*
配置引脚模式。 ※只能指定一个引脚
*/
__STATIC_INLINE uint32_t LL_GPIO_GetPinMode(GPIO_TypeDef *GPIOx, uint32_t Pin);/*
读取引脚模式信息,返回值为上面五种模式 ※只能指定一个引脚
*/
__STATIC_INLINE void LL_GPIO_SetPinSpeed(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t  Speed)/*
配置速度 ※只能指定一个引脚
*/
__STATIC_INLINE uint32_t LL_GPIO_GetPinSpeed(GPIO_TypeDef *GPIOx, uint32_t Pin);/*
读取引脚速度信息,返回值为三种速度变换模式 ※只能指定一个引脚
*/
__STATIC_INLINE void LL_GPIO_SetPinOutputType(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t OutputType);/*
配置输出模式  ※可以位或设置多个引脚
*/
__STATIC_INLINE uint32_t LL_GPIO_GetPinOutputType(GPIO_TypeDef *GPIOx, uint32_t Pin);/*
读取引脚输出模式。※只能指定一个引脚
*/
__STATIC_INLINE void LL_GPIO_SetPinPull(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Pull);/*
设置上拉/下拉 ※只能指定一个引脚
*/
__STATIC_INLINE uint32_t LL_GPIO_GetPinPull(GPIO_TypeDef *GPIOx, uint32_t Pin);/*
获取上/下拉状况 ※只能指定一个引脚
*/

锁定引脚:锁定模式配置,锁定的引脚经重启后方能更改。此功能不常用。

__STATIC_INLINE void LL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint32_t Pin);/*
锁定选中引脚。可位或同时选择多个引脚
*/
__STATIC_INLINE uint32_t LL_GPIO_IsPinLocked(GPIO_TypeDef *GPIOx, uint32_t PinMask);/*
多个引脚。当任一选中引脚锁定时返回 1
*/
__STATIC_INLINE uint32_t LL_GPIO_IsAnyPinLocked(GPIO_TypeDef *GPIOx);/*
与 LL_GPIO_IsPinLocked(GPIO_TypeDef *GPIOx, LL_GPIO_PIN_ALL)等效
*/

函数3:

//输出&输入关键函数

__STATIC_INLINE uint32_t LL_GPIO_ReadInputPort(GPIO_TypeDef *GPIOx);/*
  读取输入电平信息
  读输入寄存器IDR
*/
__STATIC_INLINE void LL_GPIO_WriteOutputPort(GPIO_TypeDef *GPIOx,uint32_t PortValue);/*
  控制引脚输出高/低电平
  写输出寄存器ODR
*/
__STATIC_INLINE uint32_t LL_GPIO_ReadOutputPort(GPIO_TypeDef *GPIOx);/*
  读取输出电平配置
  读输出寄存器ODR
*//****************************************/
__STATIC_INLINE void LL_GPIO_SetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask);/*
  将选中的一个/多个引脚电平置高
*/
__STATIC_INLINE void LL_GPIO_ResetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask);/*
  将选中的一个/多个引脚电平置低
*/
__STATIC_INLINE void LL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint32_t PinMask);/*
  将选中的一个/多个引脚电平反转
*/

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分