文章目录

  • 前言
  • 一、准备工作
  • 二、点亮一盏LED灯
    • 1.配置工程
    • 2.代码实现
    • 3.程序烧录注意
  • 三、按键控制LED灯
    • 1.配置工程
    • 2.代码实现
      • 按键控制
      • 按键进阶1:
      • 按键进阶2
    • 3.基于自己理解写的多次按键控制
  • 总结

前言

单片机相当于是一种微型的电脑,我们可以利用它实现许多功能,而stm32以其独特的性能优势脱颖而出,很多人都开启了学习stm32的学习,本文就来记录一下我学习最小系统板stm32f411CEU6的小小历程以及学习的基础内容,希望能以这种方式让自己进步,内容相当基础,大佬勿喷。

一、准备工作

我主要学习的是基于HAL库进行开发的内容,需要提前下载好keil 5,STM32CubeMX的软件,买好单片机、调试器以及杜母线。

二、点亮一盏LED灯

提示:点亮LED灯算得上是每个人学习stm32的最最基础部分

1.配置工程

首先应该在cubeMX中根据自己的芯片原理图配置自己LED灯的GPIO引脚,我的是PC13,即配置它就好了。如图所示:


LED的低电平与GND接近,低电平则亮;反之高电平与VCC接近,则灭。
因此,选择high是为了在最初时LED灯是灭的,再经过我们的代码实现灯亮。output push pull(推挽输出)具有一定的驱动能力,有接VCC和GND的两个开关,即3.3V和0V两种电压。而开漏输出则只有接GND的一个开关,故有可能出现0~3.3V的不确定任意值,所以一般少用。

2.代码实现

在main.c的while中的bigin与end之间写代码,否则之后会消失。

HAL_GPIO_WritePin (GPIOC,GPIO_PIN_13,GPIO_PIN_RESET);
//让LED由高电平(灭)变为低电平(亮)
HAL_Delay(1000);//延迟1000ms
HAL_GPIO_WritePin (GPIOC,GPIO_PIN_13,GPIO_PIN_SET);
//再高电平
HAL_Delay(1000);//延迟1000ms

3.程序烧录注意

由于我使用的并非ST-Link,所以需要进行一些修改,根据自己情况进行选择。


修改完成后编译、下载即可。

三、按键控制LED灯

1.配置工程

LED部分和之前一样,以下为KEY部分

如图所示:

2.代码实现

按键控制

仍在main.c的while中的begin与end之间写代码.
代码如下:

if(HAL_GPIO_ReadPin (GPIOA,GPIO_PIN_0 )==GPIO_PIN_RESET)HAL_GPIO_WritePin (GPIOC,GPIO_PIN_13,GPIO_PIN_RESET);
else HAL_GPIO_WritePin (GPIOC,GPIO_PIN_13,GPIO_PIN_SET);

按键进阶1:

 MX_GPIO_Init();/* USER CODE BEGIN 2 */uint8_t flag=0;//提前定义该种状态/* USER CODE END 2 */if(HAL_GPIO_ReadPin (GPIOA,GPIO_PIN_0 )==GPIO_PIN_RESET&&flag==0 ){HAL_Delay (10);//消抖if(HAL_GPIO_ReadPin (GPIOA,GPIO_PIN_0 )==GPIO_PIN_RESET&&flag==0 ) {flag=1;HAL_GPIO_TogglePin (GPIOC,GPIO_PIN_13);//翻转电平}}
