使用HAL库和标准库点亮Stm32 LED灯

一. 原理

1.1 具象化理解

        日常生活中我们要点亮房间的灯,就是按开关。背后的本质,用初中物理的话说就是两个要素:形成闭合回路;给用电器电压。

1.2 回归板子

        单片机就是一个小型的集成电路,LED作为电路中的用电器也需要这两个要素。需要注意的是,发光二极管具有单向导通性,不同的单片机电路情况不同,点亮led需要给高电压还是低电压需要结合板子原理图具体分析。

二. 看懂原理图

图1 两种led电路示意图

        点亮led的关键在于同led连接的IO口输出给led电平的高低状况,也就是一个led灯是高电平点亮还是低电平点亮。图1我给出了两种点亮情况的电路示意图,表示板子在实际运行过程中的工作原理,便于大家理解,但是灰色方框的内容在板子原理图中不会体现。

        ①中的led一端接IO口,另一端接VCC(电源)。根据发光二极管单向导电性可知,IO口输出低电平时,led点亮。所以,①电路表示led低电平点亮。

        同理可知,②电路另一端接GND(地),所以,②电路表示led高电平点亮。

三. 配置

3.1  标准库

3.1.1  流程(猪肉白菜饺子版)

        时钟(定上闹钟几点和面几点包饺子)——初始化GPIO(需要的猪肉白菜盐什么材料全准备全)——主函数(动手包饺子)

3.1.2  代码

        首先,配上时钟。

        然后,初始化GPIO。(为什么是GPIO)因为只有一个点灯的功能,所以只用改变输出的高低电平就行了。初始化有一个套路(总分总结构);GPIO有三个固定成分:MODE(模式:输出模式)、SPEED(频率:一般都所用板子的最高频率)、PIN(LED的引脚),这两个要素构成了GPIO的初始化。            (我会单独开一篇如何学会自己配置初始化固定成分后面的东西。)

//led.c代码
#include "led.h"
void LED_Init(void)
{
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);	 //使能PC端口时钟

//总分总形式
 GPIO_InitTypeDef  GPIO_InitStructure;//结构体开头
//三个固定成分
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;				 //PC13端口配置
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO口速度为50MHz
//结尾
 GPIO_Init(GPIOC, &GPIO_InitStructure);					 //根据设定参数初始化GPIOC.13
}

        最后写主函数,就是你想让灯亮几下,亮多久,自行定义。

//main.c文件代码
#include "delay.h"
#include "main.h"
#include "stm32f10x.h"


 int main(void)
 {	
	delay_init();	    	 //延时函数初始化	  
	LED_Init();		  	//初始化与LED连接的硬件接口
	while(1)
	{
//以下可以自己定义
	GPIO_SetBits(GPIOC,GPIO_Pin_13);
    delay_ms(500);
	GPIO_ResetBits(GPIOC,GPIO_Pin_13);
	delay_ms(500);	//延时300ms
	}
 }

3.2  HAL库

3.2.1  CubeMx配置

图2 配置1

图3 配置2

图4 配置3

图5 配置4

图7 配置六

3.2.2  代码

        因为Cube已经把需要的初始化都配好了,所以写下主函数就可以。

注意:1.写主函数之前先编译,排除配置错误。

           2.代码要写在BEGIN和END中间,否则修改Cube配置再次生成的时候代码会被清空!

图8 注意事项

        主要要学会HAL_GPIO_TogglePin(电平翻转函数)和HAL_GPIO_WritePin(控制电平高低函数)。具体配置方法有两种:

        第一种:写函数的时候会自动弹出所需要配置的参数如图9所示,按照提示配置即可。

图9

        如果想进一步了解函数,用第二种方法:选中想了解的函数,右击,选择查看定义如图10所示。

图10

        定义里面有函数的简介和函数所需配置参数的介绍如图11所示。在图11显示的整个.c文件里有关于GPIO所有的函数,如果想要开发更多GPIO写法,在该文件夹里找到心怡函数按照函数定义和介绍来实现功能配置即可。

图11

 //主函数代码中在while函数中添加
 while (1)
  {
    /* USER CODE END WHILE */
    
    /* USER CODE BEGIN 3 */
//自定义部分
        HAL_Delay(500);
		HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);//电平翻转函数
		HAL_Delay(500);

  }
  /* USER CODE END 3 */

四. 总结

       我把基础知识用很通俗的语言讲解出来了,就是希望大家能很快的理解并掌握应用,最终爱上嵌入式。虽然点灯很简单,但是只有先把点灯认真理解了,自己学着例程写才能更轻松扎实的学习后面的知识,才能让你真正会自己写代码。而不是学了很久之后还是没办法脱离别人的代码,只会照着例程改。

物联沃分享整理
物联沃-IOTWORD物联网 » 使用HAL库和标准库点亮Stm32 LED灯

发表回复