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;
相關函數(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);/*
恢復默認引腳配置(整組引腳);成功返回ErrorStatus.SUCCESS*/
void LL_GPIO_StructInit(LL_GPIO_InitTypeDef *GPIO_InitStruct);/*
重設選擇的LL_GPIO_InitTypeDef類型結構*/
/*********返回值ErrorStatus*********/
typedef enum
{
SUCCESS = 0U,
ERROR = !SUCCESS
} ErrorStatus;
相關函數(shù)2: 這些函數(shù)被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)等效
*/
函數(shù)3:
//輸出&輸入關鍵函數(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);/*
將選中的一個/多個引腳電平置高
*/
__STATIC_INLINE void LL_GPIO_ResetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask);/*
將選中的一個/多個引腳電平置低
*/
__STATIC_INLINE void LL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint32_t PinMask);/*
將選中的一個/多個引腳電平反轉
*/
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
上拉電阻
+關注
關注
5文章
359瀏覽量
30573 -
寄存器
+關注
關注
31文章
5318瀏覽量
120015 -
變換器
+關注
關注
17文章
2087瀏覽量
109140 -
GPIO
+關注
關注
16文章
1196瀏覽量
51919 -
STM32單片機
+關注
關注
59文章
549瀏覽量
58647
發(fā)布評論請先 登錄
相關推薦
inline關鍵字被優(yōu)化導致此類函數(shù)被布局在flash內,怎么處理?
問題解決。
但是,希望樂鑫官方把idf內源碼中的inline關鍵詞都替換為__attribute((always_inline)),因為inline
發(fā)表于 06-21 12:03
C語言關鍵字中static,volatile,const,extern,return含義及作用?
C語言關鍵字中static,volatile,const,extern,return含義及作用?static 函數(shù)分為內部函數(shù)和外部函數(shù)當一個源程序由多個源文件組成時,C語言根據函數(shù)能否被其它源文件
發(fā)表于 09-15 20:18
請求指教關于MDK5中unknow type name “__STATIC_INLINE”的解決方法
消除這個錯誤。不知道如何解決,跪求各路高手指教。而且,奇怪的是每次打開這個CMSIS_ARMCC.H文件都會出現(xiàn)不一樣的錯誤。但是所有錯誤都和“__STATIC_INLINE”相關。具體報錯提示
發(fā)表于 11-27 21:18
關鍵字static的作用是什么
嵌入式面經1.關鍵字static的作用是什么2.關鍵字const是什么含意?3.const和宏定義的區(qū)別4.關鍵字volatile有什么含意 并給出三個不同的例子。5.引用和指針有什么
發(fā)表于 11-09 07:23
嵌入式程序員常見的const、static、volatile關鍵字
開發(fā)中,const、static、volatile都是很常見的,我們嵌入式程序員需要熟知這三個關鍵字的恰當用法。下面是我參照網路上的大咖,大牛的博文,然后做一些代碼測試,撰寫一下自己的體會。歡迎大家一...
發(fā)表于 12-21 06:08
在C語言中關鍵字static的作用是什么
在C語言中關鍵字static的作用是什么?用預處理指令#define 聲明一個函數(shù),輸入天數(shù)得到有多少秒?
發(fā)表于 12-24 06:53
關于LL庫的”LL_AHB1_GRP1_EnableClock”函數(shù)問題求解
關于 LL_AHB1_GRP1_EnableClock,在函數(shù)中設置位后,將其讀取為“tmprg”并轉換為 void 類型。讀書的理由是什么? __STATIC_INLINE void
發(fā)表于 12-27 06:01
java中static的作用及常見的誤區(qū)
一.static關鍵字的用途 二.static關鍵字的誤區(qū) 三。常見的筆試面試題 一.static
發(fā)表于 09-27 10:44
?0次下載
java中static關鍵字的作用
列舉了一些面試筆試中常見的關于static的考題。 以下是本文的目錄大綱: 一.static關鍵字的用途 二.static
發(fā)表于 09-27 17:12
?0次下載
嵌入式C語言必須要用的4個關鍵字和它的詳細資料概述
1.static關鍵字
這個關鍵字前面也有提到,它的作用是強大的。
要對static關鍵字深入了解,首先需要掌握標準C程序的組成。
C語言關鍵字static有哪些絕妙用途
為什么要說static妙,它確實是妙,在軟件開發(fā)或者單片機開發(fā)過程中,大家總以為static就是一個靜態(tài)變量,在變量類型的前面加上就自動清0了,還有就是加上static關鍵字的,不管是
發(fā)表于 07-18 17:38
?1次下載
JAVA語言中Static關鍵字使用
注:為解決安卓開發(fā)中服務器IP隨機變化導致客戶端找不到服務器的問題,通過關鍵字Static修飾成員變量User_url,通過客戶端主函數(shù)代碼獲取輸入的服務器IP值賦值給User_url,然后其它Activity即可使用該靜態(tài)變量值,從而正確找到服務器。
static關鍵字的三種用法
變量(StaticVariables):在C語言中,使用`static`關鍵字來聲明靜態(tài)變量是一種常見的用法,它具有以下主要作用:1.生存期延長:靜態(tài)變量的生存期在程序的整個運行期間,而不僅僅是在聲明它的函數(shù)調用期間。這意味著靜
評論