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

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

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

3天內不再提示

HAL庫GPIO在cubemx中的配置及注意事項

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

本節內容介紹

1、HAL庫GPIO在cubemx中的配置及注意事項;

2、HAL庫GPIO操作詳解與結構介紹;

3、rt-thread任務介紹與創建;

4、利用多任務點燈,實現rtos多任務創建于執行;

HAL庫GPIO在cubemx中的配置

上節課程我們介紹了cubemx的界面、時鐘配置以及如何新建工程等,本節咱們就繼續進行程序員屆的“hello world”-“點燈”。

GPIO選擇與配置

嵌入式軟件工程師拿到板子第一件事要做的一定是熟悉原理圖,你可以不會設計,但一定要能看懂,軟件工程師調試代碼,一看原理圖,二才是寫代碼、調試代碼

先來看看開發板上的LED是哪個引腳,可以看到PB6、PE3、PD15都是LED控制引腳,采用的是灌電流的方式,低電平燈亮:

3f40004e-4f44-11ed-a3b6-dac502259ad0.png

接下來,咱們在cubemx對這些IO進行配置,小飛哥只選擇了兩個LED燈,名字命名和原理圖保持一致或者是按照實際功能命名

3f7a31ce-4f44-11ed-a3b6-dac502259ad0.png

右擊選擇第一個選項,就可以修改label3fbfab64-4f44-11ed-a3b6-dac502259ad0.png

單擊選中,會有很多功能,MCU的一個引腳是可以復用為許多功能的,我們根據自己的需要配置對應的模式即可,此處我們控制LED燈,低電平-燈亮,高電平-燈滅,顯然是要配置為輸出模式的,選擇output即可,其他輸出引腳同理

3ff62b76-4f44-11ed-a3b6-dac502259ad0.png

接下來我們來看下GPIO的一些模式配置

403c2374-4f44-11ed-a3b6-dac502259ad0.png

對于開發板上的LED控制引腳,我們可以按照如下配置,初始化輸出高電平,LED不開啟,這樣初始化就可以設置GPIO輸出電平,設置為需要的狀態:

4086a9bc-4f44-11ed-a3b6-dac502259ad0.png

GPIO配置比較簡單,就不再啰嗦了

HAL庫GPIO操作詳解與結構介紹

打開生成的代碼,看看上面配置的GPIO初始化內容,上面cubemx的配置項可以看到已經生成對應的代碼了,GPIO的配置順序:使能GPIO時鐘->配置相關采參數

voidMX_GPIO_Init(void)
{

GPIO_InitTypeDefGPIO_InitStruct={0};

/*GPIOPortsClockEnable*/
__HAL_RCC_GPIOE_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOH_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();

/*ConfigureGPIOpinOutputLevel*/
HAL_GPIO_WritePin(Y_LED_GPIO_Port,Y_LED_Pin,GPIO_PIN_RESET);

/*ConfigureGPIOpinOutputLevel*/
HAL_GPIO_WritePin(CP_LED_GPIO_Port,CP_LED_Pin,GPIO_PIN_RESET);

/*ConfigureGPIOpin:PtPin*/
GPIO_InitStruct.Pin=Y_LED_Pin;
GPIO_InitStruct.Mode=GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull=GPIO_NOPULL;
GPIO_InitStruct.Speed=GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(Y_LED_GPIO_Port,&GPIO_InitStruct);

/*ConfigureGPIOpin:PtPin*/
GPIO_InitStruct.Pin=CP_LED_Pin;
GPIO_InitStruct.Mode=GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull=GPIO_NOPULL;
GPIO_InitStruct.Speed=GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(CP_LED_GPIO_Port,&GPIO_InitStruct);

}

關于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);
voidHAL_GPIO_WritePin(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin,GPIO_PinStatePinState);
voidHAL_GPIO_TogglePin(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin);
HAL_StatusTypeDefHAL_GPIO_LockPin(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin);
voidHAL_GPIO_EXTI_IRQHandler(uint16_tGPIO_Pin);
voidHAL_GPIO_EXTI_Callback(uint16_tGPIO_Pin);

本節由于是LED操作,我們只需要操作:

