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

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

3天內(nèi)不再提示

基于STM32F407庫函數(shù)開發(fā)按鍵控制LED燈

CHANBAEK ? 來源:小浩筆記 ? 作者:一紙HH ? 2023-05-19 15:09 ? 次閱讀

按鍵控制燈的亮與滅的效果圖:

圖片

一、寄存器開發(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( ) :置位(1GPIO_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;
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 單片機
    +關(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
收藏 人收藏

    評論

    相關(guān)推薦

    STM32F407 外部中斷配置步驟

    介紹STM32F407外部中斷配置步驟,以按鍵為例,實現(xiàn)外部中斷配置,使用按鍵觸發(fā)中斷進行LED控制
    的頭像 發(fā)表于 07-06 14:31 ?1633次閱讀
    <b class='flag-5'>STM32F407</b> 外部中斷配置步驟

    使用HAL庫函數(shù)外部中斷功能實現(xiàn)按鍵控制LED

    STM32開發(fā),使用HAL庫函數(shù)外部中斷功能實現(xiàn)按鍵控制LED1 概述1.1 資源概述1.2引
    發(fā)表于 08-13 09:16

    利用按鍵控制LED的亮滅

    STM32F4工程--IO口--按鍵控制點燈程序(庫函數(shù)) ----芯片:STM32F429IGT6本文章介紹使用STM32F4單片機,利用
    發(fā)表于 08-24 07:18

    如何使用HAL庫函數(shù)實現(xiàn)按鍵控制LED?

    如何使用HAL庫函數(shù)實現(xiàn)按鍵控制LED?
    發(fā)表于 11-16 06:25

    請問STM32F407VET6怎么實現(xiàn)按鍵控制LED狀態(tài)?

    請問STM32F407VET6怎么實現(xiàn)按鍵控制LED狀態(tài)?
    發(fā)表于 11-18 06:10

    怎樣通過庫函數(shù)操作stm32f407上的按鍵LED以及蜂鳴器的控制

    如何對LED進行初始化配置呢?怎樣通過庫函數(shù)操作stm32f407上的按鍵LED以及蜂鳴器
    發(fā)表于 01-26 07:33

    STM32F407 UCOS III實驗

    STM32F407 UCOS III實驗,介紹基于STM32F407的UCOSIII實例,參考下
    發(fā)表于 09-22 14:08 ?81次下載

    STM32F407 開發(fā)板原理圖

    STM32F407 開發(fā)板原理圖
    發(fā)表于 09-22 16:12 ?393次下載
    <b class='flag-5'>STM32F407</b> <b class='flag-5'>開發(fā)</b>板原理圖

    STM32F4工程--IO口--按鍵控制點燈程序

    STM32F4工程--IO口--按鍵控制點燈程序(庫函數(shù)) ----芯片:STM32F429IGT6本文章介紹使用STM32F4單片機,利用
    發(fā)表于 11-29 14:06 ?13次下載
    <b class='flag-5'>STM32F</b>4工程--IO口--<b class='flag-5'>按鍵控制</b>點燈程序

    STM32F407通過按鍵控制LED和蜂鳴器

    學習STM32F4的基本知識,掌握I/O口的基本操作,了解MDK開發(fā)環(huán)境使用方法之后,通過學習LED,BEEP,KEY基本模塊的應(yīng)用實例,最終設(shè)計出通過按鍵控制
    發(fā)表于 11-29 15:51 ?31次下載
    <b class='flag-5'>STM32F407</b>通過<b class='flag-5'>按鍵控制</b><b class='flag-5'>LED</b>和蜂鳴器

    STM32F407學習記錄---按鍵檢測實驗

    stm32f407上的按鍵實現(xiàn)控制LED以及蜂鳴器,實現(xiàn)的功能如下:KEY0鍵控制
    發(fā)表于 12-01 18:06 ?13次下載
    <b class='flag-5'>STM32F407</b>學習記錄---<b class='flag-5'>按鍵</b>檢測實驗

    STM32F407開發(fā)板用戶手冊】第1章?? 初學STM32F407的準備工作

    STM32F407開發(fā)板用戶手冊】第1章?? 初學STM32F407的準備工作
    發(fā)表于 12-04 13:36 ?75次下載
    【<b class='flag-5'>STM32F407</b><b class='flag-5'>開發(fā)</b>板用戶手冊】第1章?? 初學<b class='flag-5'>STM32F407</b>的準備工作

    STM32F407開發(fā)板用戶手冊】第19章 STM32F407的GPIO應(yīng)用之按鍵FIFO

    STM32F407開發(fā)板用戶手冊】第19章 STM32F407的GPIO應(yīng)用之按鍵FIFO
    發(fā)表于 12-05 15:21 ?39次下載
    【<b class='flag-5'>STM32F407</b><b class='flag-5'>開發(fā)</b>板用戶手冊】第19章 <b class='flag-5'>STM32F407</b>的GPIO應(yīng)用之<b class='flag-5'>按鍵</b>FIFO

    STM32】基于STM32F407寄存器方式點亮LED流水燈

    目錄一、通過寄存器方式點亮1.二、通過庫函數(shù)方式點亮三級目錄本文使用原子STM32F407最小系統(tǒng)板示例核心芯片為:STM32F407ZGT6一、通過寄存器方式點亮1.二、通過庫函數(shù)
    發(fā)表于 12-08 17:51 ?7次下載
    【<b class='flag-5'>STM32</b>】基于<b class='flag-5'>STM32F407</b>寄存器方式點亮<b class='flag-5'>LED</b>流水燈

    stm32按鍵控制led亮滅

    stm32按鍵控制led亮滅? 在嵌入式系統(tǒng)中,硬件按鍵常常被用作開關(guān)輸入,控制
    的頭像 發(fā)表于 09-02 17:05 ?9588次閱讀