用STM32单击按键实现LED闪烁和双击按键实现LED呼吸灯效果

这篇具有很好参考价值的文章主要介绍了用STM32单击按键实现LED闪烁和双击按键实现LED呼吸灯效果。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在嵌入式系统中,按键和LED是最常见的外设之一。本文将介绍如何使用STM32微控制器实现按键的单击和双击检测,并通过控制LED的闪烁和呼吸灯效果来呈现按键的触发效果。

第一部分:硬件准备

  1. 准备一块STM32开发板,如STM32F103C8T6。
  2. 连接一个按键到开发板上的GPIO引脚,并通过外部上拉电阻将其连接到VCC。
  3. 连接一个LED到开发板上的GPIO引脚,并通过电阻限流。

第二部分:软件配置

  1. 下载并安装STM32CubeMX软件,用于配置STM32的引脚、时钟和中断等。
  2. 打开STM32CubeMX软件,选择适当的芯片型号,配置引脚和时钟,使其与硬件连接一致。
  3. 配置按键引脚为输入模式,选择上拉电阻。
  4. 配置LED引脚为输出模式。

第三部分:代码编写

  1. 在工程中创建一个名为"main.c"的源文件,并添加以下代码:
#include "stm32f1xx.h"

#define DELAY_TIME 10

void delay_us(uint32_t time) {
    while(time--) {
        asm("nop");
    }
}

void delay_ms(uint32_t time) {
    while(time--) {
        delay_us(1000);
    }
}

int main(void) {
    RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;  // 使能GPIOC时钟
    RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;  // 使能GPIOA时钟
    
    GPIOC->CRH &= ~(GPIO_CRH_CNF13 | GPIO_CRH_MODE13);  // 将PC13配置为通用推挽输出模式
    GPIOC->CRH |= GPIO_CRH_MODE13_0;
    
    GPIOA->CRL &= ~(GPIO_CRL_MODE0 | GPIO_CRL_CNF0);  // 将PA0配置为输入模式
    GPIOA->CRL |= GPIO_CRL_CNF0_1;
    
    uint8_t click_count = 0;
    uint8_t led_brightness = 0;
    
    while(1) {
        if((GPIOA->IDR & GPIO_IDR_IDR0) == 0) {  // 检测按键是否按下
            delay_ms(30);  // 延时一段时间,等待双击的第二次按下
            if((GPIOA->IDR & GPIO_IDR_IDR0) == 0) {  // 再次检测按键是否按下
                click_count++;
                
                if(click_count == 2) {  // 双击按键
                    click_count = 0;
                    for(uint8_t i = 0; i < 255; i++) {  // LED呼吸灯效果
                        led_brightness = i;
                        delay_us(DELAY_TIME);
                    }
                    for(uint8_t i = 255; i > 0; i--) {
                        led_brightness = i;
                        delay_us(DELAY_TIME);
                    }
                }
            } else {  // 单击按键
                for(int i = 0; i < 3; i++) {
                    GPIOC->BSRR = GPIO_BSRR_BS13;  // 点亮LED
                    delay_ms(500);
                    GPIOC->BSRR = GPIO_BSRR_BR13;  // 熄灭LED
                    delay_ms(500);
                }
            }
        }
    }
}

第四部分:生成代码并下载

  1. 在STM32CubeMX软件中,点击"Project"菜单,选择"Generate Code"。
  2. 导出生成的代码到工程文件夹中。
  3. 使用Keil或其他支持STM32开发的IDE打开工程文件。
  4. 编译并下载代码到STM32开发板中。

第五部分:测试与调试

  1. 将按键连接到开发板上,并连接电源。
  2. 单击按键时,LED应该会闪烁三次。
  3. 双击按键时,LED应该会呈现呼吸灯效果。

本文介绍了如何使用STM32微控制器实现按键的单击和双击检测,并通过控制LED的闪烁和呼吸灯效果来呈现按键的触发效果。这个示例展示了如何在STM32上实现不同的按键操作,为更复杂的嵌入式开发提供了基础和启示。

下面我来说说我学习STM32的心得体会:

第一部分:选择合适的学习资源 在学习STM32之前,我首先需要找到适合自己的学习资源。常见的学习资源包括官方文档、教程视频、在线论坛等。我首先阅读了STM32的官方文档,了解了STM32的体系结构、寄存器配置等基本知识。然后,我通过观看一些教程视频来深入了解STM32的编程方法和开发流程。最后,我加入了一些STM32的在线论坛,与其他开发者交流学习经验和解决问题。

第二部分:掌握基本的开发工具 学习STM32需要掌握一些基本的开发工具,如开发板、编程器和开发环境。我选择了一款适合初学者的STM32开发板,并学会了如何使用编程器将程序下载到开发板中。我还安装了STM32CubeMX和Keil等开发环境,并学习了如何使用这些工具进行项目配置和代码编写。

第三部分:理解STM32的体系结构和编程方法 为了更好地开发STM32项目,我花了一些时间学习了STM32的体系结构和编程方法。我了解了STM32的核心、外设和中断等基本概念,以及寄存器的配置和操作方法。我还学习了如何使用标准外设库和HAL库来简化开发过程,以及如何使用固件库和驱动程序来操作各种外设。

