GD32之路灯样例

分享作者:the_next
作者昵称:the_next
评测品牌:兆易创新
评测型号:GD32VW553-MD1-IMH7
发布时间:2026-01-12 09:57:04
2
概要
使用GD32VW553做一个路灯的例子
开源口碑分享内容

在我们的生活中,夜晚降临时,环境光强不够,路边的路灯就会亮起;而到了白天,环境光强足够时,路灯就会熄灭。

本次是基于IO的输入输出做一个例子,结合了光敏模块和LED灯来实现功能。在开始前先声明一下我的引脚,PA0是光敏模块DO口的输入引脚,PA1是LED灯负极的引脚,LES的正极是连接电源。当环境光强不够时光敏模块的DO口会输入低电平,此时就需要把LED灯负极的PA1端口设置为低电平。反之,光强足够就输出高电平,LED的负极设置为高电平。

以下是AI编写的代码,不太严谨,仅供参考。有学过STM32 Hal库的话,大家应该是知道set函数应该是把引脚置为高电平,而这里我却当时在演示实物没有实现LED亮起,于是我把set和reset两个函数互调了一下,成功实现了这个功能。我也不清楚这里面到底是为什么会这样子,如果有人能够指出的话,非常感谢。

#include "gd32vw55x.h"

#include "systick.h"

#include "gd32vw553h_eval.h"

#include <stdio.h>

void hardware_init(void)

{

/* 使能GPIOA时钟 */

rcu_periph_clock_enable(RCU_GPIOA);

/* 配置A0引脚:输入模式,无上下拉(适配光敏电阻DO) */

gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_0);

/* 配置A1引脚:输出模式,推挽,25MHz速度,无上下拉(控制LED) */

gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_1);

gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_25MHZ, GPIO_PIN_1);

/* 初始状态:A1高电平 → LED熄灭(因为LED低电平导通) */

gpio_bit_set(GPIOA, GPIO_PIN_1);

}

int main(void)

{

/* 配置系统滴答定时器(用于延时) */

systick_config();

/* 初始化硬件 */

hardware_init();

while(1) {

/* 读取A0引脚电平(光敏电阻DO),消抖延时10ms */

delay_1ms(10);

/* 判定逻辑:

- 遮光 → 光敏电阻DO输出低电平(RESET)→ A1输出低电平 → LED亮

- 环境亮 → 光敏电阻DO输出高电平(SET)→ A1输出高电平 → LED灭

*/

if(RESET == gpio_input_bit_get(GPIOA, GPIO_PIN_0)) {

// 遮光:A1输出低电平,LED点亮

gpio_bit_set(GPIOA, GPIO_PIN_1);

} else {

// 环境亮:A1输出高电平,LED熄灭

gpio_bit_reset(GPIOA, GPIO_PIN_1);

}

}

}

最后就是展示一下不同光强下,LED灯的效果。左边是有光(我当时是拿着一个小台灯)打过来,LED熄灭;右边是环境光强不足,LED亮起。

全部评论
暂无评论
0/144