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

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

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

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

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

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

圖片

一、寄存器開(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( ) :置位(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;
}

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

    評(píng)論

    相關(guān)推薦

    STM32F407 外部中斷配置步驟

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

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

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

    利用按鍵控制LED的亮滅

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

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

    發(fā)表于 11-16 06:25

    請(qǐng)問(wèn)STM32F407VET6怎么實(shí)現(xiàn)按鍵控制LED狀態(tài)?

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

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

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

    STM32F407 UCOS III實(shí)驗(yàn)

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

    STM32F407 開(kāi)發(fā)板原理圖

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

    STM32F4工程--IO口--按鍵控制點(diǎn)燈程序

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

    STM32F407通過(guò)按鍵控制LED和蜂鳴器

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

    STM32F407學(xué)習(xí)記錄---按鍵檢測(cè)實(shí)驗(yàn)

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

    STM32F407開(kāi)發(fā)板用戶手冊(cè)】第1章?? 初學(xué)STM32F407的準(zhǔn)備工作

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

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

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

    STM32】基于STM32F407寄存器方式點(diǎn)亮LED流水燈

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

    stm32按鍵控制led亮滅

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