当前位置: 首页 > news >正文

【西门子杯工业嵌入式-2-点亮一颗LED】

西门子杯工业嵌入式-2-点亮一颗LED

  • 一、课程回顾与目标
    • 1.上节课内容回顾
    • 2.本节课目标
  • 二、硬件连接与原理
    • 1. 硬件连接方式
    • 2. 连接实例
  • 三、GPIO原理知识
    • 1. GPIO结构
    • 2. 推挽输出模式原理
  • 四、软件实现步骤
    • 1. 项目结构设置
    • 2. 函数定义
    • 3. led.c 文件编写
      • 初始化函数 led_init
      • 交替闪烁函数 led_flash
  • 五、主函数调用逻辑
  • 六、下载与调试设置
  • 七、总结与思考

链接: B站视频

一、课程回顾与目标

1.上节课内容回顾

了解了GD32系列芯片的基本信息

熟悉了项目的开发目录结构

2.本节课目标

学会通过GPIO控制LED点亮

实践使用标准外设库进行GPIO配置

实现两个LED的交替闪烁

二、硬件连接与原理

1. 硬件连接方式

开发板未固定连接LED,需通过杜邦线自定义连接端口。

每个LED通过限流电阻连接至公共端(GND),即低电平熄灭,高电平点亮。
在这里插入图片描述
在这里插入图片描述

2. 连接实例

示例中选择了 PE2 和 PE3 两个GPIO口连接LED。
在这里插入图片描述

三、GPIO原理知识

1. GPIO结构

GD32F470VET6 提供最多82个GPIO引脚(GPIOA~GPIOE,每组16个引脚)
在这里插入图片描述

可配置为:

输入/输出

上拉/下拉/浮空

推挽输出 / 开漏输出

高/中/低速

2. 推挽输出模式原理

利用上下两个MOS管交替导通

高电平输出 ≈ 3.3V,低电平输出 ≈ 0V

驱动能力强,适合LED等负载
在这里插入图片描述

四、软件实现步骤

1. 项目结构设置

在 hardware/LED/ 文件夹下:

新建 led.c 与 led.h

在工程设置中添加 led.c 源文件

配置路径引用 led.h

2. 函数定义

在 led.h 中定义两个函数:

void led_init(void);       // 初始化LED GPIO
void led_flash(void);      // LED交替闪烁

3. led.c 文件编写

初始化函数 led_init

rcu_periph_clock_enable(RCU_GPIOE);//开启GPIO端口时钟:
gpio_mode_set(GPIOE, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_3);//配置GPIO模式
gpio_output_options_set(GPIOE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_3);//设置推挽输出、50MHz
gpio_bit_reset(GPIOE, GPIO_PIN_3);//默认输出低电平关闭LED

在这里插入图片描述

交替闪烁函数 led_flash

使用模板提供的 delay_1ms 函数进行延时

控制两颗LED交替点亮、熄灭,循环实现流水效果。

五、主函数调用逻辑

在 function.c 中的 user_function 函数中调用:

led_init();      // 初始化LED
led_flash();     // 实现交替闪烁

六、下载与调试设置

下载设置步骤:
1.打开“魔术棒”配置界面

2.进入“Debug”页签,选择 ST-Link

3.点击“Settings”确认芯片识别成功

4.勾选 “Reset and Run”,下载完成后自动运行程序

5.编译并下载程序

七、总结与思考

本节课收获:
学习了GPIO控制LED的基本原理

掌握了GD32固件库的使用方法

实现了两个LED灯交替闪烁的效果

留给大家的思考题:
如何实现多颗LED的流水灯?可以使用几种方式来实现?

相关文章:

  • LeetCode 70 爬楼梯(Java)
  • linux 安装mysql8.0;支持国产麒麟,统信uos系统
  • 用 NGINX 构建高效 POP3 代理`ngx_mail_pop3_module`
  • [蓝桥杯]航班时间
  • uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
  • React Hooks 基础指南
  • C#异步编程:从线程到Task的进化之路
  • ubuntu屏幕复制
  • Loadrunner关联的内容是数组的解决办法
  • OpenLayers 地图投影转换
  • Python6.5打卡(day37)
  • 内部样式:深入解析与应用指南
  • 2.7.4制药CMC统计应用之单个总体非独立测量的未来所有值的耐受区间
  • 全面解析网络端口:概念、分类与安全应用
  • Qt/C++学习系列之QButtonGroup的简单使用
  • 小黑在问题中的日积月累:Pydantic的简单使用
  • 邮件多分类
  • Linux中INADDR_ANY详解
  • LangchainRAG you need - 段落拆分
  • StarRocks
  • wordpress 锚/google优化推广
  • 网站图文混排怎么存放到数据库里/北京优化seo排名
  • 书吧网站设计论文/北京网站优化排名推广
  • 视频网站制作费用/网站开发公司排行榜
  • 校园网站建设提升/app推广平台有哪些
  • 视频制作软件有哪些/新乡seo推广