按鍵控制燈的亮與滅的效果圖:
一、寄存器開(kāi)發(fā)與庫(kù)函數(shù)開(kāi)發(fā)的優(yōu)缺點(diǎn)
1、寄存器開(kāi)發(fā)
缺點(diǎn):
(1)開(kāi)發(fā)難度大,查閱相關(guān)手冊(cè)比較多
(2)開(kāi)發(fā)效率相對(duì)低,產(chǎn)品周期長(zhǎng)
(3)可維護(hù)性較差
(4)可移植性、閱讀性差
優(yōu)點(diǎn):
運(yùn)行效率高。
2、庫(kù)函數(shù)開(kāi)發(fā)
優(yōu)點(diǎn):
(1)開(kāi)發(fā)難度小,有庫(kù)函數(shù)封裝,即可實(shí)現(xiàn)功能
(2)開(kāi)發(fā)效率高,產(chǎn)品周期短
(3)可維護(hù)性高
(4)可移植性、閱讀性強(qiáng)
缺點(diǎn):
運(yùn)行效率相對(duì)寄存器低一些。
STM32庫(kù)函數(shù)實(shí)際是ST公司對(duì)寄存器開(kāi)發(fā)封裝。
二、LED庫(kù)函數(shù)開(kāi)發(fā)
LED庫(kù)開(kāi)發(fā)要添加庫(kù)文件:stm32f4xx_gpio.c
(1)原理圖可參看上篇文章:入門(mén)篇 | STM32F407寄存器開(kāi)發(fā)--點(diǎn)燈
(2)打開(kāi)GPIOF組時(shí)鐘,也叫做使能F組時(shí)鐘(STM32當(dāng)中外設(shè)的時(shí)鐘不打開(kāi),降低功耗)
(3)設(shè)置GPIOF9 引腳為輸出模式 輸出推挽 上拉 速度
/*
引腳說(shuō)明:
LED0連接在PF9引腳
PF9輸出VCC(1),燈滅
PF9輸出GND(0),燈亮
*/
void Led_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
//使能GPIO F組時(shí)鐘,
//RCC_AHB1ENR |= (0x01<<5);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9; //引腳9
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; //輸出模式
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; //推挽
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //快速
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; //上拉
GPIO_Init(GPIOF, &GPIO_InitStruct);
}
(4)通過(guò)置位或者復(fù)位函數(shù)控制引腳電平來(lái)點(diǎn)燈
GPIO_SetBits( ) :置位(1)
GPIO_ResetBits( )復(fù)位(0)
int main(void)
{
//LED燈初始化
Led_Init();
while(1)
{
GPIO_SetBits(GPIOF,GPIO_Pin_9); //PF9置1 燈滅
delayms(1000);
GPIO_ResetBits(GPIOF,GPIO_Pin_9);//PF9置0 燈亮
delayms(1000);
}
return 0;
}
是不是比起寄存器點(diǎn)燈方便多啦!??!
二、按鍵庫(kù)函數(shù)開(kāi)發(fā)
按鍵庫(kù)開(kāi)發(fā)要添加庫(kù)文件:stm32f4xx_gpio.c
(1)理解按鍵輸入原理圖
按鍵S1連接PA0,
當(dāng)按鍵S1按下時(shí),PA0為低電平
當(dāng)按鍵S1未按下時(shí),PA0為高電平
補(bǔ)充:由于機(jī)械觸點(diǎn)的彈性作用,一個(gè)按鍵開(kāi)關(guān)在閉合時(shí)不會(huì)馬上穩(wěn)定地接通,在斷開(kāi)時(shí)也不會(huì)一下子斷開(kāi)。因而在閉合及斷開(kāi)的瞬間均伴隨有一連串的抖動(dòng),為了不產(chǎn)生這種現(xiàn)象而作的措施就是按鍵消抖。抖動(dòng)時(shí)間的長(zhǎng)短由按鍵的機(jī)械特性決定,一般為5ms~10ms。我們延時(shí)消抖即可
(2)打開(kāi)GPIOA組時(shí)鐘,也叫做使能A組時(shí)鐘(STM32當(dāng)中外設(shè)的時(shí)鐘不打開(kāi),降低功耗。
(3)設(shè)置GPIOA0 引腳為模式 上拉
/*
引腳說(shuō)明:
KEY0(S1) -- PA0
*/
void Key_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能GPIO A組時(shí)鐘,
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0; //引腳0
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN; //輸入模式
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; //上拉
GPIO_Init(GPIOA, &GPIO_InitStruct);
}
(4)通過(guò)函數(shù)獲取引腳電平(主函數(shù)使用此函數(shù))
GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin)
結(jié)合上面led庫(kù)函數(shù)點(diǎn)燈來(lái)實(shí)現(xiàn)按鍵控制燈的亮與滅
int main(void)
{
//LED燈初始化
Led_Init();
Key_Init();
while(1)
{
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == Bit_RESET)//判斷是否按下
{
delayms(15); //延時(shí)消抖
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == 0)//判斷是否按下
{
while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == 0);//按鍵按下
GPIO_ToggleBits(GPIOF, GPIO_Pin_9);//引腳狀態(tài)變更
}
}
}
return 0;
}
-
單片機(jī)
+關(guān)注
關(guān)注
6026文章
44455瀏覽量
630924 -
led燈
+關(guān)注
關(guān)注
22文章
1591瀏覽量
107656 -
寄存器
+關(guān)注
關(guān)注
31文章
5271瀏覽量
119654 -
STM32
+關(guān)注
關(guān)注
2263文章
10847瀏覽量
353783 -
STM32F407
+關(guān)注
關(guān)注
15文章
187瀏覽量
29293
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論