按鍵控制燈的亮與滅的效果圖:
一、寄存器開發(fā)與庫函數(shù)開發(fā)的優(yōu)缺點
1、寄存器開發(fā)
缺點:
(1)開發(fā)難度大,查閱相關(guān)手冊比較多
(2)開發(fā)效率相對低,產(chǎn)品周期長
(3)可維護性較差
(4)可移植性、閱讀性差
優(yōu)點:
運行效率高。
2、庫函數(shù)開發(fā)
優(yōu)點:
(1)開發(fā)難度小,有庫函數(shù)封裝,即可實現(xiàn)功能
(2)開發(fā)效率高,產(chǎn)品周期短
(3)可維護性高
(4)可移植性、閱讀性強
缺點:
運行效率相對寄存器低一些。
STM32庫函數(shù)實際是ST公司對寄存器開發(fā)封裝。
二、LED庫函數(shù)開發(fā)
LED庫開發(fā)要添加庫文件:stm32f4xx_gpio.c
(1)原理圖可參看上篇文章:入門篇 | STM32F407寄存器開發(fā)--點燈
(2)打開GPIOF組時鐘,也叫做使能F組時鐘(STM32當中外設(shè)的時鐘不打開,降低功耗)
(3)設(shè)置GPIOF9 引腳為輸出模式 輸出推挽 上拉 速度
/*
引腳說明:
LED0連接在PF9引腳
PF9輸出VCC(1),燈滅
PF9輸出GND(0),燈亮
*/
void Led_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
//使能GPIO F組時鐘,
//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)通過置位或者復(fù)位函數(shù)控制引腳電平來點燈
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;
}
是不是比起寄存器點燈方便多啦?。?!
二、按鍵庫函數(shù)開發(fā)
按鍵庫開發(fā)要添加庫文件:stm32f4xx_gpio.c
(1)理解按鍵輸入原理圖
按鍵S1連接PA0,
當按鍵S1按下時,PA0為低電平
當按鍵S1未按下時,PA0為高電平
補充:由于機械觸點的彈性作用,一個按鍵開關(guān)在閉合時不會馬上穩(wěn)定地接通,在斷開時也不會一下子斷開。因而在閉合及斷開的瞬間均伴隨有一連串的抖動,為了不產(chǎn)生這種現(xiàn)象而作的措施就是按鍵消抖。抖動時間的長短由按鍵的機械特性決定,一般為5ms~10ms。我們延時消抖即可
(2)打開GPIOA組時鐘,也叫做使能A組時鐘(STM32當中外設(shè)的時鐘不打開,降低功耗。
(3)設(shè)置GPIOA0 引腳為模式 上拉
/*
引腳說明:
KEY0(S1) -- PA0
*/
void Key_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能GPIO A組時鐘,
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)通過函數(shù)獲取引腳電平(主函數(shù)使用此函數(shù))
GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin)
結(jié)合上面led庫函數(shù)點燈來實現(xiàn)按鍵控制燈的亮與滅
int main(void)
{
//LED燈初始化
Led_Init();
Key_Init();
while(1)
{
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == Bit_RESET)//判斷是否按下
{
delayms(15); //延時消抖
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;
}
-
單片機
+關(guān)注
關(guān)注
6023文章
44376瀏覽量
628422 -
led燈
+關(guān)注
關(guān)注
22文章
1588瀏覽量
107402 -
寄存器
+關(guān)注
關(guān)注
31文章
5253瀏覽量
119206 -
STM32
+關(guān)注
關(guān)注
2258文章
10828瀏覽量
352497 -
STM32F407
+關(guān)注
關(guān)注
15文章
187瀏覽量
29205
發(fā)布評論請先 登錄
相關(guān)推薦
評論