STM32—点亮一颗LED灯

一、前序

1.1

LED常见接线方式
在这里插入图片描述

1.2硬件清单

  • 上官二号
  • ST-link
  • 实现亮灭

1.3如何在keil5中添加led.c,led.h

1.3.1

在这里插入图片描述

1.3.2

在这里插入图片描述
此时,led已添加完成,编写代码。

二、内容

1.1 led.c

首先需要配置GPIO初始化其内时钟使能,时钟使能此函数在rcc.h里面寻找,GPIO初始在gpio.c文件里面寻找,GPIO_InitTypeDef需要定义一个结构体外设

__HAL_RCC_GPIOB_CLK_ENABLE();

在这里插入图片描述

HAL_GPIO_Init(GPIO_TypeDef  *GPIOx, GPIO_InitTypeDef *GPIO_Init)

GPIO_InitTypeDef定义

 	GPIO_InitTypeDef gpio_initstruct;
 	
    gpio_initstruct.Pin = GPIO_PIN_8;
    gpio_initstruct.Mode = GPIO_MODE_OUTPUT_PP;
    gpio_initstruct.Pull = GPIO_PULLUP;
    gpio_initstruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(GPIOB, &gpio_initstruct);

点亮led1需要用到HAL_GPIO_WritePin*()函数,默认led高电平,所以低电平有效,即GPIO_PIN_RESET

void led1_on(void)
{
    HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET);
}

熄灭led1函数,即高电平有效

void led1_off(void)
{
    HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET);
}

总代码

#include "led.h"
#include "sys.h"

//初始化GPIO函数
void led_init(void)
{
    GPIO_InitTypeDef gpio_initstruct;    //定义结构体外设
    //打开时钟
    __HAL_RCC_GPIOB_CLK_ENABLE();
    
    //调用GPIO初始化
    gpio_initstruct.Pin = GPIO_PIN_8;
    gpio_initstruct.Mode = GPIO_MODE_OUTPUT_PP;
    gpio_initstruct.Pull = GPIO_PULLUP;
    gpio_initstruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(GPIOB, &gpio_initstruct);
    //关闭LED
}
//点亮LED1的函数
void led1_on(void)
{
    HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET);
    
}

//熄灭LED1函数
void led1_off(void)
{
    HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET);
}

//翻转LED1状态的函数
void led1_toggle(void)
{
    HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8);
}

1.2 main.c

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


int main(void)
{
    HAL_Init();                         /* 初始化HAL库 */
    stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */
    led_init();
    

    while(1)
    {
        led1_on();
        delay_ms(500);
        led1_off();
        delay_ms(500);

    }
}

1.3 led.h

#ifndef _LED_H_
#define _LED_H_

void led_init(void);
void led1_on(void);
void led1_off(void);
void led1_toggle(void);

#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值