色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

HAL庫GPIO輸入模式在cubemx中的配置

jf_L18yujSQ ? 來源:小飛哥玩嵌入式 ? 作者:小飛哥玩嵌入式 ? 2022-11-02 09:33 ? 次閱讀

HAL庫GPIO輸入模式在cubemx中的配置

上節課程介紹了GPIO輸出模式的配置,包括修改IO標簽,選擇GPIO模式、GPIO上下拉等,本節輸入模式有很多相同之處,節省時間,小飛哥就簡單介紹一下

GPIO選擇與配置

依然是先來看看我們的Alios 開發板上的按鍵硬件連接,總共有3個用戶按鍵,分別掛在GPIOE11、GPIOE14和GPIOE10上,連接方式采用的是低電平有效,也即是,按鍵按下之后,MCU檢測到的電平為低電平,松開之后檢測為高電平,外部上拉電阻4.7K2dfb7494-5a43-11ed-a3b6-dac502259ad0.png2e12674e-5a43-11ed-a3b6-dac502259ad0.png接下來,我們只需要在cubemx對這3個GPIO進行配置即可,工程在上一節內容上繼續添加,打開上一節的cubemx工程,選擇PE14引腳,選擇引腳模式為輸入模式2e490ace-5a43-11ed-a3b6-dac502259ad0.png然后修改標簽為USR_KEY2,其他兩個按鍵一樣的配置方法,3個按鍵配置完成之后如下圖所示:2e5ccc76-5a43-11ed-a3b6-dac502259ad0.png接下來依然是對GPIO的模式、配置進行修改,這里需要注意一點就是GPIO的上下拉配置,不要瞎選,這個一定是跟硬件相關的,比如本次硬件設計,空閑時是保持高電平的,那么配置上拉是比較合適的,但是呢,此時外部已經有了上拉電阻,我們內部上拉就不是很有必要了,也可以配置為不上拉也不下拉,但是配置為下拉一定是不合適的,可能會引起信號的誤動作,功耗的增加等不必要的麻煩,所以說,cubemx配置只是為你減輕了重復性搬運工作,電路工作原理必須了然于胸,選擇最為合適的配置2e83dc62-5a43-11ed-a3b6-dac502259ad0.png配置比較簡單,我們此次采用的是輪詢獲取GPIO狀態的方法來實現按鍵,當然也可以采用外部中斷的方式,對于普通按鍵來講,不是很有必要,輪詢GPIO狀態即可

HAL庫GPIO輸入模式操作詳解與結構介紹

接下來,我們生成代碼即可2ea319ec-5a43-11ed-a3b6-dac502259ad0.png打開工程之后,我們發現上一節配置的輸出IO和這一節的輸入IO是放在一起的,cubemx生成代碼的規則是把同一類外設統一放在相應的模塊初始化代碼中,宏定義統一放在main.h中如果能夠接受這個布局的話是沒有問題的,如果不能還是比較麻煩的2ecb7b8a-5a43-11ed-a3b6-dac502259ad0.png2f2a6686-5a43-11ed-a3b6-dac502259ad0.png輸入模式相關的GPIO API也比較少,只涉及到關于GPIO操作的API:

/*Initializationandde-initializationfunctions*****************************/
voidHAL_GPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_Init);
voidHAL_GPIO_DeInit(GPIO_TypeDef*GPIOx,uint32_tGPIO_Pin);

/**
*@}
*/

/**@addtogroupGPIO_Exported_Functions_Group2IOoperationfunctions
*@{
*/

/*IOoperationfunctions*****************************************************/
GPIO_PinStateHAL_GPIO_ReadPin(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin);

如何使用呢?

參數GPIO_TypeDef *GPIOx可以是GPIO組的地址:

#defineGPIOA((GPIO_TypeDef*)GPIOA_BASE)
#defineGPIOB((GPIO_TypeDef*)GPIOB_BASE)
#defineGPIOC((GPIO_TypeDef*)GPIOC_BASE)
#defineGPIOD((GPIO_TypeDef*)GPIOD_BASE)
#defineGPIOE((GPIO_TypeDef*)GPIOE_BASE)
#defineGPIOF((GPIO_TypeDef*)GPIOF_BASE)
#defineGPIOG((GPIO_TypeDef*)GPIOG_BASE)
#defineGPIOH((GPIO_TypeDef*)GPIOH_BASE)
#defineGPIOI((GPIO_TypeDef*)GPIOI_BASE)
參數GPIO_Pin可以是GPIO的引腳號:

