电子说
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
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);/*
将选中的一个/多个引脚电平反转
*/
全部0条评论
快来发表一下你的评论吧 !