当前位置: 首页 > 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的流水灯?可以使用几种方式来实现?

http://www.lqws.cn/news/163009.html

相关文章:

  • 2024年09月 C/C++(六级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • 基于红黑树的插入功能,对Set和Map部分功能进行封装实现
  • Python训练第四十五天
  • 【C#】异步和多线程
  • 力扣HOT100之二分查找: 34. 在排序数组中查找元素的第一个和最后一个位置
  • 【高等数学】函数项级数
  • C获取unix操作系统的信息
  • python版若依框架开发:前端开发规范
  • spring4第7-8课-AOP的5种通知类型+切点定义详解+执行顺序
  • 3D Web轻量化引擎HOOPS Communicator三大可视化应用场景,解析浏览器支持功能!
  • 指针的使用——基本数据类型、数组、结构体
  • opencv-python的使用——from official tutorial(持续更新)
  • Git Svn
  • 今日学习:工程问题(场景题)
  • 数据库三范式设计---小白初学+案例引入
  • 一键切换不同状态,3D数字孪生场景搭建更便捷!
  • Amazing晶焱科技:电子系统产品在多次静电放电测试后的退化案例
  • React 第五十四节 Router中useRevalidator的使用详解及案例分析
  • [大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
  • MySQL——视图 用户管理 语言访问
  • 应用app的服务器如何增加高并发
  • Linux 里 su 和 sudo 命令这两个有什么不一样?
  • 【快速预览经典深度学习模型:CNN、RNN、LSTM、Transformer、ViT全解析!】
  • 每日算法刷题Day23 6.5:leetcode二分答案3道题,用时1h40min(有点慢)
  • CICD实战(一) -----Jenkins的下载与安装
  • HarmonyOS:如何在启动框架中初始化HMRouter
  • 【Redis】笔记|第10节|京东HotKey实现多级缓存架构
  • Sentinel微服务保护
  • Day45
  • 2025年ESWA SCI1区TOP,元组引导差分进化算法TLDE+黑箱优化,深度解析+性能实测