#defineGPIO_PIN_0((uint16_t)0x0001)/*Pin0selected*/
#defineGPIO_PIN_1((uint16_t)0x0002)/*Pin1selected*/
#defineGPIO_PIN_2((uint16_t)0x0004)/*Pin2selected*/
#defineGPIO_PIN_3((uint16_t)0x0008)/*Pin3selected*/
#defineGPIO_PIN_4((uint16_t)0x0010)/*Pin4selected*/
#defineGPIO_PIN_5((uint16_t)0x0020)/*Pin5selected*/
#defineGPIO_PIN_6((uint16_t)0x0040)/*Pin6selected*/
#defineGPIO_PIN_7((uint16_t)0x0080)/*Pin7selected*/
#defineGPIO_PIN_8((uint16_t)0x0100)/*Pin8selected*/
#defineGPIO_PIN_9((uint16_t)0x0200)/*Pin9selected*/
#defineGPIO_PIN_10((uint16_t)0x0400)/*Pin10selected*/
#defineGPIO_PIN_11((uint16_t)0x0800)/*Pin11selected*/
#defineGPIO_PIN_12((uint16_t)0x1000)/*Pin12selected*/
#defineGPIO_PIN_13((uint16_t)0x2000)/*Pin13selected*/
#defineGPIO_PIN_14((uint16_t)0x4000)/*Pin14selected*/
#defineGPIO_PIN_15((uint16_t)0x8000)/*Pin15selected*/
#defineGPIO_PIN_All((uint16_t)0xFFFF)/*Allpinsselected*/

輸入模式返回值為獲取到的GPIO狀態,也即是高低電平狀態,在沒有按鍵按下的時候,返回GPIO_PIN_SET,按鍵按下時候,返回GPIO_PIN_SET