第四部分:通过实践提升技能 学习STM32最重要的一点是通过实践来提升技能。我通过完成一些简单的项目来巩固所学的知识,如控制LED的闪烁、读取按键的状态、驱动LCD显示器等。在实践中,我遇到了很多问题和挑战,但通过不断尝试和调试,我逐渐解决了这些问题,并提升了自己的技能。

总结: 学习STM32是一项具有挑战性但也非常有趣的任务。通过选择合适的学习资源、掌握基本的开发工具、理解STM32的体系结构和编程方法,并通过实践来提升技能,我能够逐渐掌握STM32的开发技巧。在学习的过程中,我也体会到了困难和挫折,但通过坚持不懈的努力,我相信我会在STM32的学习和应用中取得更大的进步。希望我的经验能够对其他初学者有所帮助,共同进步!

21物联网应用技术2班  韦力  20210320044文章来源地址https://www.toymoban.com/news/detail-743371.html

到了这里,关于用STM32单击按键实现LED闪烁和双击按键实现LED呼吸灯效果的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • antd table的单击事件和双击事件冲突

    问题:当table上同时有onClick和onDoubleClick时,双击会一直触发单击事件。 解决方法:使用延迟定时器-setTimeout                   单击事件延迟执行,如果检测到连续点击,则是双击事件,不再执行单击事件。 代码实现:

    2024年01月25日
    浏览(60)
  • 按键状态机(实现单击,长按,双击)的模块分享

    目录 一、相关说明 二、分析 三、模块代码 三、代码讲解 四、作者的话         1.需要的资源:一个定时器,一个按键。         2.相关设置:利用定时器计时中断,10ms进行一次按键扫描。         3.使用说明:定时器中断的优先级要设置高一点,相关的宏定义可以

    2024年02月07日
    浏览(70)
  • STM32--实现LED闪烁

    目录 使用的开发板是:奋斗版STM32开发板V2​ 一、参考开发手册 二、GPIO功能描述 三、GPIO寄存器概念 2.3.1 端口配置低寄存器(GPIOx_CRL) (x=A..E) 2.3.3 端口输入数据寄存器(GPIOx_IDR) (x=A..E) 四、开始实现LED灯闪烁

    2024年02月09日
    浏览(39)
  • (STM32基础)STM32实现LED闪烁&LED流水灯&蜂鸣器

    1、按照新建工程步骤创建工程,新建start、library、user三个文件夹,从固件库添加相应文件 2、keilkil小程序用来清理listings和objects文件夹中编译产生的中间文件,以后需要打包工程的话可以先用keilkill先清理,这样文件夹会大大缩小所占内存。 在library中可以查看外设函数库,

    2024年02月07日
    浏览(58)
  • Unity InputSystem 实现同一按键单击、双击、长按执行不同逻辑

    最近学习了一下Unity InputSystem。该系统可用于实现、管理复杂的操作逻辑,上限很高。但由于它有一定的学习成本,导致一些和我一样的小白一入门时不得要领。之前卡住我的一个需求就是通过InputSystem 实现同一按键单击、双击、长按执行不同逻辑。例如点击单位执行攻击、

    2024年02月05日
    浏览(59)
  • 【RuoYi移动端】uni-app中的单击和双击事件

     @click=\\\"enterpriseSelect\\\"  @touchend=\\\"userinfo\\\"

    2024年02月08日
    浏览(54)
  • 嵌入式-stm32-用PWM点亮LED实现呼吸灯

    答:LED需要低电平才能亮,高电平是灯灭。 答:这是用到不同占空比来实现的,控制LED实现呼吸灯,就是通过占空比的高低电平和其持续时间来实现。 ①例如,要定时500ms,则:PSC=7199,ARR=4999,Tclk=72Mhz。 ②假如频率为 2kHz ,则:PSC=71,ARR=499, 频率和周期是描述波形的两个基

    2024年02月03日
    浏览(97)
  • 使用STM32和C51实现LED闪烁(仿真+程序)

    1、新建程序(如下图) 先点击project,在单击new uvision project。 2.命名文件 3.生成main文件 (右键source group再点击Add new item…) 点击c File (.c) 4.在main.c项目中输入以下代码 5.生成 .hex 文件 魔术棒- Output - 勾选Create HEX File - ok 1.上传.hex文件到proteus 双击芯片在program file 中选择刚刚

    2024年02月04日
    浏览(43)
  • STM32——led灯的点亮+闪烁+流水灯的实现

    1.原理 其方式有两种一种是寄存器方式一种是库函数方式,但其原理都是一样的。如原理图所示,与LED相连接的IO口置低电平即可点亮led灯 2.寄存器方式–代码 3.库函数–代码 (1)led.c:函数led_config() (2)main.c调用led_config 4.结果展示 原理:让连接的IO口先置零再置1可以使其先亮

    2024年02月08日
    浏览(56)
  • 【蓝桥杯嵌入式】定时器实现按键单击,双击,消抖以及长按的代码实现

    🎊【蓝桥杯嵌入式】专题正在持续更新中,原理图解析✨,各模块分析✨以及历年真题讲解✨都在这儿哦,欢迎大家前往订阅本专题,获取更多详细信息哦🎏🎏🎏 🪔本系列专栏 -  蓝桥杯嵌入式_勾栏听曲_0的博客 🍻欢迎大家  🏹  点赞👍  评论📨  收藏⭐️ 📌个人主

    2024年01月17日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包