ARM32开发——LED点灯

🎬 秋野酱:《个人主页》

🔥 个人专栏:《Java专栏》《Python专栏》

⛺️心若有所向往,何惧道阻且长

文章目录

点灯的两种方式

不同颜色LED,达到相同亮度,对应的电压不同,通常需要接入220Ω到10KΩ的限流电阻,阻值越小,LED越亮,反之LED越暗,以下两种方式皆可。

灌入电流法

灌入电流接法:LED亮灯供电VCC由芯片外部提供,灌入MCU的GPIO_PIN引脚

● 优点:可提供较大电压电流,让灯更亮

● 缺点:外部电源大幅变化时,可能导致MCU引脚烧毁。

输出电流法

输出电流法:由MCU提供正极供电,使用推挽输出模式可以让一般LED亮起。通常接小LED用这种接法。

● 优点:安全可控

● 缺点:驱动能力有限

扩展板点灯

LED驱动包含什么功能?

  1. 初始化4个LED灯
  2. 打开某一个灯
  3. 关闭某一个灯

点灯方式

● 初始化所有IO为推挽输出模式

● 默认将总开关LED_SW拉高,总开关关闭

● 默认将所有LED1-8拉高,为关闭状态

● LED_SW总开关拉低导通(三极管为PNP型),所有LED阳极可有供电。

● 在总开关拉低导通时,任意LED直接拉低自己的IO即可点亮

点亮LED1-4

为了能够应对批量初始化的需求,我们可以定义结构体来描述参数:

csharp 复制代码
// 声明gpio初始化所需参数的结构体
typedef struct {
	rcu_periph_enum rcu;
	uint32_t port;
	uint32_t pin;
} Led_GPIO_t;

进而声明出所有的GPIO对应参数

csharp 复制代码
// 声明所有gpio对应参数的数组
Led_GPIO_t g_gpio_list[] = {
	{RCU_GPIOC, GPIOC, GPIO_PIN_6},        // LED_SW
	{RCU_GPIOD, GPIOD, GPIO_PIN_8},        // LED1
	{RCU_GPIOD, GPIOD, GPIO_PIN_9},        // LED2
	{RCU_GPIOD, GPIOD, GPIO_PIN_10},       // LED3
	{RCU_GPIOD, GPIOD, GPIO_PIN_11},       // LED4
};

完整实现

头文件声明

csharp 复制代码
#ifndef __BSP_LEDS_H__
#define __BSP_LEDS_H__

#include "gd32f4xx.h"

#define LED1	1
#define LED2	2
#define LED3	3
#define LED4	4

void bsp_leds_init();

void bsp_led_turn_on(uint8_t led_index);

void bsp_led_turn_off(uint8_t led_index);


#endif

c文件实现

csharp 复制代码
#include "bsp_leds.h"

// 声明gpio初始化所需参数的结构体
typedef struct {
	rcu_periph_enum rcu;
	uint32_t port;
	uint32_t pin;
} Led_GPIO_t;

// 声明所有gpio对应参数的数组
Led_GPIO_t g_gpio_list[] = {
	{RCU_GPIOC, GPIOC, GPIO_PIN_6},        // LED_SW
	{RCU_GPIOD, GPIOD, GPIO_PIN_8},        // LED1
	{RCU_GPIOD, GPIOD, GPIO_PIN_9},        // LED2
	{RCU_GPIOD, GPIOD, GPIO_PIN_10},       // LED3
	{RCU_GPIOD, GPIOD, GPIO_PIN_11},       // LED4
};

// 用于计算数组长度的宏
#define MAX_LED_COUNT	(sizeof(g_gpio_list) / sizeof(Led_GPIO_t))

/**********************************************************
 * @brief LED GPIO初始化
 **********************************************************/
static void GPIO_config(rcu_periph_enum rcu, uint32_t port, uint32_t pin){
	// 初始化为推挽输出模式
	rcu_periph_clock_enable(rcu);
	gpio_mode_set(port, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, pin);
	gpio_output_options_set(port, GPIO_OTYPE_PP, GPIO_OSPEED_MAX, pin);
}

void bsp_leds_init(){

	uint8_t count = MAX_LED_COUNT;
	for(uint8_t i = 0; i < count; i++){
		Led_GPIO_t gpio = g_gpio_list[i];
		// 初始化
		GPIO_config(gpio.rcu,gpio.port, gpio.pin);
		// 默认全部拉高(关闭)
		gpio_bit_write(gpio.port, gpio.pin, SET);
	}

	// 总开关拉低(打开)
	gpio_bit_write(g_gpio_list[0].port, g_gpio_list[0].pin, RESET);
}

// 开灯
void bsp_led_turn_on(uint8_t led_index){
		Led_GPIO_t gpio = g_gpio_list[led_index];
		gpio_bit_write(gpio.port, gpio.pin, RESET);
}

// 关灯
void bsp_led_turn_off(uint8_t led_index){
		Led_GPIO_t gpio = g_gpio_list[led_index];
		gpio_bit_write(gpio.port, gpio.pin, SET);
}

主文件调用

csharp 复制代码
#include "gd32f4xx.h"
#include "systick.h"
#include <stdio.h>

#include "bsp_leds.h"

/*********************
任务目标:

点亮LED1-4

**********************/

int main(void) {

  // 系统滴答定时器初始化
  systick_config();

  // IO引脚初始化
  bsp_leds_init();

  while(1) {

    bsp_led_turn_on(LED1);
    bsp_led_turn_on(LED2);
    bsp_led_turn_on(LED3);
    bsp_led_turn_on(LED4);
    // 休眠500ms
    delay_1ms(500);

    bsp_led_turn_off(LED1);
    bsp_led_turn_off(LED2);
    bsp_led_turn_off(LED3);
    bsp_led_turn_off(LED4);
    // 休眠1000ms
    delay_1ms(500);
  }

}
相关推荐
单片机杂货铺3 小时前
基于STM32的智能市政清洁小车系统设计
stm32·单片机·嵌入式硬件·物联网·硬件工程
单片机杂货铺3 小时前
基于STM32的智能书房系统的设计
stm32·单片机·嵌入式硬件·51单片机·硬件工程
普科PRBTEK4 小时前
电流探头的常见应用场景
单片机·嵌入式硬件
qq_401700414 小时前
3个常用的单片机实现隔离控制大电流负载例子
单片机·嵌入式硬件
weixin_456808385 小时前
【沁恒蓝牙开发】BLE常见错误码与解析
c语言·单片机·嵌入式硬件
电化学仪器白超5 小时前
禹衡光栅长度计精度评测:基于国标0级氧化锆量块的校正与数据分析
python·单片机·嵌入式硬件·物联网·自动化
LCMICRO-133108477466 小时前
国产长芯微LPS7118完全pin-pin替代ADP7118,是一款采用 CMOS 技术设计的低噪声、高 PSRR、快速瞬态响应、低压差线性稳压器
arm开发·单片机·嵌入式硬件·fpga开发·硬件工程·线性稳压器·adp7118
LCMICRO-133108477466 小时前
国产长芯微LM3042完全P2P替代LT3042,是一款高性能低压差线性稳压器
arm开发·单片机·嵌入式硬件·fpga开发·硬件工程·线性稳压器·lt3042
qq_401700416 小时前
TPS5430电源芯片18V转3V的电源电路,效率可高达90%
单片机·嵌入式硬件
hongmai6668887 小时前
ESP8684-WROOM-02C:一块被低估的RISC-V Wi-Fi模组
单片机·嵌入式硬件·物联网·5g·智能路由器·risc-v