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);/*
将选中的一个/多个引脚电平反转
*/
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
上拉电阻
+关注
关注
5文章
346浏览量
30259 -
寄存器
+关注
关注
30文章
5032浏览量
117741 -
变换器
+关注
关注
17文章
2027浏览量
108399 -
GPIO
+关注
关注
16文章
1135浏览量
50578 -
STM32单片机
+关注
关注
58文章
545浏览量
57936
发布评论请先 登录
相关推荐
C语言关键字专题
,相当于BOOKstruct book .如果你觉得你懂了,那么下面这个把BOOK,代表的是什么意思呢?此时的BOOK是一个具体的变量 相当于咱们上面的mybook一样的啦四、static关键字
发表于 10-24 16:38
C语言关键字中static,volatile,const,extern,return含义及作用?
C语言关键字中static,volatile,const,extern,return含义及作用?static 函数分为内部函数和外部函数当一个源程序由多个源文件组成时,C语言根据函数能否被其它源文件
发表于 09-15 20:18
【NUCLEO-L476RG LL库开发】STM32【LL库】开发使用指南
_RCC_SetAPB2Prescaler(LL_RCC_APB2_DIV_1);LL_Init1msTick(80000000);LL_SetSystemCoreClock(80000000);} 函数声明为__
发表于 07-02 03:03
请求指教关于MDK5中unknow type name “__STATIC_INLINE”的解决方法
消除这个错误。不知道如何解决,跪求各路高手指教。而且,奇怪的是每次打开这个CMSIS_ARMCC.H文件都会出现不一样的错误。但是所有错误都和“__STATIC_INLINE”相关。具体报错提示
发表于 11-27 21:18
嵌入式软件编程中关键字的用法和原理
,但是某些关键字,例如const、static、extern和volatile等,在不同的场合具有不同的含义,而且某些用法晦涩难懂,为此本文详细介绍这些关键字的用法及其背后的原理。
发表于 06-20 07:37
关键字static主要用于哪几个方面
关键字static主要用于两个方面:1.变量2.函数1.变量1.1 局部变量1.1.1 普通局部变量1)函数内部,不用static修饰的变量;2)编译器不对变量赋初值,除非显示赋值;3)存储在进程栈
发表于 07-15 06:54
关键字static的作用是什么
嵌入式面经1.关键字static的作用是什么2.关键字const是什么含意?3.const和宏定义的区别4.关键字volatile有什么含意 并给出三个不同的例子。5.引用和指针有什么
发表于 11-09 07:23
嵌入式程序员常见的const、static、volatile关键字
开发中,const、static、volatile都是很常见的,我们嵌入式程序员需要熟知这三个关键字的恰当用法。下面是我参照网路上的大咖,大牛的博文,然后做一些代码测试,撰写一下自己的体会。欢迎大家一...
发表于 12-21 06:08
关于LL库的”LL_AHB1_GRP1_EnableClock”函数问题求解
关于 LL_AHB1_GRP1_EnableClock,在函数中设置位后,将其读取为“tmprg”并转换为 void 类型。读书的理由是什么? __STATIC_INLINE void
发表于 12-27 06:01
java中static关键字的作用
列举了一些面试笔试中常见的关于static的考题。 以下是本文的目录大纲: 一.static关键字的用途 二.static
发表于 09-27 17:12
•0次下载
C语言关键字static有哪些绝妙用途
为什么要说static妙,它确实是妙,在软件开发或者单片机开发过程中,大家总以为static就是一个静态变量,在变量类型的前面加上就自动清0了,还有就是加上static关键字的,不管是
发表于 07-18 17:38
•1次下载
static关键字的三种用法
变量(StaticVariables):在C语言中,使用`static`关键字来声明静态变量是一种常见的用法,它具有以下主要作用:1.生存期延长:静态变量的生存期在程序的整个运行期间,而不仅仅是在声明它的函数调用期间。这意味着静
评论