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

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

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

stm32按鍵控制led燈亮滅

工程師鄧生 ? 來源:未知 ? 作者:劉芹 ? 2023-09-02 17:05 ? 次閱讀

stm32按鍵控制led燈亮滅

嵌入式系統(tǒng)中,硬件按鍵常常被用作開關(guān)輸入,控制LED燈亮滅。在STM32系列單片機中,有多種方式實現(xiàn)按鍵控制LED燈亮滅,我們將介紹其中一種較為簡單的方法。

一、STM32開發(fā)環(huán)境搭建

1. 軟件環(huán)境搭建

首先,需要在計算機中下載安裝Keil MDK開發(fā)環(huán)境,以實現(xiàn)對STM32單片機的編寫、編譯、燒錄等操作。同時,還需要下載對應(yīng)的STM32CubeMX軟件,用于生成代碼、初始化硬件等操作。

2. 硬件環(huán)境搭建

將STM32單片機與相應(yīng)的按鍵和LED燈連接。本實驗使用的STM32是STM32F103C8T6,按鍵使用的是按鈕開關(guān),LED燈使用的是紅色和藍色通用的LED燈。

二、STM32按鍵控制LED燈亮滅實驗步驟

1. 打開STM32CubeMX軟件,點擊File -> New Project,選擇STM32F103C8T6作為目標設(shè)備,單擊OK。

2. 在生成的新項目中,選擇Pinout標簽頁,將按鍵和LED燈連接至對應(yīng)的引腳上。

3. 選擇Configuration標簽頁,配置GPIO引腳的工作模式。按鍵連接的GPIO引腳應(yīng)配置為輸入模式,LED燈連接的GPIO引腳應(yīng)配置為輸出模式。

4. 在Project Manager視圖中,選擇Project Manager -> Code Generator標簽頁,選擇Generate peripheral initialisation as a pair of .c/.h files選項,并確保選中了Generate under Root選項。

5. 點擊Generate Code,生成HAL庫文件。

6. 打開Keil MDK開發(fā)環(huán)境,從文件菜單中選擇New Project,創(chuàng)建新的工程。在選擇設(shè)備的窗口中選擇STM32F103C8T6,確定后添加HAL庫文件到工程。

7. 編寫C語言程序,實現(xiàn)按鍵控制LED燈亮滅。程序中需要實現(xiàn)如下功能:

a. 初始化按鍵和LED燈的GPIO引腳。

b. 判斷按鍵當前狀態(tài),如果按鍵處于按下狀態(tài),則將LED燈的GPIO引腳置高,使LED燈亮;否則,將LED燈的GPIO引腳置低,使LED燈滅。

下面是具體的C語言程序示例:

