一、前序
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