本文來源電子發(fā)燒友社區(qū),作者:chenzd, 帖子地址:https://bbs.elecfans.com/jishu_2307398_1_1.html
IO_HAL(項(xiàng)目體驗(yàn)視頻,詳見作者原帖子)
1.項(xiàng)目概述:
key按下,即引腳PC.1有低電平輸入,此時(shí)led點(diǎn)亮,即PC.0為低電平;
key彈起,即引腳PC.1懸空,此時(shí)led熄滅,即PC.0為高電平。
2.軟件調(diào)試:
簡(jiǎn)述hal庫的編程的理解:引入HAL層的概念,將軟件大致分為三類:第一類hal層:直接和硬件相關(guān),操作寄存器與原始的芯片api;第二類組件層:通過hal層間接操作硬件,只需要了解部分和組件直接相關(guān)的必要硬件信息即可,主要目的是實(shí)現(xiàn)組件功能,第三類應(yīng)用層:通過調(diào)用組件層,只關(guān)注功能,關(guān)注硬件。優(yōu)勢(shì):1.有利于多人協(xié)同開發(fā):可以按三個(gè)層次對(duì)人員的工作進(jìn)行分配,定義好接口,可實(shí)現(xiàn)三層軟件同時(shí)開發(fā),大大提高開發(fā)效率2.有利于不同平臺(tái)的移植:在移植時(shí):應(yīng)用 層可不過修改,組件層修改量很少,只需要著重修改hal層就可滿足要求;
2.1Hal層:
目錄結(jié)構(gòu)如下圖所示:
2.1.1變量:
定義結(jié)構(gòu)體:
結(jié)構(gòu)體元素為初始化io引腳的必要元素如:端口號(hào),序號(hào),輸入輸出模式,初始電平;
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函數(shù):
用于初始化io引腳,
voidHAL_GPIO_Init( GPIO_InitTypeDef *GPIO_Init);
用于讀取引腳的電平狀態(tài)
u8HAL_GPIO_ReadPin(GPIO_InitTypeDef *GPIO_Init);
2.2組件層
目錄結(jié)構(gòu)如下圖所示:
初始化io引腳的步驟
- 定義結(jié)構(gòu)體變量
- 為結(jié)構(gòu)體變量賦值
- 引用hal函數(shù),即可實(shí)現(xiàn)引腳初始化
示例為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();
讀取引腳的電平狀態(tài)如下所示:
u8GetKeyState()
ret = HAL_GPIO_ReadPin(&GPIO_KEY0);
2.3應(yīng)用層
目錄結(jié)構(gòu)如圖所示:
voidUserFunction1()
{
KeyInit();
LedInit();
**while** (1)
{
**if** (GetKeyState() == 0)
{
LedOn();
}
**else**
{
LedOff();
}
}
}
整體軟件的目錄結(jié)構(gòu)為,如下圖所示:
3.硬件接入:
獨(dú)立按鍵key連接引腳PC.1,key按下,有低電平輸入,key彈起,即懸空;
led連接引腳PC.0,led為共陽極,低電平點(diǎn)亮;
硬件接線如下圖所示:
4.視頻演示:
實(shí)際現(xiàn)象與描述一致。
5.建議
建議在開發(fā)板的硬件電路中增加led,key,3.3v/5v電源,電源開關(guān),以及復(fù)位按鍵,可以提高開發(fā)者的開發(fā)效率。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
飛凌嵌入式ElfBoard ELF 1板卡-開發(fā)板適配之LED
dsPIC33EDV64MC205電機(jī)控制開發(fā)板用戶指南
![dsPIC33EDV<b class='flag-5'>64MC</b>205電機(jī)<b class='flag-5'>控制</b><b class='flag-5'>開發(fā)板</b>用戶指南](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
【敏矽微ME32G070開發(fā)板免費(fèi)體驗(yàn)】之開發(fā)板資源&gt;ADC測(cè)試
【敏矽微ME32G070開發(fā)板免費(fèi)體驗(yàn)】+ADC測(cè)試與LED點(diǎn)亮
【RA-Eco-RA4E2-64PIN-V1.0開發(fā)板試用】01、點(diǎn)亮LED
【RA-Eco-RA2E1-48PIN-V1.0開發(fā)板試用】LED燈切換點(diǎn)亮
追加名額丨米爾瑞芯微RK3576開發(fā)板有獎(jiǎng)試用
![追加名額丨米爾瑞<b class='flag-5'>芯</b>微RK3576<b class='flag-5'>開發(fā)板</b>有獎(jiǎng)<b class='flag-5'>試用</b>](https://file.elecfans.com/web2/M00/08/64/pYYBAGDwFEGADIPWAAFlJOlmLxg664.jpg)
有獎(jiǎng)丨米爾 瑞芯微RK3576開發(fā)板免費(fèi)試用
![有獎(jiǎng)丨米爾 瑞<b class='flag-5'>芯</b>微RK3576<b class='flag-5'>開發(fā)板</b><b class='flag-5'>免費(fèi)</b><b class='flag-5'>試用</b>](https://file.elecfans.com/web2/M00/08/64/pYYBAGDwFEGADIPWAAFlJOlmLxg664.jpg)
能力再次提升! 迅為RK3588/RK3568開發(fā)板&amp;amp;核心板新增定制分區(qū)鏡像
![能力再次提升! 迅為RK3588/RK3568<b class='flag-5'>開發(fā)板</b>&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;核心<b class='flag-5'>板</b>新增定制分區(qū)鏡像](https://file1.elecfans.com/web2/M00/0B/E0/wKgaomcrFqCAPVkfAAC-6O-KM4Q713.png)
【RA-Eco-RA2E1-48PIN-V1.0開發(fā)板試用】RA-Eco-RA2E1-48PIN-V1.0開發(fā)板流水燈測(cè)試
onsemi LV/MV MOSFET 產(chǎn)品介紹 &amp;amp; 行業(yè)應(yīng)用
![onsemi LV/MV MOSFET 產(chǎn)品介紹 &<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>; 行業(yè)應(yīng)用](https://file.elecfans.com/web2/M00/92/72/poYBAGPzDF2APvYFAAAbxdHf0so719.png)
FS201資料(pcb &amp; DEMO &amp; 原理圖)
在TSMaster中加載基于DotNet平臺(tái)的Seed&amp;amp;Key
![在TSMaster中加載基于DotNet平臺(tái)的Seed&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>Key</b>](https://file.elecfans.com/web2/M00/40/07/pYYBAGJrUk2AaMaTAAAQONQtdzo461.jpg)
評(píng)論