0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

LL库中常见关键字__STATIC_INLINE

冬至子 来源:ITRelief 作者:Sachefgh Xu 2023-07-24 11:30 次阅读

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
收藏 人收藏

    评论

    相关推荐

    static 关键字

    static 关键字 浅析
    发表于 01-16 16:55

    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

    在C语言中关键字static的作用是什么

    在C语言中关键字static的作用是什么?用预处理指令#define 声明一个函数,输入天数得到有多少秒?
    发表于 12-24 06:53

    关于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 10:44 0次下载
    java中<b class='flag-5'>static</b>的作用及<b class='flag-5'>常见</b>的误区

    java中static关键字的作用

    列举了一些面试笔试中常见的关于static的考题。 以下是本文的目录大纲: 一.static关键字的用途 二.static
    发表于 09-27 17:12 0次下载

    C语言关键字static有哪些绝妙用途

    为什么要说static妙,它确实是妙,在软件开发或者单片机开发过程中,大家总以为static就是一个静态变量,在变量类型的前面加上就自动清0了,还有就是加上static关键字的,不管是
    发表于 07-18 17:38 1次下载
    C语言<b class='flag-5'>关键字</b><b class='flag-5'>static</b>有哪些绝妙用途

    static关键字的三种用法

    变量(StaticVariables):在C语言中,使用`static`关键字来声明静态变量是一种常见的用法,它具有以下主要作用:1.生存期延长:静态变量的生存期在程序的整个运行期间,而不仅仅是在声明它的函数调用期间。这意味着静
    的头像 发表于 11-10 08:00 251次阅读
    <b class='flag-5'>static</b><b class='flag-5'>关键字</b>的三种用法