```
#include "stm32f1xx_hal.h"

/* 定義按鍵GPIO引腳 */
#define KEY_PORT GPIOB
#define KEY_PIN GPIO_PIN_0

/* 定義LED燈GPIO引腳 */
#define LED_PORT GPIOB
#define LED_PIN GPIO_PIN_1

/* 定義按鍵狀態(tài)標志 */
uint8_t key_flag = 0;

/* 定義HAL庫句柄 */
GPIO_InitTypeDef GPIO_InitStruct;
TIM_HandleTypeDef htim2;

/* 初始化STM32的GPIO引腳 */
void GPIO_Init(void)
{
/* 使能GPIOB時鐘 */
__HAL_RCC_GPIOB_CLK_ENABLE();

/* 初始化按鍵GPIO引腳 */
GPIO_InitStruct.Pin = KEY_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(KEY_PORT, &GPIO_InitStruct);

/* 初始化LED燈GPIO引腳 */
GPIO_InitStruct.Pin = LED_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(LED_PORT, &GPIO_InitStruct);
}

/* 初始化STM32的定時器,以便在檢測按鍵時切換狀態(tài) */
void TIM2_Init(void)
{
/* 使能TIM2時鐘 */
__HAL_RCC_TIM2_CLK_ENABLE();

/* 初始化定時器中斷 */
HAL_NVIC_SetPriority(TIM2_IRQn, 3, 0);
HAL_NVIC_EnableIRQ(TIM2_IRQn);

/* 初始化定時器2 */
htim2.Instance = TIM2;
htim2.Init.Prescaler = 7200-1; /* 分頻系數(shù) */
htim2.Init.Period = 500-1; /* 計數(shù)周期 */
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
HAL_TIM_Base_Init(&htim2);
HAL_TIM_Base_Start_IT(&htim2);
}

/* 檢測按鍵狀態(tài) */
void Key_Scan(void)
{
/* 判斷按鍵是否按下 */
if (HAL_GPIO_ReadPin(KEY_PORT, KEY_PIN) == GPIO_PIN_RESET) {
key_flag = 1;
} else {
key_flag = 0;
}
}

/* 控制LED燈亮滅 */
void LED_Control(void)
{
/* 根據(jù)按鍵狀態(tài)判斷LED燈的亮滅狀態(tài) */
if (key_flag == 1) {
HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_SET);
} else {
HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_RESET);
}
}

/* 定時器調(diào)用函數(shù),每500ms檢測一次按鍵狀態(tài) */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if (htim == &htim2) {
Key_Scan();
LED_Control();
}
}

int main(void)
{
/* 初始化GPIO引腳 */
HAL_Init();
GPIO_Init();

/* 初始化定時器 */
TIM2_Init();

/* 等待事件發(fā)生 */
while (1) {
}

return 0;
}
```

三、STM32按鍵控制LED燈亮滅的運行效果

編寫完成上述程序之后,將程序燒錄到STM32單片機中。當按下按鍵時,LED燈將亮起,否則LED燈將熄滅

四、總結(jié)

本實驗簡單介紹了STM32按鍵控制LED燈亮滅的原理和步驟。在實現(xiàn)過程中,需要注意初始化硬件的GPIO引腳的工作模式,以及編寫程序中對按鍵狀態(tài)的判斷和LED燈狀態(tài)的控制。可以通過添加定時器中斷等方式,實現(xiàn)對按鍵狀態(tài)的周期性檢測和LED燈的閃爍效果等功能,并根據(jù)具體的應(yīng)用場景來定制相應(yīng)的程序功能。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • led燈
    +關(guān)注

    關(guān)注

    22

    文章

    1588

    瀏覽量

    107397
  • STM32
    +關(guān)注

    關(guān)注

    2257

    文章

    10828

    瀏覽量

    352459
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7575

    瀏覽量

    134046
  • 按鍵控制
    +關(guān)注

    關(guān)注

    1

    文章

    44

    瀏覽量

    8753
  • HAL庫
    +關(guān)注

    關(guān)注

    1

    文章

    114

    瀏覽量

    6030