if(HAL_GPIO_ReadPin (GPIOA,GPIO_PIN_0 )==GPIO_PIN_SET&&flag==1 ){HAL_Delay (10);//消抖if(HAL_GPIO_ReadPin (GPIOA,GPIO_PIN_0 )==GPIO_PIN_SET&&flag==1 ) flag=0;//由于用的是TogglePin这个函数,相对于WritePin在这里用更加简便,直接让flag=0回到之前的循环,再翻转电平,这就是定义了flag的优点}

这两种代码实现的效果是不同的:第一种是按下就亮,松开就灭;第二种是按一下亮,再按一下灭,如此循环。

按键进阶2

利用回调函数优化进阶1中的代码,由于我的单片机只有一个LED,所以写不写这个函数实现都无所谓,不过这种方法确实有必要掌握,可以使得代码内部模块化,当有多个LED需要控制时,这种方法可以很好地简化内部结构,更方便理解。

可以导入一个自己定义的头文件,在其中写自己定义的函数,把flag变为数组的形式,因此可以调用多个LED灯,其他思想是类似的。


3.基于自己理解写的多次按键控制

由于之前一直不能体会到TogglePin函数于WritePin的各自妙用,也尝试着用WritePin来写这个按两次亮,再按两次灭的功能,但均以败告终,后来才发现TogglePin可以很好地实现

 /* USER CODE BEGIN 2 */uint8_t flag=0;/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){if(HAL_GPIO_ReadPin (GPIOA,GPIO_PIN_0 )==GPIO_PIN_RESET&&flag==0 ){HAL_Delay (10);if(HAL_GPIO_ReadPin (GPIOA,GPIO_PIN_0 )==GPIO_PIN_RESET&&flag==0 ) flag=1;}if(HAL_GPIO_ReadPin (GPIOA,GPIO_PIN_0 )==GPIO_PIN_SET&&flag==1 ){HAL_Delay (10);if(HAL_GPIO_ReadPin (GPIOA,GPIO_PIN_0 )==GPIO_PIN_SET&&flag==1 ) flag=2;}if(HAL_GPIO_ReadPin (GPIOA,GPIO_PIN_0 )==GPIO_PIN_RESET&&flag==2 ){HAL_Delay (10);if(HAL_GPIO_ReadPin (GPIOA,GPIO_PIN_0 )==GPIO_PIN_RESET&&flag==2 ) {flag=3;HAL_GPIO_TogglePin (GPIOC,GPIO_PIN_13);}}if(HAL_GPIO_ReadPin (GPIOA,GPIO_PIN_0 )==GPIO_PIN_SET&&flag==3 ) flag=0;

效果确实比较low,但是也算是有自己的想法吧

总结

以上就是今天分享的内容,本文仅仅简单介绍了点亮LED灯以及按键控制LED灯,本人刚学,还有众多不足之处,请各位多多包涵,愿各位能够不吝赐教。

记录1——stm32f411CEU6之点亮一盏LED灯+按键控制LED灯相关推荐

  1. ZYNQ学习笔记(五)---按键控制LED灯亮灭实验

    这个实验其实很早就做了,但是由于这段时间自己一直在忙一些其他的事所以没有及时更新.今天抽出个空来更新一下.本次实验是关于按键控制LED亮灭.其中涉及到的内容有计数器.按键消抖以及一些简单的逻辑. 1. ...

  2. 【tiny4412】按键控制led灯亮灭

    前言:使用友善之臂tiny4412进行嵌入式学习,对于初学者而言并不是一件轻松事情,即使该平台已经存在很多年,网上也有很多分享,但由于官方文档相对还是不够全面,导致很多初学者遇到问题不知如何下手,如果 ...

  3. STM32F072 Nucleo笔记2-利用STM32CuBeMX创建工程并用按键控制LED的亮灭

    STM32F072 Nucleo学习笔记2-利用STM32CuBeMX创建工程并用按键控制LED的亮灭 本文例子用到: 1.  STM32F072 Nucleo开发板 2.  STM32CubeMX软 ...

  4. c51按键控制灯亮汇编语言,用一个按键控制LED灯亮/暗的汇编程序

    今天又搞了一个小汇编,是用一个按键控制LED灯亮/暗的汇编程序.程序编好后,开始编译,发现又是通不过,找了好几遍也没找到原因,后来找枫雪大哥看了,才找出原因,原来编写程序时不能在中文环境下编写,不然就 ...

  5. STM32按键控制LED灯亮灭(四)

    编程要点: 1)使能GPIO端口时钟: 2)初始化GPIO目标引脚为输入模式(浮空输入): 3)编写简单测试程序,检测按键的状态,实现按键控制LED灯: bsp_led.h文件 #ifndef T_L ...

  6. 用51单片机实现按键控制LED灯亮灭

    用51单片机实现按键控制LED灯亮灭 #include<reg51.h>//头文件 sbit LED=P2^0;//位定义LED灯 sbit k1=P3^1;//位定义按键 void de ...

  7. 单片机C51(STC89C52RC)独立按键控制LED亮灭、状态、显示二进制、位移

    目录 1.独立按键控制LED灯亮灭 2.独立按键控制LED灯状态 3.独立按键控制LED灯显示二进制 4.独立按键控制LED灯位移 5.附录 1.独立按键控制LED灯亮灭 独立按键控制LED灯状态,在 ...

  8. verilog 按键控制LED的亮灭状态

    主要功能:按下按键0,从左到右点亮led;按下按键1,从右到左点亮led;按下按键2时,四个led间隔亮灭:按下按键3时,点亮全部led.亮灭间隔时间为0.5s,时钟为50MHz. //author ...

  9. Proteus:单片机用按键控制LED的亮灭

    题目概述: 单片机用按键控制LED的亮灭. 编程: #include <reg51.h> sbit beep=P1^5; sbit LED=P0^0; sbit k1=P1^0; void ...

最新文章

  1. 洛谷——P1014 Cantor表
  2. Web前端经典面试试题(一)
  3. 花呗分期计算器_花呗分期最多能分多久?
  4. (Android Studio)ActionBar's Theme/Style [ActionBar主题风格修改]
  5. bdbus_lxb下载
  6. 一道滴滴的产品面试题
  7. Fiddler抓包原理讲解以及实例操作
  8. prd移动端通用产品需求文档+Axure高保真app社交餐饮通用prd文档+产品业务说明+通用prd文档+通用prd模板+全局说明+需求分析+竞品分析+产品结构图+产品业务流程图+产品信息图+餐饮系统
  9. eclipse翻译插件,支持最新版eclipse 2022-09
  10. qc中的流程图怎么画_QC常用手法_流程图详解.ppt
  11. opencv实现电子试卷图片中对号、错误的检测
  12. 强大!用 60 行代码自动抢微信红包
  13. 时间序列模型c语言,时间序列分析步骤及sas代码
  14. 在函数前面加上WINAPI、CALLBACK
  15. Atom | 用最酷的编辑器 写最美的代码
  16. 怎么查看正在连接的无线网密码
  17. 如何远程操作另一台电脑,看这里就够了,远程控制另一台电脑的操作
  18. 网络安全笔记-17-单臂路由
  19. 安卓系统Remix_OS 的vmware虚拟机安装
  20. 59.qt quick-qml调色板(颜色取色器)实现、自定义QQuickStyle样式

热门文章

  1. 善用云函数,开源节流,小程序后端使用云函数案例
  2. (转)基金知识综合帖
  3. Python爬虫代理IP(代理池)——加载和使用
  4. wxappUnpacker 微信小程序反编译 2019 9月使用问题总结
  5. Java图片相似度,图像识别
  6. 线性方程组什么时候无解?多个解?唯一解?
  7. 记录达梦一次IO问题的分析
  8. Win10开启telnet功能
  9. 京东购物车(html+css+js)
  10. 平均路径损耗、小尺度衰落、大尺度衰落的区别