本文來源電子發燒友社區,作者:chenzd, 帖子地址:https://bbs.elecfans.com/jishu_2307398_1_1.html
IO_HAL(項目體驗視頻,詳見作者原帖子)
1.項目概述:
key按下,即引腳PC.1有低電平輸入,此時led點亮,即PC.0為低電平;
key彈起,即引腳PC.1懸空,此時led熄滅,即PC.0為高電平。
2.軟件調試:
簡述hal庫的編程的理解:引入HAL層的概念,將軟件大致分為三類:第一類hal層:直接和硬件相關,操作寄存器與原始的芯片api;第二類組件層:通過hal層間接操作硬件,只需要了解部分和組件直接相關的必要硬件信息即可,主要目的是實現組件功能,第三類應用層:通過調用組件層,只關注功能,關注硬件。優勢:1.有利于多人協同開發:可以按三個層次對人員的工作進行分配,定義好接口,可實現三層軟件同時開發,大大提高開發效率2.有利于不同平臺的移植:在移植時:應用 層可不過修改,組件層修改量很少,只需要著重修改hal層就可滿足要求;
2.1Hal層:
目錄結構如下圖所示:
2.1.1變量:
定義結構體:
結構體元素為初始化io引腳的必要元素如:端口號,序號,輸入輸出模式,初始電平;
typedefstruct
{
u32 gpio_sel; //port
u32 Pin; /*!< Specifies the GPIO pins to be configured.
This parameter can be any value of [url=home.php?mod=space&uid=1352397]@ref[/url] GPIO_pins_define */
SYS_GpioModeDef Mode; /*!< Specifies the operating mode for the selected pins.
This parameter can be a value of @ref GPIO_mode_define */
u8 Lev; //initial electrical level;
}GPIO_InitTypeDef;
2.1.2函數:
用于初始化io引腳,
voidHAL_GPIO_Init( GPIO_InitTypeDef *GPIO_Init);
用于讀取引腳的電平狀態
u8HAL_GPIO_ReadPin(GPIO_InitTypeDef *GPIO_Init);
2.2組件層
目錄結構如下圖所示:
初始化io引腳的步驟
- 定義結構體變量
- 為結構體變量賦值
- 引用hal函數,即可實現引腳初始化
示例為led引腳初始化:
staticGPIO_InitTypeDef GPIO_LED0;
voidLedInit()
{
GPIO_LED0.gpio_sel = GPIOC_BASE_ADDR;
GPIO_LED0.Pin = GPIO_PIN0;
GPIO_LED0.Mode = *SYS_GPIO_OUTPT* ;
GPIO_LED0.Lev = 1;
HAL_GPIO_Init(&GPIO_LED0);
}
voidLedOn();
voidLedOff();
讀取引腳的電平狀態如下所示:
u8GetKeyState()
ret = HAL_GPIO_ReadPin(&GPIO_KEY0);
2.3應用層
目錄結構如圖所示:
voidUserFunction1()
{
KeyInit();
LedInit();
**while** (1)
{
**if** (GetKeyState() == 0)
{
LedOn();
}
**else**
{
LedOff();
}
}
}
整體軟件的目錄結構為,如下圖所示:
3.硬件接入:
獨立按鍵key連接引腳PC.1,key按下,有低電平輸入,key彈起,即懸空;
led連接引腳PC.0,led為共陽極,低電平點亮;
硬件接線如下圖所示:
4.視頻演示:
實際現象與描述一致。
5.建議
發布評論請先 登錄
相關推薦
評論