0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

LL庫中常見關(guān)鍵字__STATIC_INLINE

冬至子 ? 來源:ITRelief ? 作者:Sachefgh Xu ? 2023-07-24 11:30 ? 次閱讀

LL庫中常見關(guān)鍵字__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

關(guān)于一些宏定義:

#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.引腳初始化結(jié)構(gòu)體 LL_GPIO_InitTypeDef

typedef struct
{
  uint32_t Pin; /*
  指定引腳 ,Pin =  LL_GPIO_PIN_x   x為引腳號或ALL;
  可以進(jìn)行位操作
  例: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  復(fù)用功能模式
  */
  uint32_t Speed; /*
  輸出變換速度選擇(輸出模式時(shí)):
  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;/*
  引腳配置為輸出時(shí):
  LL_GPIO_OUTPUT_PUSHPULL    推挽輸出
  LL_GPIO_OUTPUT_OPENDRAIN   開漏輸出
  */
  uint32_t Pull;/*
  上/下拉電阻:
  LL_GPIO_PULL_DOWN    下拉電阻使能
  LL_GPIO_PULL_UP      上拉電阻使能
  */
} LL_GPIO_InitTypeDef;

相關(guān)函數(shù)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);/*
恢復(fù)默認(rèn)引腳配置(整組引腳);成功返回ErrorStatus.SUCCESS*/
void LL_GPIO_StructInit(LL_GPIO_InitTypeDef *GPIO_InitStruct);/*
重設(shè)選擇的LL_GPIO_InitTypeDef類型結(jié)構(gòu)*/

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

相關(guān)函數(shù)2: 這些函數(shù)被static修飾,位于.h文件中。

__STATIC_INLINE void LL_GPIO_SetPinMode(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Mode);/*
配置引腳模式。 ※只能指定一個(gè)引腳
*/
__STATIC_INLINE uint32_t LL_GPIO_GetPinMode(GPIO_TypeDef *GPIOx, uint32_t Pin);/*
讀取引腳模式信息,返回值為上面五種模式 ※只能指定一個(gè)引腳
*/
__STATIC_INLINE void LL_GPIO_SetPinSpeed(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t  Speed)/*
配置速度 ※只能指定一個(gè)引腳
*/
__STATIC_INLINE uint32_t LL_GPIO_GetPinSpeed(GPIO_TypeDef *GPIOx, uint32_t Pin);/*
讀取引腳速度信息,返回值為三種速度變換模式 ※只能指定一個(gè)引腳
*/
__STATIC_INLINE void LL_GPIO_SetPinOutputType(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t OutputType);/*
配置輸出模式  ※可以位或設(shè)置多個(gè)引腳
*/
__STATIC_INLINE uint32_t LL_GPIO_GetPinOutputType(GPIO_TypeDef *GPIOx, uint32_t Pin);/*
讀取引腳輸出模式?!荒苤付ㄒ粋€(gè)引腳
*/
__STATIC_INLINE void LL_GPIO_SetPinPull(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Pull);/*
設(shè)置上拉/下拉 ※只能指定一個(gè)引腳
*/
__STATIC_INLINE uint32_t LL_GPIO_GetPinPull(GPIO_TypeDef *GPIOx, uint32_t Pin);/*
獲取上/下拉狀況 ※只能指定一個(gè)引腳
*/

鎖定引腳:鎖定模式配置,鎖定的引腳經(jīng)重啟后方能更改。此功能不常用。

__STATIC_INLINE void LL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint32_t Pin);/*
鎖定選中引腳。可位或同時(shí)選擇多個(gè)引腳
*/
__STATIC_INLINE uint32_t LL_GPIO_IsPinLocked(GPIO_TypeDef *GPIOx, uint32_t PinMask);/*
多個(gè)引腳。當(dāng)任一選中引腳鎖定時(shí)返回 1
*/
__STATIC_INLINE uint32_t LL_GPIO_IsAnyPinLocked(GPIO_TypeDef *GPIOx);/*
與 LL_GPIO_IsPinLocked(GPIO_TypeDef *GPIOx, LL_GPIO_PIN_ALL)等效
*/

函數(shù)3:

//輸出&輸入關(guān)鍵函數(shù)

__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);/*
  將選中的一個(gè)/多個(gè)引腳電平置高
*/
__STATIC_INLINE void LL_GPIO_ResetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask);/*
  將選中的一個(gè)/多個(gè)引腳電平置低
*/
__STATIC_INLINE void LL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint32_t PinMask);/*
  將選中的一個(gè)/多個(gè)引腳電平反轉(zhuǎn)
*/

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 上拉電阻
    +關(guān)注

    關(guān)注

    5

    文章

    356

    瀏覽量

    30515
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5271

    瀏覽量

    119654
  • 變換器
    +關(guān)注

    關(guān)注

    17

    文章

    2081

    瀏覽量

    109030
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1182

    瀏覽量

    51739
  • STM32單片機(jī)
    +關(guān)注

    關(guān)注

    58

    文章

    549

    瀏覽量

    58558
