衡阳派盒市场营销有限公司

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

    文章

    363

    瀏覽量

    30732
  • 寄存器
    +關注

    關注

    31

    文章

    5363

    瀏覽量

    121169
  • 變換器
    +關注

    關注

    17

    文章

    2109

    瀏覽量

    109550
  • GPIO
    +關注

    關注

    16

    文章

    1216

    瀏覽量

    52379
  • STM32單片機
    +關注

    關注

    59

    文章

    549

    瀏覽量

    58822
收藏 人收藏

    評論

    相關推薦

    inline關鍵字被優化導致此類函數被布局在flash內,怎么處理?

    問題解決。 但是,希望樂鑫官方把idf內源碼中的inline關鍵詞都替換為__attribute((always_inline)),因為inline
    發表于 06-21 12:03

    static 關鍵字

    static 關鍵字 淺析
    發表于 01-16 16:55

    C語言關鍵字static,volatile,const,extern,return含義及作用?

    C語言關鍵字static,volatile,const,extern,return含義及作用?static 函數分為內部函數和外部函數當一個源程序由多個源文件組成時,C語言根據函數能否被其它源文件
    發表于 09-15 20:18

    請求指教關于MDK5中unknow type name “__STATIC_INLINE”的解決方法

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

    關鍵字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

    單片機C語言中常用到的關鍵字及數據類型

    單片機C語言中常用到的關鍵字及數據類型。
    發表于 11-03 10:57 ?13次下載

    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語言必須要用的4個關鍵字和它的詳細資料概述

    1.static關鍵字 這個關鍵字前面也有提到,它的作用是強大的。 要對static關鍵字深入了解,首先需要掌握標準C程序的組成。
    的頭像 發表于 07-05 10:20 ?7129次閱讀

    C語言關鍵字static有哪些絕妙用途

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

    JAVA語言中Static關鍵字使用

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

    static關鍵字的三種用法

    變量(StaticVariables):在C語言中,使用`static`關鍵字來聲明靜態變量是一種常見的用法,它具有以下主要作用:1.生存期延長:靜態變量的生存期在程序的整個運行期間,而不僅僅是在聲明它的函數調用期間。這意味著靜
    的頭像 發表于 11-10 08:00 ?580次閱讀
    <b class='flag-5'>static</b><b class='flag-5'>關鍵字</b>的三種用法
    百家乐官网公式软件| 威尼斯人娱乐的微博| 百家乐智能投注系统| e世博百家乐娱乐场| 新葡京百家乐现金| 网上百家乐作弊不| 澳门百家乐常赢打法| 买百家乐程序| 劳力士百家乐的玩法技巧和规则| 悦榕庄百家乐的玩法技巧和规则| 百家乐便利| 大发888游戏平台 送1688元礼金领取lrm| 大发888移动版| 博彩游戏| 云顶平台| 娱乐城百家乐官网打不开| 百家乐官网智能投注系统| 百家乐官网策略网络游戏信誉怎么样 | 利来博彩通| 波音百家乐官网现金网| 新奥博百家乐官网娱乐城| 百家乐官网扑| 百家乐电投网址| 百家乐透明发牌机| 沙龙百家乐娱乐城| 大发888真人 新浪微群| 亚洲博彩网| 百家乐官网庄河闲的赌法| 澳门档百家乐官网的玩法技巧和规则| 24楼层风水| 百家乐赌场视屏| 大发888黄金版| 百家乐官网赌博怎么玩| 百家乐官网路珠多少钱| 关于百家乐概率的书| 威尼斯人娱乐城 104| 利记娱乐场| 百家乐官网网络真人斗地主| 永利博百家乐现金网| 大发888 真钱娱乐平台| 百家乐连锁|