@endverbatim
*@{
*/

/**
*@briefReadthespecifiedinputportpin.
*@paramGPIOxwherexcanbe(A..H)toselecttheGPIOperipheralforSTM32L4family
*@paramGPIO_Pinspecifiestheportbittoread.
*ThisparametercanbeanycombinationofGPIO_Pin_xwherexcanbe(0..15).
*@retvalTheinputportpinvalue.
*/
GPIO_PinStateHAL_GPIO_ReadPin(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin)
{
GPIO_PinStatebitstatus;

/*Checktheparameters*/
assert_param(IS_GPIO_PIN(GPIO_Pin));

if((GPIOx->IDR&GPIO_Pin)!=0x00u)
{
bitstatus=GPIO_PIN_SET;
}
else
{
bitstatus=GPIO_PIN_RESET;
}
returnbitstatus;
}

GPIO輸入模式的簡單測試

接下來在之前led的任務中,對按鍵狀態進行測試,這里涉及到按鍵的消抖,所謂“消抖”就是:2f53b0a4-5a43-11ed-a3b6-dac502259ad0.png當檢測到按鍵狀態變化時,不是立即去響應動作,而是先等待閉合或斷開穩定后再進行處理。即為按鍵消抖按鍵消抖:可分為硬件消抖和軟件消抖。

硬件消抖就是在按鍵上并聯一個電容,如圖 8-11 所示,利用電容的充放電特性來對抖動過程中產生的電壓毛刺進行平滑處理,從而實現消抖。

但實際應用中,這種方式的效果往往不是很好,而且還增加了成本和電路復雜度,所以實際中使用的并不多。絕大多數情況下,我們是用軟件即程序來實現消抖的

延時消抖

最簡單的消抖原理,就是當檢測到按鍵狀態變化后,先等待一個 10ms 左右的延時時間,讓抖動消失后再進行一次按鍵狀態檢測,如果與剛才檢測到的狀態相同,就可以確認按鍵已經穩定的動作了

staticvoidrt_led1_flash_entry(void*parameter)
{
for(;;)
{
if(!HAL_GPIO_ReadPin(USR_KEY1_GPIO_Port,USR_KEY1_Pin))
{
rt_thread_mdelay(100);
if(!HAL_GPIO_ReadPin(USR_KEY1_GPIO_Port,USR_KEY1_Pin))//消抖
{
rt_kprintf("Key1ispresseded!
");
}
}
if(!HAL_GPIO_ReadPin(USR_KEY2_GPIO_Port,USR_KEY2_Pin))
{
rt_thread_mdelay(100);
if(!HAL_GPIO_ReadPin(USR_KEY2_GPIO_Port,USR_KEY2_Pin))//消抖
{
rt_kprintf("Key2ispresseded!
");
}
}
if(!HAL_GPIO_ReadPin(USR_KEY3_GPIO_Port,USR_KEY3_Pin))
{
rt_thread_mdelay(100);
if(!HAL_GPIO_ReadPin(USR_KEY3_GPIO_Port,USR_KEY3_Pin))//消抖
{
rt_kprintf("Key3ispresseded!
");
}
}
}
}

測試結果:2f9441fa-5a43-11ed-a3b6-dac502259ad0.png

324fdfbc-5a43-11ed-a3b6-dac502259ad0.png

多功能按鍵移植

上面是簡單的按鍵狀態獲取,實際中,一個項目可能按鍵有限但同時又要實現復雜的功能切換,那么按鍵的功能如果很單一的話,就不能夠滿足需求,接下來,小飛哥帶大家一起移植一個很不錯的多功能按鍵框架,代碼來源是github的jiejieTop

源碼地址:GitHub - jiejieTop/ButtonDrive: 純C語言實現的一個按鍵驅動,可移植性強,支持單雙擊、連按、連按釋放、長按;采用回調處理按鍵事件(自定義消抖時間),使用只需3步,1:創建按鍵,2:按鍵事件與回調處理函數鏈接映射。然后周期檢查按鍵。326db8b6-5a43-11ed-a3b6-dac502259ad0.png我們下載源碼進行移植,把文件夾里面的這些文件,我們移植到自己的文件目錄,下載文件中包含的main.c中是一個完整的按鍵初始化,實現,大家可以看看就知道如何使用了3296d3c2-5a43-11ed-a3b6-dac502259ad0.png32b0e5e6-5a43-11ed-a3b6-dac502259ad0.png下面小飛哥就帶大家來看看如何移植到自己的系統里面

![e7d83ed083514e07e330211e338b33b7.png](en-resource://datab331bf5d4-5a43-11ed-a3b6-dac502259ad0.png可以把memset,printff替換為rt-thread的驅動,當然也可以不關注341080c2-5a43-11ed-a3b6-dac502259ad0.png3426be6e-5a43-11ed-a3b6-dac502259ad0.png重新編譯一下,剛才的警告已經消失了345549e6-5a43-11ed-a3b6-dac502259ad0.png然后我們看看如何實現這個多功能按鍵:

先來看看一些配置項宏定義,位域、結構體、回調函數,面向對象的一套東西都在,是很適合學習的,有關于短按、長按、單擊、雙擊等等的配置,我們根據自己的需要配置即可

#defineBTN_NAME_MAX32//名字最大為32字節

/*按鍵消抖時間40ms,建議調用周期為20ms
只有連續檢測到40ms狀態不變才認為有效,包括彈起和按下兩種事件
*/

#defineCONTINUOS_TRIGGER0//是否支持連續觸發,連發的話就不要檢測單雙擊與長按了

/*是否支持單擊&雙擊同時存在觸發,如果選擇開啟宏定義的話,單雙擊都回調,只不過單擊會延遲響應,
因為必須判斷單擊之后是否觸發了雙擊否則,延遲時間是雙擊間隔時間 BUTTON_DOUBLE_TIME。
而如果不開啟這個宏定義,建議工程中只存在單擊/雙擊中的一個,否則,在雙擊響應的時候會觸發一次單擊,
因為雙擊必須是有一次按下并且釋放之后才產生的*/
#defineSINGLE_AND_DOUBLE_TRIGGER1

/*是否支持長按釋放才觸發,如果打開這個宏定義,那么長按釋放之后才觸發單次長按,
否則在長按指定時間就一直觸發長按,觸發周期由BUTTON_LONG_CYCLE決定*/
#defineLONG_FREE_TRIGGER0

#defineBUTTON_DEBOUNCE_TIME2//消抖時間(n-1)*調用周期
#defineBUTTON_CONTINUOS_CYCLE1//連按觸發周期時間(n-1)*調用周期
#defineBUTTON_LONG_CYCLE1//長按觸發周期時間(n-1)*調用周期
#defineBUTTON_DOUBLE_TIME20//雙擊間隔時間(n-1)*調用周期建議在200-600ms
#defineBUTTON_LONG_TIME50/*持續n秒((n-1)*調用周期ms),認為長按事件*/

#defineTRIGGER_CB(event)
if(btn->CallBack_Function[event])
btn->CallBack_Function[event]((Button_t*)btn)

typedefvoid(*Button_CallBack)(void*);/*按鍵觸發回調函數,需要用戶實現*/



typedefenum{
BUTTON_DOWM=0,
BUTTON_UP,
BUTTON_DOUBLE,
BUTTON_LONG,
BUTTON_LONG_FREE,
BUTTON_CONTINUOS,
BUTTON_CONTINUOS_FREE,
BUTTON_ALL_RIGGER,
number_of_event,/*觸發回調的事件*/
NONE_TRIGGER
}Button_Event;

/*
每個按鍵對應1個全局的結構體變量。
其成員變量是實現濾波和多種按鍵狀態所必須的
*/
typedefstructbutton
{
/*下面是一個函數指針,指向判斷按鍵手否按下的函數*/
uint8_t(*Read_Button_Level)(void);/*讀取按鍵電平函數,需要用戶實現*/

charName[BTN_NAME_MAX];

uint8_tButton_State:4;/*按鍵當前狀態(按下還是彈起)*/
uint8_tButton_Last_State:4;/*上一次的按鍵狀態,用于判斷雙擊*/
uint8_tButton_Trigger_Level:2;/*按鍵觸發電平*/
uint8_tButton_Last_Level:2;/*按鍵當前電平*/

uint8_tButton_Trigger_Event;/*按鍵觸發事件,單擊,雙擊,長按等*/

Button_CallBackCallBack_Function[number_of_event];

uint8_tButton_Cycle;/*連續按鍵周期*/

uint8_tTimer_Count;/*計時*/
uint8_tDebounce_Time;/*消抖時間*/

uint8_tLong_Time;/*按鍵按下持續時間*/

structbutton*Next;

}Button_t;

然后看看如何使用API,我們只需要實現GPIO的狀態獲取、創建按鍵對象、編寫回調函數即可,在任務中輪詢按鍵狀態,移植起來是非常方便的

#defineKEY_ON0
/*Privatemacro-------------------------------------------------------------*/

/*Privatevariables---------------------------------------------------------*/
Button_tButton1;
/*Privatefunctionprototypes-----------------------------------------------*/
staticuint8_trt_read_key1(void)
{
returnHAL_GPIO_ReadPin(USR_KEY1_GPIO_Port,USR_KEY1_Pin);
}

staticvoidBtn1_Dowm_CallBack(void*btn)
{
PRINT_INFO("Button1單擊!");
}

staticvoidBtn1_Double_CallBack(void*btn)
{
PRINT_INFO("Button1雙擊!");
}

staticvoidBtn1_Long_CallBack(void*btn)
{
PRINT_INFO("Button1長按!");
}

staticvoidBtn1_Continuos_CallBack(void*btn)
{
PRINT_INFO("Button1連按!");
}
staticvoidBtn1_ContinuosFree_CallBack(void*btn)
{
PRINT_INFO("Button1連按釋放!");
}
/*Privateusercode---------------------------------------------------------*/

/**
*@functionrt_ledflash_entry
*@author:小飛哥玩嵌入式-小飛哥
*@TODO:LED控制線程
*@param:
*@return:NULL
*/
staticvoidrt_led1_flash_entry(void*parameter)
{

Button_Create("Button1",
&Button1,
rt_read_key1,
KEY_ON);
Button_Attach(&Button1,BUTTON_DOWM,Btn1_Dowm_CallBack);//單擊
Button_Attach(&Button1,BUTTON_DOUBLE,Btn1_Double_CallBack);//雙擊
Button_Attach(&Button1,BUTTON_CONTINUOS,Btn1_Continuos_CallBack);//連按
Button_Attach(&Button1,BUTTON_CONTINUOS_FREE,Btn1_ContinuosFree_CallBack);//連按釋放
Button_Attach(&Button1,BUTTON_LONG,Btn1_Long_CallBack);

for(;;)
{

Button_Process();//需要周期調用按鍵處理函數
rt_thread_mdelay(20);
//if(!HAL_GPIO_ReadPin(USR_KEY1_GPIO_Port,USR_KEY1_Pin))
//{
//rt_thread_mdelay(100);
//if(!HAL_GPIO_ReadPin(USR_KEY1_GPIO_Port,USR_KEY1_Pin))//消抖
//{
//rt_kprintf("Key1ispresseded!
");
//}
//}
//if(!HAL_GPIO_ReadPin(USR_KEY2_GPIO_Port,USR_KEY2_Pin))
//{
//rt_thread_mdelay(100);
//if(!HAL_GPIO_ReadPin(USR_KEY2_GPIO_Port,USR_KEY2_Pin))//消抖
//{
//rt_kprintf("Key2ispresseded!
");
//}
//}
//if(!HAL_GPIO_ReadPin(USR_KEY3_GPIO_Port,USR_KEY3_Pin))
//{
//rt_thread_mdelay(100);
//if(!HAL_GPIO_ReadPin(USR_KEY3_GPIO_Port,USR_KEY3_Pin))//消抖
//{
//rt_kprintf("Key3ispresseded!
");
//}
//}
}

}

來看一下測試效果:348f5564-5a43-11ed-a3b6-dac502259ad0.png

審核編輯:彭靜
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 硬件
    +關注

    關注

    11

    文章

    3312

    瀏覽量

    66200
  • GPIO
    +關注

    關注

    16

    文章

    1204

    瀏覽量

    52052
  • 低電平
    +關注

    關注

    1

    文章

    115

    瀏覽量

    13269

原文標題:03-HAL庫GPIO輸入與多功能按鍵實現

文章出處:【微信號:小飛哥玩嵌入式,微信公眾號:小飛哥玩嵌入式】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    HALGPIOcubemx配置及注意事項

    上節課程我們介紹了cubemx的界面、時鐘配置以及如何新建工程等,本節咱們就繼續進行程序員屆的“hello world”-“點燈”。
    的頭像 發表于 10-19 09:10 ?1620次閱讀

    使用STM32 HAL進行GPIO控制的實例

    基于STM32微控制器的嵌入式系統開發GPIO(GeneralPurposeInput/Output)控制是其中最基本、最常見的操作之一。通過使用STM32的HAL
    的頭像 發表于 12-21 15:22 ?3419次閱讀

    使用CUBEMX配置hal輸入捕獲

    之前有使用標準配置的,具體可以看我之前的博客這個項目是使用CUBEMX配置hal來寫,相
    發表于 01-06 07:23

    STM32CubeMXHAL對F103和F411的GPIO配置和使用方法

    文章目錄STM32CubeMX第一章GPIO前言一、GPIO的工作模式二、使用步驟1.引入庫2.讀入數據總結前言??本文使用STM32CubeMX
    發表于 01-26 06:28

    STM32CubeMX 配置STM32F407 實現HAL延時微妙方案

    STM32CubeMX 配置STM32F407 實現HAL延時微妙方案
    發表于 11-24 20:51 ?20次下載
    STM32<b class='flag-5'>CubeMX</b> <b class='flag-5'>配置</b>STM32F407 實現<b class='flag-5'>HAL</b><b class='flag-5'>庫</b>延時微妙方案

    基于hal的stm32f411re的GPIO輸出模式下電平的讀取

    基于hal的stm32f411re的GPIO輸出模式下電平的讀取1.硬件的配置GPIO的參數
    發表于 11-29 16:06 ?5次下載
    基于<b class='flag-5'>hal</b><b class='flag-5'>庫</b>的stm32f411re的<b class='flag-5'>GPIO</b>輸出<b class='flag-5'>模式</b>下電平的讀取

    STM32CubeMX應用教程 第一章 GPIO

    ???Nucleo-F411RE文章目錄STM32CubeMX第一章 GPIO前言一、GPIO的工作模式二、使用步驟1.引入庫2.讀入數據總結前言??本文使用STM32
    發表于 12-02 13:51 ?9次下載
    STM32<b class='flag-5'>CubeMX</b>應用教程 第一章 <b class='flag-5'>GPIO</b>

    HALGPIO八種工作模式

    眾所周知,STM32的GPIO的工作模式有八種,但是打開HAL發現,有12可以供自己設置。先不要懵,下面解釋一下這12種工作
    發表于 12-05 13:06 ?8次下載
    <b class='flag-5'>HAL</b><b class='flag-5'>庫</b>的<b class='flag-5'>GPIO</b>八種工作<b class='flag-5'>模式</b>

    【STM32】標準HAL對照學習教程三--使用庫函數配置GPIO點亮LED燈

    【STM32】標準HAL對照學習教程三--使用庫函數配置GPIO點亮LED燈一、前言二、準備工作三、LED硬件電路四、使用標準
    發表于 12-05 14:06 ?15次下載
    【STM32】標準<b class='flag-5'>庫</b>與<b class='flag-5'>HAL</b><b class='flag-5'>庫</b>對照學習教程三--使用庫函數<b class='flag-5'>配置</b><b class='flag-5'>GPIO</b>點亮LED燈

    00_STM32F4學習_HAL_GPIO函數

    00_STM32F4學習_HAL_GPIO函數最近重學STM32,打算從HAL+STM32CubeM
    發表于 12-05 14:21 ?12次下載
    00_STM32F4學習_<b class='flag-5'>HAL</b><b class='flag-5'>庫</b>_<b class='flag-5'>GPIO</b>函數

    STM32 CubeMX+HAL基本操作

    STM32 CubeMX+HAL基本操作
    發表于 12-07 11:21 ?50次下載
    STM32 <b class='flag-5'>CubeMX+HAL</b><b class='flag-5'>庫</b>基本操作

    基于STM32CubeMX——HAL開發的串口通訊(DMA模式

    的是F103R6Tx的芯片。然后第一步選擇SYS里面的debug模式,如果用HAL不進行SWD或JTAG配置,單片機只能進行下載一次程序,要進行第二次或更多次程序下載,需要按復位鍵(
    發表于 12-24 18:48 ?13次下載
    基于STM32<b class='flag-5'>CubeMX</b>——<b class='flag-5'>HAL</b><b class='flag-5'>庫</b>開發的串口通訊(DMA<b class='flag-5'>模式</b>)

    STM32 HAL CubeMX教程(五)串口通信基礎

    STM32 HAL CubeMX教程(五)串口通信基礎串口通信簡介CubeMX配置初始化程序分析程序編寫UART: 通用異步收發傳輸器(U
    發表于 12-24 18:49 ?12次下載
    STM32 <b class='flag-5'>HAL</b><b class='flag-5'>庫</b> <b class='flag-5'>CubeMX</b>教程(五)串口通信基礎

    STM32 HAL CUBEMX配置 ADC采集

    提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔文章目錄STM32 HAL CUBEMX配置 ADC采集軟硬件型號1.單通道不定時任意時刻采集信號
    發表于 12-27 18:57 ?25次下載
    STM32 <b class='flag-5'>HAL</b><b class='flag-5'>庫</b> <b class='flag-5'>CUBEMX</b><b class='flag-5'>配置</b> ADC采集

    【STM32】標準HAL對照學習教程特別篇--GPIO詳講

    【STM32】SMT32標準HAL對照學習教程特別篇--GPIO詳講一、前言二、GPIO簡介1、定義2、分類3、復用三、
    發表于 01-13 16:12 ?12次下載
    【STM32】標準<b class='flag-5'>庫</b>與<b class='flag-5'>HAL</b><b class='flag-5'>庫</b>對照學習教程特別篇--<b class='flag-5'>GPIO</b>詳講
    主站蜘蛛池模板: 大肥婆丰满大肥奶bbw肥| 亚洲精品久久久无码| 中文字幕在线视频网站| 国产色播视频在线观看| 三级色视频| ping色堂| 欧美高跟镣铐bdsm视频| 97伦理97伦理2018最新| 久久久久综合一本久道| 亚洲午夜精品A片久久WWW软件| 国产免国产免费| 无码专区无码专区视频网网址| 国产99久久九九精品无码不卡| 日本护士喷水| 成人午夜剧场| 三级黄色小视频| 贵妃高h荡肉呻吟np杨玉环| 日韩娇小性hd| 俄罗斯人与动ZOZ0| 色噜噜狠狠色综合中文字幕| 儿子你得太大了慢点插| 色戒西瓜视频| 国产精品青青草原app大全| 午夜AV亚洲一码二中文字幕青青| 国产精品人妻无码久久久蜜桃臀| 午夜黄视频| 国产在线精品亚洲第一区| 亚洲精品无码午夜福利在线观看| 国产综合自拍 偷拍在线| 亚洲精品无码午夜福利在线观看| 精品国产免费第一区二区| 亚洲综合小说久久另类区| 久久久久久久久性潮| 最新高清无码专区| 嫩草国产精品99国产精品| oldgrand欧洲老妇人| 善良的小峓子2在钱免费中文字| 国产成人精品免费视频大全可播放的 | 青柠在线观看免费播放电影| 芭乐视频网页版在线观看| 色婷婷AV国产精品欧美毛片|