收藏 人收藏

    評論

    相關(guān)推薦

    inline關(guān)鍵字被優(yōu)化導(dǎo)致此類函數(shù)被布局在flash內(nèi),怎么處理?

    問題解決。 但是,希望樂鑫官方把idf內(nèi)源碼中的inline關(guān)鍵詞都替換為__attribute((always_inline)),因?yàn)?b class='flag-5'>inline
    發(fā)表于 06-21 12:03

    static 關(guān)鍵字

    static 關(guān)鍵字 淺析
    發(fā)表于 01-16 16:55

    C語言關(guān)鍵字static,volatile,const,extern,return含義及作用?

    C語言關(guān)鍵字static,volatile,const,extern,return含義及作用?static 函數(shù)分為內(nèi)部函數(shù)和外部函數(shù)當(dāng)一個(gè)源程序由多個(gè)源文件組成時(shí),C語言根據(jù)函數(shù)能否被其它源文件
    發(fā)表于 09-15 20:18

    請求指教關(guān)于MDK5中unknow type name “__STATIC_INLINE”的解決方法

    消除這個(gè)錯(cuò)誤。不知道如何解決,跪求各路高手指教。而且,奇怪的是每次打開這個(gè)CMSIS_ARMCC.H文件都會(huì)出現(xiàn)不一樣的錯(cuò)誤。但是所有錯(cuò)誤都和“__STATIC_INLINE”相關(guān)。具體報(bào)錯(cuò)提示
    發(fā)表于 11-27 21:18

    關(guān)鍵字static的作用是什么

    嵌入式面經(jīng)1.關(guān)鍵字static的作用是什么2.關(guān)鍵字const是什么含意?3.const和宏定義的區(qū)別4.關(guān)鍵字volatile有什么含意 并給出三個(gè)不同的例子。5.引用和指針有什么
    發(fā)表于 11-09 07:23

    嵌入式程序員常見的const、static、volatile關(guān)鍵字

    開發(fā)中,const、static、volatile都是很常見的,我們嵌入式程序員需要熟知這三個(gè)關(guān)鍵字的恰當(dāng)用法。下面是我參照網(wǎng)路上的大咖,大牛的博文,然后做一些代碼測試,撰寫一下自己的體會(huì)。歡迎大家一...
    發(fā)表于 12-21 06:08

    在C語言中關(guān)鍵字static的作用是什么

    在C語言中關(guān)鍵字static的作用是什么?用預(yù)處理指令#define 聲明一個(gè)函數(shù),輸入天數(shù)得到有多少秒?
    發(fā)表于 12-24 06:53

    關(guān)于LL的”LL_AHB1_GRP1_EnableClock”函數(shù)問題求解

    關(guān)于 LL_AHB1_GRP1_EnableClock,在函數(shù)中設(shè)置位后,將其讀取為“tmprg”并轉(zhuǎn)換為 void 類型。讀書的理由是什么? __STATIC_INLINE void
    發(fā)表于 12-27 06:01

    單片機(jī)C語言中常用到的關(guān)鍵字及數(shù)據(jù)類型

    單片機(jī)C語言中常用到的關(guān)鍵字及數(shù)據(jù)類型。
    發(fā)表于 11-03 10:57 ?13次下載

    java中static的作用及常見的誤區(qū)

    一.static關(guān)鍵字的用途 二.static關(guān)鍵字的誤區(qū) 三。常見的筆試面試題 一.static
    發(fā)表于 09-27 10:44 ?0次下載
    java中<b class='flag-5'>static</b>的作用及<b class='flag-5'>常見</b>的誤區(qū)

    java中static關(guān)鍵字的作用

    列舉了一些面試筆試中常見的關(guān)于static的考題。 以下是本文的目錄大綱: 一.static關(guān)鍵字的用途 二.static
    發(fā)表于 09-27 17:12 ?0次下載

    嵌入式C語言必須要用的4個(gè)關(guān)鍵字和它的詳細(xì)資料概述

    1.static關(guān)鍵字 這個(gè)關(guān)鍵字前面也有提到,它的作用是強(qiáng)大的。 要對static關(guān)鍵字深入了解,首先需要掌握標(biāo)準(zhǔn)C程序的組成。
    的頭像 發(fā)表于 07-05 10:20 ?7021次閱讀

    C語言關(guān)鍵字static有哪些絕妙用途

    為什么要說static妙,它確實(shí)是妙,在軟件開發(fā)或者單片機(jī)開發(fā)過程中,大家總以為static就是一個(gè)靜態(tài)變量,在變量類型的前面加上就自動(dòng)清0了,還有就是加上static關(guān)鍵字的,不管是
    發(fā)表于 07-18 17:38 ?1次下載
    C語言<b class='flag-5'>關(guān)鍵字</b><b class='flag-5'>static</b>有哪些絕妙用途

    JAVA語言中Static關(guān)鍵字使用

    注:為解決安卓開發(fā)中服務(wù)器IP隨機(jī)變化導(dǎo)致客戶端找不到服務(wù)器的問題,通過關(guān)鍵字Static修飾成員變量User_url,通過客戶端主函數(shù)代碼獲取輸入的服務(wù)器IP值賦值給User_url,然后其它Activity即可使用該靜態(tài)變量值,從而正確找到服務(wù)器。
    的頭像 發(fā)表于 06-04 16:45 ?431次閱讀
    JAVA語言中<b class='flag-5'>Static</b><b class='flag-5'>關(guān)鍵字</b>使用

    static關(guān)鍵字的三種用法

    變量(StaticVariables):在C語言中,使用`static`關(guān)鍵字來聲明靜態(tài)變量是一種常見的用法,它具有以下主要作用:1.生存期延長:靜態(tài)變量的生存期在程序的整個(gè)運(yùn)行期間,而不僅僅是在聲明它的函數(shù)調(diào)用期間。這意味著靜
    的頭像 發(fā)表于 11-10 08:00 ?460次閱讀
    <b class='flag-5'>static</b><b class='flag-5'>關(guān)鍵字</b>的三種用法