Stm32点亮LED灯(HAL库和标准库)

一. 原理

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 */

四. 总结

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

  • 48
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在使用STM32HALLED的例程中,可以使用HAL提供的函数来配置和控制GPIO引脚。具体步骤如下: 1. 首先,在代码中引入HAL的头文件,例如"stm32f4xx_hal.h"。 2. 初始化HAL,包括系统时钟、GPIO引脚等配置。 3. 使用HAL提供的函数来配置需要使用的GPIO引脚为输出模式,例如使用HAL_GPIO_Init函数。 4. 使用HAL提供的函数来控制GPIO引脚的电平,从而点LED。例如使用HAL_GPIO_WritePin函数将GPIO引脚置为高电平或低电平。 这样,通过以上步骤就可以使用STM32HALLED了。 <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [STM32L151C8T6基于HALLED](https://download.csdn.net/download/David1230011/12746850)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [STM32_HAL_点LED](https://blog.csdn.net/m0_73066573/article/details/130649805)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值