voidHAL_GPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_Init);
voidHAL_GPIO_WritePin(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin,GPIO_PinStatePinState);
voidHAL_GPIO_TogglePin(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_PinState PinState可以是:
/**
*@briefGPIOBitSETandBitRESETenumeration
*/
typedefenum
{
GPIO_PIN_RESET=0U,
GPIO_PIN_SET
}GPIO_PinState;

輸出低電平:

/*ConfigureGPIOpinOutputLevel*/
HAL_GPIO_WritePin(Y_LED_GPIO_Port,Y_LED_Pin,GPIO_PIN_RESET);

/*ConfigureGPIOpinOutputLevel*/
HAL_GPIO_WritePin(CP_LED_GPIO_Port,CP_LED_Pin,GPIO_PIN_RESET);

輸出高電平:

/*ConfigureGPIOpinOutputLevel*/
HAL_GPIO_WritePin(Y_LED_GPIO_Port,Y_LED_Pin,GPIO_PIN_SET);

/*ConfigureGPIOpinOutputLevel*/
HAL_GPIO_WritePin(CP_LED_GPIO_Port,CP_LED_Pin,GPIO_PIN_SET);

翻轉電平:

HAL_GPIO_TogglePin(Y_LED_GPIO_Port,Y_LED_Pin);
HAL_GPIO_TogglePin(CP_LED_GPIO_Port,CP_LED_Pin);

關于GPIO輸出不外乎這幾個API,掌握如何使用就可以了

rt-thread任務介紹與創建

主要摘取一些比較關鍵的信息,也可參見RT-Thread官網介紹

線程管理

嵌入式系統執行這樣的任務,系統通過傳感器采集數據,并通過顯示屏將數據顯示出來,在多線程實時系統中,可以將這個任務分解成兩個子任務,如下圖所示,一個子任務不間斷地讀取傳感器數據,并將數據寫到共享內存中,另外一個子任務周期性的從共享內存中讀取數據,并將傳感器數據輸出到顯示屏上。40b5042e-4f44-11ed-a3b6-dac502259ad0.png

在 RT-Thread 中,與上述子任務對應的程序實體就是線程,線程是實現任務的載體,它是 RT-Thread 中最基本的調度單位,它描述了一個任務執行的運行環境,也描述了這個任務所處的優先等級,重要的任務可設置相對較高的優先級,非重要的任務可以設置較低的優先級,不同的任務還可以設置相同的優先級,輪流運行。

線程狀態

線程運行的過程中,同一時間內只允許一個線程在處理器中運行,從運行的過程上劃分,線程有多種不同的運行狀態,如初始狀態、掛起狀態、就緒狀態等。在 RT-Thread 中,線程包含五種狀態,操作系統會自動根據它運行的情況來動態調整它的狀態。RT-Thread 中線程的五種狀態,如下表所示:

狀態 描述
初始狀態 當線程剛開始創建還沒開始運行時就處于初始狀態;在初始狀態下,線程不參與調度。此狀態在 RT-Thread 中的宏定義為 RT_THREAD_INIT
就緒狀態 在就緒狀態下,線程按照優先級排隊,等待被執行;一旦當前線程運行完畢讓出處理器,操作系統會馬上尋找最高優先級的就緒態線程運行。此狀態在 RT-Thread 中的宏定義為 RT_THREAD_READY
運行狀態 線程當前正在運行。在單核系統中,只有 rt_thread_self() 函數返回的線程處于運行狀態;在多核系統中,可能就不止這一個線程處于運行狀態。此狀態在 RT-Thread 中的宏定義為 RT_THREAD_RUNNING
掛起狀態 也稱阻塞態。它可能因為資源不可用而掛起等待,或線程主動延時一段時間而掛起。在掛起狀態下,線程不參與調度。此狀態在 RT-Thread 中的宏定義為 RT_THREAD_SUSPEND
關閉狀態 當線程運行結束時將處于關閉狀態。關閉狀態的線程不參與線程的調度。此狀態在 RT-Thread 中的宏定義為 RT_THREAD_CLOSE

線程狀態切換

RT-Thread 提供一系列的操作系統調用接口,使得線程的狀態在這五個狀態之間來回切換。幾種狀態間的轉換關系如下圖所示:

40c6425c-4f44-11ed-a3b6-dac502259ad0.png

線程優先級

RT-Thread 線程的優先級是表示線程被調度的優先程度。每個線程都具有優先級,線程越重要,賦予的優先級就應越高,線程被調度的可能才會越大。

RT-Thread 最大支持 256 個線程優先級 (0~255),數值越小的優先級越高,0 為最高優先級。在一些資源比較緊張的系統中,可以根據實際情況選擇只支持 8 個或 32 個優先級的系統配置;對于 ARM Cortex-M 系列,普遍采用 32 個優先級。最低優先級默認分配給空閑線程使用,用戶一般不使用。在系統中,當有比當前線程優先級更高的線程就緒時,當前線程將立刻被換出,高優先級線程搶占處理器運行。

時間片

每個線程都有時間片這個參數,但時間片僅對優先級相同的就緒態線程有效。系統對優先級相同的就緒態線程采用時間片輪轉的調度方式進行調度時,時間片起到約束線程單次運行時長的作用,其單位是一個系統節拍(OS Tick),詳見《時鐘管理》章節。假設有 2 個優先級相同的就緒態線程 A 與 B,A 線程的時間片設置為 10,B 線程的時間片設置為 5,那么當系統中不存在比 A 優先級高的就緒態線程時,系統會在 A、B 線程間來回切換執行,并且每次對 A 線程執行 10 個節拍的時長,對 B 線程執行 5 個節拍的時長,如下圖。

41087154-4f44-11ed-a3b6-dac502259ad0.png

線程通過調用函數 rt_thread_create/init() 進入到初始狀態(RT_THREAD_INIT);

初始狀態的線程通過調用函數 rt_thread_startup() 進入到就緒狀態(RT_THREAD_READY);

就緒狀態的線程被調度器調度后進入運行狀態(RT_THREAD_RUNNING);當處于運行狀態的線程調用 rt_thread_delay(),rt_sem_take(),rt_mutex_take(),rt_mb_recv() 等函數或者獲取不到資源時,將進入到掛起狀態(RT_THREAD_SUSPEND);

處于掛起狀態的線程,如果等待超時依然未能獲得資源或由于其他線程釋放了資源,那么它將返回到就緒狀態。掛起狀態的線程,如果調用 rt_thread_delete/detach() 函數,將更改為關閉狀態(RT_THREAD_CLOSE);

而運行狀態的線程,如果運行結束,就會在線程的最后部分執行 rt_thread_exit() 函數,將狀態更改為關閉狀態。

線程相關的API

創建和刪除線程

一個線程要成為可執行的對象,就必須由操作系統的內核來為它創建一個線程。可以通過如下的接口創建一個動態線程:

rt_thread_trt_thread_create(constchar*name,
void(*entry)(void*parameter),
void*parameter,
rt_uint32_tstack_size,
rt_uint8_tpriority,
rt_uint32_ttick);

調用這個函數時,系統會從動態堆內存中分配一個線程句柄以及按照參數中指定的棧大小從動態堆內存中分配相應的空間。分配出來的棧空間是按照 rtconfig.h 中配置的 RT_ALIGN_SIZE 方式對齊。線程創建 rt_thread_create() 的參數和返回值見下圖:

41173c8e-4f44-11ed-a3b6-dac502259ad0.png

對于一些使用 rt_thread_create() 創建出來的線程,當不需要使用,或者運行出錯時,我們可以使用下面的函數接口來從系統中把線程完全刪除掉:

rt_err_trt_thread_delete(rt_thread_tthread);
4163103c-4f44-11ed-a3b6-dac502259ad0.png

初始化和脫離線程

線程的初始化可以使用下面的函數接口完成,來初始化靜態線程對象:

rt_err_trt_thread_init(structrt_thread*thread,
constchar*name,
void(*entry)(void*parameter),void*parameter,
void*stack_start,rt_uint32_tstack_size,
rt_uint8_tpriority,rt_uint32_ttick);

靜態線程的線程句柄(或者說線程控制塊指針)、線程棧由用戶提供。靜態線程是指線程控制塊、線程運行棧一般都設置為全局變量,在編譯時就被確定、被分配處理,內核不負責動態分配內存空間。需要注意的是,用戶提供的棧首地址需做系統對齊(例如 ARM 上需要做 4 字節對齊)。線程初始化接口 rt_thread_init() 的參數和返回值見下表:

417ab426-4f44-11ed-a3b6-dac502259ad0.png

對于用 rt_thread_init() 初始化的線程,使用 rt_thread_detach() 將使線程對象在線程隊列和內核對象管理器中被脫離。線程脫離函數如下:

rt_err_trt_thread_detach(rt_thread_tthread);
41b0b6b6-4f44-11ed-a3b6-dac502259ad0.png

啟動線程

創建(初始化)的線程狀態處于初始狀態,并未進入就緒線程的調度隊列,我們可以在線程初始化 / 創建成功后調用下面的函數接口讓該線程進入就緒態:

rt_err_trt_thread_startup(rt_thread_tthread);
41e9f552-4f44-11ed-a3b6-dac502259ad0.png

...還有其他一些線程API,就不再一一贅述了,可以在RT-Thread官網查看

創建任務

上面對線程的介紹,羅里吧嗦的說了一大堆,接下來一起實戰來看看,如何創建并運行任務

創建任務實現多任務點燈

根據創建任務的API

rt_thread_trt_thread_create(constchar*name,
void(*entry)(void*parameter),
void*parameter,
rt_uint32_tstack_size,
rt_uint8_tpriority,
rt_uint32_ttick);

來創建我們的2個任務:

/**
******************************************************************************
*@filert_user_task.c
*@brief用戶任務文件
*
******************************************************************************
*@attention
*
* Copyright (c) 2022 公眾號:小飛哥玩嵌入式.
*Allrightsreserved.
* Author:小飛哥
*
*****************************************************************************/

/*Includes------------------------------------------------------------------*/
#include"main.h"
#include
#include"rt_user_task.h"
/*Privatetypedef-----------------------------------------------------------*/

/*Privatedefine------------------------------------------------------------*/
#defineTHREAD1_PRIORITY27//線程
#defineTHREAD_STACK_SIZE512//線程棧深度
#defineTHREAD_TIMESLICE5//線程的時間片


#defineTHREAD2_PRIORITY26//線程
/*Privatemacro-------------------------------------------------------------*/

/*Privatevariables---------------------------------------------------------*/

/*Privatefunctionprototypes-----------------------------------------------*/

/*Privateusercode---------------------------------------------------------*/

/**
*@functionrt_ledflash_entry
*@author:小飛哥玩嵌入式-小飛哥
*@TODO:LED控制線程
*@param:
*@return:NULL
*/
staticvoidrt_led1_flash_entry(void*parameter)
{
for(;;)
{
HAL_GPIO_TogglePin(Y_LED_GPIO_Port,Y_LED_Pin);
rt_kprintf("LED1TaskisRunning!
");
rt_thread_mdelay(500);
}
}
/**
*@functionrt_led2flash_entry
*@author:小飛哥玩嵌入式-小飛哥
*@TODO:LED控制線程
*@param:
*@return:NULL
*/
staticvoidrt_led2_flash_entry(void*parameter)
{
for(;;)
{
HAL_GPIO_TogglePin(CP_LED_GPIO_Port,CP_LED_Pin);
rt_kprintf("LED2TaskisRunning!
");
rt_thread_mdelay(500);
}
}
/**
*@functionrt_user_thread_entry
*@author:小飛哥玩嵌入式-小飛哥
*@TODO:創建線程
*@param:
*@return:NULL
*/

intrt_user_thread_entry(void)
{
staticrt_thread_tresult=RT_NULL;
/*創建一個線程,名稱是rt_ledflash,入口是rt_ledflash_entry*/
result=rt_thread_create("rt_led1flash",rt_led1_flash_entry,
NULL,
THREAD_STACK_SIZE,
THREAD1_PRIORITY,
THREAD_TIMESLICE);
if(result!=RT_NULL)//線程創建成功
{
rt_thread_startup(result);
}
else
{
rt_kprintf("
rt_led1flashthreadcreatefailed
");
}
/*創建一個線程,名稱是rt_ledflash,入口是rt_ledflash_entry*/
result=rt_thread_create("rt_led2flash",rt_led2_flash_entry,
NULL,
THREAD_STACK_SIZE,
THREAD2_PRIORITY,
THREAD_TIMESLICE);
if(result!=RT_NULL)//線程創建成功
{
rt_thread_startup(result);
}
else
{
rt_kprintf("
rt_led2flashthreadcreatefailed
");
}
return0;
}

上面創建了兩個任務,rt-thread任務的數值越小優先級是越高的,我們設置任務1的優先級為27,任務2的優先級為26,按照優先級設置規則,任務2的優先級是比較高的,接下來我們通過打印的方式(LED就不展示啦)來看看是不是按照我們的優先級去執行,可以看到,任務2的優先級是比較任務1高的

4203e6b0-4f44-11ed-a3b6-dac502259ad0.png

然后我們測試下同一個優先級情況下會發生什么,不出意外的話,應該是先執行先創建的任務,下圖也可以看到,確實如此

423ad0da-4f44-11ed-a3b6-dac502259ad0.png

至此,本節教程就完了,講的還是比較粗略的,LED就不展示啦,希望對小伙們有所幫助哈!

審核編輯:湯梓紅

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

    關注

    242

    文章

    23252

    瀏覽量

    660580
  • RT-Thread
    +關注

    關注

    31

    文章

    1285

    瀏覽量

    40085
  • HAL
    HAL
    +關注

    關注

    2

    文章

    70

    瀏覽量

    12607
  • CubeMx
    +關注

    關注

    0

    文章

    30

    瀏覽量

    1340

原文標題:02-rt-thread 任務創建與HAL庫點燈

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

收藏 人收藏

    評論

    相關推薦

    HALGPIO輸入模式cubemx配置

    上節課程介紹了GPIO輸出模式的配置,包括修改IO標簽,選擇GPIO模式、GPIO上下拉等,本節輸入模式有很多相同之處,節省時間,小飛哥就簡單介紹一下
    的頭像 發表于 11-02 09:33 ?1872次閱讀

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

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

    HALGPIO使用注意事項

    [tr=transparent]stm32資料 STM32l05x HAL使用注意事項 主講人:成沖 一、STM32L0xx_HAL_GPIO (一)、引腳初始化函數
    發表于 07-02 07:05

    講解GPIO的API使用和注意事項

    第17章 STM32F429之GPIOHALAPI本章教程為大家講解GPIO(General-purpose I/Os)的API使用和注意事項
    發表于 08-10 06:19

    Simulink開發STM32環境配置注意事項

    的是2018bSTM32MATJavaSTM32CubeMX,我下載的是5.3版本STM32F1注意是用于STM32CubeMX,不是Keil,可以
    發表于 08-17 06:07

    基于CubeMX HAL的CAN該如何去配置

    基于CubeMX HAL的CAN該如何去配置呢?使用時有哪些注意事項
    發表于 10-22 06:58

    GPIO口的配置過程是怎樣的?有哪些注意事項

    GPIO口具有哪些特性功能?GPIO口的配置過程是怎樣的?有哪些注意事項
    發表于 11-18 07:52

    GPIO的API該如何去使用呢?有哪些注意事項

    GPIO的API該如何去使用呢?有哪些注意事項?如何使用HALGPIO驅動呢?
    發表于 11-29 06:41

    stm32 fft使用注意事項

    stm32 fft使用方法 與 注意事項
    發表于 11-02 10:55 ?0次下載

    MCU的SWD端口復用為GPIO端口功能的配置方法及注意事項詳細說明

    本篇應用筆記主要介紹華大半導體 MCU*的 SWD 端口復用為 GPIO 端口功能的配置方法及注意事項
    發表于 11-12 08:00 ?14次下載
    MCU的SWD端口復用為<b class='flag-5'>GPIO</b>端口功能的<b class='flag-5'>配置</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 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采集

    AN092GD32MCU GPIO結構與使用注意事項

    AN092 GD32 MCU GPIO結構與使用注意事項
    發表于 03-01 18:48 ?0次下載
    AN092GD32MCU <b class='flag-5'>GPIO</b>結構與使用<b class='flag-5'>注意事項</b>

    SysTick與HAL_Delay的關系與注意事項

    本文將介紹SysTick與HAL_Delay()函數之間的關系,以及使用HAL_Delay()函數的注意事項
    的頭像 發表于 04-21 11:32 ?1926次閱讀
    主站蜘蛛池模板: 国产又黄又粗又爽又色的视频软件 | 欧美亚洲高清国产| 色欲AV亚洲情无码AV蜜桃| 亚洲精品久久午夜麻豆| 99视频福利| 国产喷水1区2区3区咪咪爱AV| 里番※琉璃全彩acg奈亚子| 爽死你个放荡粗暴小淫货漫画| 伊人国产在线播放| 国产99久久久欧美黑人刘玥| 久久久精品久久久久三级| 日韩在线视频www色| 伊人久久大香线蕉无码麻豆| 高H高肉强J短篇校园| 久久亚洲成a人片| 无码AV动漫精品一区二区免费| 最近更新2019中文字幕免费| 国产精品99精品无码视亚| 美女漏bb| 亚洲乱码爆乳精品成人毛片| YELLOW高清视频免费观看| 精品国产一区二区三区久久影院| 青柠在线观看免费播放电影| 亚洲视频一区在线| 国产成人精品亚洲线观看| 内射气质御姐视频在线播放| 亚洲欧美精品无码大片在线观看 | 国产午夜高潮熟女精品AV| 女人高潮时一吸一夹| 亚洲欲色欲色XXXXX在线AV| 东京热无码中文字幕av专区| 乱VODAFONEWIFI熟妇| 亚洲大片在线观看| 高H黄暴NP辣H一女多男| 牛牛在线视频| 在线免费国产| 黄色三级视频在线观看| 无限资源好看片2019免费观看| V8成品人视频| 男女XX00上下抽搐动态图| 一级大乳奶|