当前位置: 首页 > 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.xdnf.cn/news/878743.html

相关文章:

  • bug 记录 - 使用 el-dialog 的 before-close 的坑
  • 【HarmonyOS 5】 影视与直播详以及 开发案例
  • 跑通 TrackNet-Badminton-Tracking-tensorflow2 项目全记录
  • 鸿蒙缺少WMIC missing WMIC
  • PPT转图片拼贴工具 v3.0
  • 鸿蒙仓颉语言开发实战教程:商城搜索页
  • 开关机、重启、改密、登录:图解腾讯云CVM日常管理核心操作,轻松掌控你的云主机
  • K8S认证|CKS题库+答案| 2. Pod 指定 ServiceAccount
  • k8s业务程序联调工具-KtConnect
  • Github Copilot新特性:Copilot Spaces-成为某个主题的专家
  • 【Web应用】若依框架:基础篇21二次开发-页面调整
  • 《C++初阶之类和对象》【命名空间 + 输入输出 + 缺省参数 + 函数重载】
  • OCR助力保险业建设
  • Redis持久化模式RDB与AOF
  • [论文阅读] 人工智能+项目管理 | 当 PMBOK 遇见 AI:传统项目管理框架的破局之路
  • Go语言学习笔记-创建一个Go项目
  • 瑞典Sana Agents全国部署:AI驱动的数字化转型革命
  • 适用于vue3的大屏数据展示组件库DataV(踩坑版)
  • Jenkins | Jenkins构建成功服务进程关闭问题
  • OD 算法题 B卷【BOSS的收入】
  • Docker Compose 备忘
  • 通过BUG(prvIdleTask、pxTasksWaitingTerminatio不断跳转问题)了解空闲函数(prvIdleTask)和TCB
  • 【C++ Qt】窗口(Qt窗口框架、菜单栏QMenuBar)
  • 高效集成AI能力:使用开放API打造问答系统,不用训练模型,也能做出懂知识的AI
  • Spring MVC 之 异常处理
  • 《一生一芯》数字实验六:实现随机数发生器
  • 联邦学习架构深度分析:支持多家医院协作训练AI模型方案分析
  • Python-多线程
  • 得力Deli GE330W打印机信息
  • 【HW系列】—内网被渗透的解决方案