【STM32】GPIO之LED(HAL库)

00. 目录

01. STM32概述

STM32是一款由意法半导体(STMicroelectronics,简称ST)公司制造的微控制器(MCU),它基于ARM Cortex-M内核设计,专为要求高性能、低成本、低功耗的嵌入式应用而设计。以下是对STM32的详细介绍:

产品概述

  • 内核:STM32采用了ARM Cortex-M系列内核,包括M0、M0+、M3、M4和M7等多种系列,能够满足不同应用场景的需求。
  • 特点:高性能、低成本、低功耗、可裁剪,这些特点使得STM32在嵌入式开发领域具有广泛的应用前景。
  • 应用领域:STM32微控制器广泛应用于工业自动化、汽车电子、消费电子、物联网、无人机、嵌入式设备等多个领域。

产品系列

STM32系列微控制器按照内核架构和性能特点可以分为多个系列,主要包括:

  • 主流产品:如STM32F0、STM32F1、STM32F3等,适用于一般的嵌入式应用。
  • 超低功耗产品:如STM32L0、STM32L1、STM32L4等,专为低功耗设计,适用于对功耗要求较高的应用。
  • 高性能产品:如STM32F2、STM32F4、STM32F7、STM32H7等,具有更高的处理速度和更强的外设功能,适用于需要高性能的应用场景。

技术特点

  • 高性能:STM32微控制器的主频可达72MHz以上,能够满足各种高速数据处理需求。
  • 丰富的外设资源:STM32集成了GPIO、USART、SPI、I2C等多种外设资源,可满足各种通信和控制需求。
  • 低功耗:STM32采用了先进的低功耗技术,如休眠模式、待机模式等,可大幅降低功耗。
  • 易用的开发工具:STM32提供了丰富的开发工具,如Keil、IAR等,支持多种编程语言(如C、C++、汇编等),方便开发人员进行开发和调试。

02. 硬件原理图

硬件只有 LED(DS0 和 DS1)。其电路在 ALIENTEK 战舰 STM32F103 上默认是已经连接好了的。DS0 接 PB5,DS1 接 PE5。
在这里插入图片描述

03. 程序示例一

GPIO 相关的函数和定义分布在 HAL库文件 stm32f1xx_hal_gpio.c 和头文件 stm32f1xx_hal_gpio.h 文件中。

LED0不断地闪烁

led.h

#ifndef __LED_H__


#define __LED_H__

#include "stm32f1xx.h"

//LED初始化
void led_init(void);

void led0_on(void);
void led1_on(void);
void led0_off(void);
void led1_off(void);


#endif /*__LED_H__*/

led.c

#include "led.h"


//LED初始化  DS0接PB5  DS1接PE5
void led_init(void)
{
	GPIO_InitTypeDef GPIO_Init;

	//使能对应的时钟
	__HAL_RCC_GPIOB_CLK_ENABLE();
	//使能对应的时钟
	__HAL_RCC_GPIOE_CLK_ENABLE();
	
	
	//PB5
	GPIO_Init.Mode = GPIO_MODE_OUTPUT_PP;
	GPIO_Init.Pin = GPIO_PIN_5;
	GPIO_Init.Pull = GPIO_PULLUP;
	GPIO_Init.Speed = GPIO_SPEED_FREQ_HIGH;
	HAL_GPIO_Init(GPIOB, &GPIO_Init);

	//PE5
	GPIO_Init.Mode = GPIO_MODE_OUTPUT_PP;
	GPIO_Init.Pin = GPIO_PIN_5;
	GPIO_Init.Pull = GPIO_PULLUP;
	GPIO_Init.Speed = GPIO_SPEED_FREQ_HIGH;
	HAL_GPIO_Init(GPIOE, &GPIO_Init);

	//默认DS0和DS1处于灭的状态
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOE, GPIO_PIN_5, GPIO_PIN_SET);	
}


void led0_on(void)
{
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET);

}

void led1_on(void)
{
	HAL_GPIO_WritePin(GPIOE, GPIO_PIN_5, GPIO_PIN_RESET);	

}


void led0_off(void)
{
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);

}


void led1_off(void)
{
	HAL_GPIO_WritePin(GPIOE, GPIO_PIN_5, GPIO_PIN_SET);	
}

main.c

#include "stm32f1xx.h"
#include "sys.h"
#include "led.h"
#include "delay.h"


int main(void)
{
	GPIO_InitTypeDef GPIO_Initure;
     
    HAL_Init();                    	 			  
    Stm32_Clock_Init(RCC_PLL_MUL9);   
	delay_init(72);
	
	led_init();


	while(1)
	{
		led0_on();
		delay_ms(1000);
		
		led0_off();
		delay_ms(1000);	
	}
	
}

程序下载:01-LED.rar

04. 程序示例二

LED0和LED1交替亮灭

led.h

#ifndef __LED_H__


#define __LED_H__

#include "stm32f1xx.h"

//LED初始化
void led_init(void);

void led0_on(void);
void led1_on(void);
void led0_off(void);
void led1_off(void);


#endif /*__LED_H__*/

led.c

#include "led.h"


//LED初始化  DS0接PB5  DS1接PE5
void led_init(void)
{
	GPIO_InitTypeDef GPIO_Init;

	//使能对应的时钟
	__HAL_RCC_GPIOB_CLK_ENABLE();
	//使能对应的时钟
	__HAL_RCC_GPIOE_CLK_ENABLE();
	
	
	//PB5
	GPIO_Init.Mode = GPIO_MODE_OUTPUT_PP;
	GPIO_Init.Pin = GPIO_PIN_5;
	GPIO_Init.Pull = GPIO_PULLUP;
	GPIO_Init.Speed = GPIO_SPEED_FREQ_HIGH;
	HAL_GPIO_Init(GPIOB, &GPIO_Init);

	//PE5
	GPIO_Init.Mode = GPIO_MODE_OUTPUT_PP;
	GPIO_Init.Pin = GPIO_PIN_5;
	GPIO_Init.Pull = GPIO_PULLUP;
	GPIO_Init.Speed = GPIO_SPEED_FREQ_HIGH;
	HAL_GPIO_Init(GPIOE, &GPIO_Init);

	//默认DS0和DS1处于灭的状态
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOE, GPIO_PIN_5, GPIO_PIN_SET);	
}


void led0_on(void)
{
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET);

}

void led1_on(void)
{
	HAL_GPIO_WritePin(GPIOE, GPIO_PIN_5, GPIO_PIN_RESET);	

}


void led0_off(void)
{
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);

}


void led1_off(void)
{
	HAL_GPIO_WritePin(GPIOE, GPIO_PIN_5, GPIO_PIN_SET);	
}

main.c

#include "stm32f1xx.h"
#include "sys.h"
#include "led.h"
#include "delay.h"


int main(void)
{  
    HAL_Init();                    	 			  
    Stm32_Clock_Init(RCC_PLL_MUL9);   
	delay_init(72);
	
	led_init();


	while(1)
	{
		led0_on();
		led1_off();
		delay_ms(1000);
		
		led0_off();
		led1_on();
		delay_ms(1000);	
	}
	
}

程序下载:02-LED.rar

05. 附录

网址:【STM32】STM32系列教程汇总

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值