收藏 人收藏

    評論

    相關(guān)推薦

    【xG24 Matter開發(fā)套件試用體驗】7-按鍵點亮LED

    1介紹 之前已經(jīng)點亮LED,并能通過延時實現(xiàn)LED閃爍,這里實現(xiàn)通過按左鍵控制LED,按下
    發(fā)表于 08-03 14:54

    請問怎么用按鍵控制1602中的5*8點陣及加減?

    請問怎么用按鍵控制1602中的5*8點陣及加減
    發(fā)表于 05-07 08:04

    STM32F103定時器變慢的原因?怎么解決?

    STM32F103 利用定時器設(shè)置按鍵帶長按功能和短按鍵按鍵按鍵是系統(tǒng)關(guān)機,短按只是控制
    發(fā)表于 04-23 06:52

    在測試STM328S103K3T6的按鍵控制時,有些會自動,為什么?

    在測試STM328S103K3T6的按鍵控制時,有些會自動
    發(fā)表于 04-03 07:15

    proteus仿真STM32無法識別輸入引腳的電平

    我用STM32CubeMX6.0.1+MDK5.39+Proteus8.6,想練習按鍵功能,按下按鍵切變LED1、LED2的
    發(fā)表于 01-23 13:56

    【每周一練】盤古1K開發(fā)板 練習二:按鍵控制LED實驗

    本文完成的實驗為按鍵控制LED,通過對連接按鍵輸入的IO電平進行檢測,根據(jù)電平的狀態(tài)來改變LED
    發(fā)表于 12-21 22:45

    STM32按鍵控制LED

    使用一個按鍵控制LED按鍵按下時LED亮起,按鍵
    的頭像 發(fā)表于 12-11 14:19 ?3097次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>按鍵控制</b><b class='flag-5'>LED</b>的<b class='flag-5'>亮</b><b class='flag-5'>滅</b>

    【每周一練】盤古1K開發(fā)板 練習二:按鍵控制RGB

    實驗?zāi)康?掌握按鍵消抖原理,實現(xiàn)按鍵控制RDB顏色更換 實驗要求 設(shè)計 8 種彩燈效果,選擇一個按鍵作為控制輸入,按下一次換一種顯示效果
    發(fā)表于 12-10 16:43

    【每周一練】盤古1K開發(fā)板 練習二:按鍵控制LED實驗

    本篇學習實現(xiàn)按鍵控制8種LED,按一下切換一種效果 1.打開MES2KG\\demo\\3_key_led_rgb工程,菜單Project->Project Settings,
    發(fā)表于 12-06 00:36

    基于XL3001的LEDPWM調(diào)光方案

    若客戶的方案設(shè)計為通電后默認不,通過單片機控制驅(qū)動,再來點亮 LED;若不加其他對策方法,則會造成上電時 LED
    發(fā)表于 11-30 11:28 ?1167次閱讀
    基于XL3001的<b class='flag-5'>LED</b><b class='flag-5'>燈</b>PWM調(diào)光方案

    使用STM32按鍵控制LED

    本次實驗所用到的Simulink模型如圖5.1所示,實驗現(xiàn)象: 按鍵按下、松開LED循環(huán)實現(xiàn)翻轉(zhuǎn)亮效果,當按鍵按下時,產(chǎn)生下降沿脈沖,通過一個計數(shù)器對下降沿脈沖進行0~1循環(huán)計數(shù),計
    的頭像 發(fā)表于 11-29 16:22 ?1930次閱讀
    使用<b class='flag-5'>STM32</b><b class='flag-5'>按鍵控制</b><b class='flag-5'>LED</b><b class='flag-5'>亮</b><b class='flag-5'>滅</b>

    【每周一練】盤古1K開發(fā)板 練習二:按鍵控制LED實驗

    實驗?zāi)康模赫莆?b class='flag-5'>按鍵消抖原理,實現(xiàn)按鍵控制流水燈 實驗要求:設(shè)計 8 種彩燈效果,選擇一個按鍵作為控制輸入,按下一次換一種顯示效果
    發(fā)表于 11-22 11:47

    51單片機按鍵控制的原理是什么?

    51單片機按鍵控制的原理
    發(fā)表于 11-01 07:23

    使用單獨按鍵實現(xiàn)漸,為什么我的程序無法開關(guān)?

    各位大蝦,我是剛剛學單片機,如何使用單獨按鍵實現(xiàn)漸(功能是用一個輕觸開關(guān),開燈時LED慢慢亮起和關(guān)燈時慢慢滅掉),我寫程序但無法開關(guān)
    發(fā)表于 10-08 07:34

    STM32通過TIM5_CH2對電容觸摸按鍵的檢測實現(xiàn)對DS1的控制

    本實驗利用戰(zhàn)艦STM32板板載的電容觸摸按鍵,通過TIM5_CH2對電容觸摸按鍵的檢測,實現(xiàn)對DS1的控制,下載本代碼后,通過按開發(fā)板右下角的TPAD按鈕,就可以
    發(fā)表于 10-07 06:19