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


前言

单片机相当于是一种微型的电脑,我们可以利用它实现许多功能,而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灯,本人刚学,还有众多不足之处,请各位多多包涵,愿各位能够不吝赐教。

  • 7
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Dynamic Efficiency Line with BAM (Batch Acquisition Mode) – 1.7 V to 3.6 V power supply – - 40°C to 85/105/125 °C temperature range • Core: Arm ® 32-bit Cortex ® -M4 CPU with FPU, Adaptive real-time accelerator (ART Accelerator™) allowing 0-wait state execution from Flash memory, frequency up to 100 MHz, memory protection unit, 125 DMIPS/1.25 DMIPS/MHz (Dhrystone 2.1), and DSP instructions • Memories – Up to 512 Kbytes of Flash memory – 128 Kbytes of SRAM • Clock, reset and supply management – 1.7 V to 3.6 V application supply and I/Os – POR, PDR, PVD and BOR – 4-to-26 MHz crystal oscillator – Internal 16 MHz factory-trimmed RC – 32 kHz oscillator for RTC with calibration – Internal 32 kHz RC with calibration • Power consumption – Run: 100 µA/MHz (peripheral off) – Stop (Flash in Stop mode, fast wakeup time): 42 µA Typ @ 25C; 65 µA max @25 °C – Stop (Flash in Deep power down mode, slow wakeup time): down to 9 µA @ 25 °C; 28 µA max @25 °C – Standby: 1.8 µA @25 °C / 1.7 V without RTC; 11 µA @85 °C @1.7 V – V BAT supply for RTC: 1 µA @25 °C • 1×12-bit, 2.4 MSPS A/D converter: up to 16 channels • General-purpose DMA: 16-stream DMA controllers with FIFOs and burst support • Up to 11 timers: up to six 16-bit, two 32-bit timers up to 100 MHz, each with up to four IC/OC/PWM or pulse counter and quadrature (incremental) encoder input, two watchdog timers (independent and window) and a SysTick timer • Debug mode – Serial wire debug (SWD) & JTAG interfaces – Cortex ® -M4 Embedded Trace Macrocell™ • Up to 81 I/O ports with interrupt capability – Up to 78 fast I/Os up to 100 MHz – Up to 77 5 V-tolerant I/Os • Up to 13 communication interfaces – Up to 3 x I 2 C interfaces (SMBus/PMBus) – Up to 3 USARTs (2 x 12.5 Mbit/s, 1 x 6.25 Mbit/s), ISO 7816 interface, LIN, IrDA, modem control) – Up to 5 SPI/I2Ss (up to 50 Mbit/s, SPI or I2S audio protocol), SPI2 and SPI3 with muxed full-duplex I 2 S to achieve audio class accuracy via internal audio PLL or external clock – SDIO interface (SD/MMC/eMMC) – Advanced connectivity: USB 2.0 full-speed device/host/OTG controller with on-chip PHY • CRC calculation unit • 96-bit unique ID • RTC: subsecond accuracy, hardware calendar • All packages (WLCSP49, LQFP64/100, UFQFPN48, UFBGA100) are ECOPACK ® 2 Table 1. Device summary Reference Part number STM32F411xC STM32F411CC, STM32F411RC, STM32F411VC STM32F411xE STM32F411CE, STM32F411RE, STM32F411VE WLCSP49 ???? UFQFPN48 (7 × 7 mm) UFBGA100 (7 × 7 mm) (2.999x3.185 mm) LQFP100 (14 × 14mm) LQFP64 (10x10 mm) www.st.com Contents STM32F411xC STM32F411xE

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Drawing Ting

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值