基于GD32的简易数字示波器(5)- 软件_控制LED

  这期记录的是项目实战,做一个简易的数字示波器。

教程来源于嘉立创,帖子主要做学习记录,方便以后查看。

本期主要介绍GPIO口的输入输出模式,使用其中的输出模式驱动LED。详细教程可观看下方链接。

2.2 LED控制实验 · 语雀

 1、LED灯驱动原理

通过控制单片机引脚输出高低电平,从而改变LED灯两侧电势差形成电流回路,点亮LED灯。

2、原理图

这里就是通过控制PC14、PC15输出低电平来点亮LED2、LED3

在LED灯的正极是连接3.3V,中间接入了一个1K的限流电阻防止LED灯烧坏;

当我们将对应引脚配置为高电平时,单片机引脚高电平输出(3.3V),此时没有电压差,没有电流流过,不能点亮LED;

当我们将对应引脚配置为低电平时,单片机引脚低电平输出(0V),此时有电压差,有电流流过,LED灯被点亮

 3、配置流程

使用GPIO端口流程:

开启GPIO的端口时钟
配置GPIO的模式
配置GPIO的输出

3.1 开启GPIO的端口时钟

GD32的所有外设资源时钟默认都是关闭的,在配置外设之前需要先开启对应的时钟。
时钟库函数在gd32e23x_rcu.h头文件中,也可通过附件资料中的《GD32固件库使用指南》查看该函数的详细说明。

rcu_periph_clock_enable(RCU_GPIOC);

 3.2 配置GPIO模式

在配置模式前,首先需要了解GPIO的模式,GD32E230的GPIO模式有以下几种:

GPIO_MODE_INPUT-------输入模式

GPIO_MODE_OUTPUT-----输出模式

GPIO_MODE_AF-----------复用模式(引脚复用功能时使用)

GPIO_MODE_ANALOG----模拟模式(ADC读取模拟量时使用,可以读取细微变化的值)

当GPIO用作输入时,还会有以下几种情况可以设置:

GPIO_PUPD_NONE--------引脚浮空

GPIO_PUPD_PULLUP------引脚上拉

GPIO_PUPD_PULLDOWN-引脚下拉

相关GPIO操作库函数在gd32e23x_gpio.h中,也可通过附件资料中的《GD32固件库使用指南》查看该函数的详细说明。

此函数有四个参数:

第一个参数是引脚端口,第二参数设置引脚模式;

第三个参数是设置上下拉情况,第四个参数是具体端口引脚号;

此处我们使用引脚的输出功能,无需上下拉设置,直接设置为浮空即可;

//设置输出模式,不上下拉
gpio_mode_set(GPIOC, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_14);
//设置输出模式,不上下拉
gpio_mode_set(GPIOC, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_15);

3.3 配置GPIO的输出

在配置输出之前,也同样需要了解GPIO的输出类型,GD32E230GPIO输出类型有以下几种:

GPIO_OTYPE_PP----推挽输出(由两个MOS或者三极管进行互补控制的信号控制,可输出高低电平)

GPIO_OTYPE_OD---开漏输出(由单个MOS或者三极管进行信号控制,无法输出高电平,需要借助外部上拉电阻,常用作“线与”);

引脚配置为输出,GPIO可以进行速度的配置(IO电平翻转速度),输入因为是检测电平,所以IO翻转速度对其影响不大。

GPIO_OSPEED_2MHZ----速度最大2Mhz

GPIO_OSPEED_10MHZ---速度最大10Mhz

GPIO_OSPEED_50MHZ---速度最大50Mhz

相关GPIO操作库函数在gd32e23x_gpio.h中,也可通过附件资料中的《GD32固件库使用指南》查看该函数的详细说明。

    //设置输出类型,推挽输出,50Mhz
    gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_14);
    //设置输出类型,推挽输出,50Mhz
    gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_15);

 3.4 GPIO输出高低电平

引脚配置完成后,现在可通过配置输出高低电平来实现LED的点亮和熄灭。

相关GPIO操作库函数在gd32e23x_gpio.h中,也可通过附件资料中的《GD32固件库使用指南查看》该函数的详细说明。

输出低电平
gpio_bit_reset(GPIOC,GPIO_PIN_14);
gpio_bit_reset(GPIOC,GPIO_PIN_15);
输出高电平
gpio_bit_set(GPIOC,GPIO_PIN_14);
gpio_bit_set(GPIOC,GPIO_PIN_15);

3.5 完整代码

#include "gd32e23x.h"
#include "systick.h"
#include <stdio.h>
#include "led.h"
#include "main.h"


int main(void)
{
    //初始化滴答定时器
	systick_config();
    //使能时钟
    rcu_periph_clock_enable(RCU_GPIOC);
    //设置输出模式,不上下拉
    gpio_mode_set(GPIOC, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_14);
    gpio_mode_set(GPIOC, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_15);
    //设置输出类型,推挽输出,50Mhz
    gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_14);
	gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_15);
    //设置引脚输出低电平
    gpio_bit_reset(GPIOC,GPIO_PIN_14);
    gpio_bit_reset(GPIOC,GPIO_PIN_15);
	while(1)
	{
	}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/621932.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

synchronized 使用及实现原理

synchronized 关键字 如何使用 synchronized 关键字的使用方式主要有下面 3 种&#xff1a; 修饰实例方法 修饰静态方法 修饰代码块 1、修饰实例方法 &#xff08;锁当前对象实例&#xff09; 给当前对象实例加锁&#xff0c;进入同步代码前要获得 当前对象实例的锁 。 …

ViewModel 完全指南:实践与背后原理全解

一、引言 在现代Android应用开发中&#xff0c;处理UI数据的有效管理和状态保持是开发者面临的重要挑战之一。Google推出的Jetpack组件库中的ViewModel已成为解决这些问题的关键工具。ViewModel旨在以生命周期意识的方式存储和管理界面相关的数据&#xff0c;从而使数据在配置…

暴力法解决最近对问题和凸包问题-实现可视化

目录 最近对问题 凸包问题 最近对问题 顾名思义就是采用蛮力法求出所有点之间的距离&#xff0c;然后进行比较找出第一个最近对&#xff0c;一个一个进行比较。 大概思路就是如图&#xff08;每个圈代表一个数对&#xff09; 第一个和其他四个比较 第二个和其他三个比较 …

C++类和对象下——实现日期类

前言 在学习了类和对象的六大成员函数后&#xff0c;为了巩固我们学习的知识可以手写一个日期类来帮助我们理解类和对象&#xff0c;加深对于其的了解。 默认函数 构造函数 既然是写类和对象&#xff0c;我们首先就要定义一个类&#xff0c;然后根据实际需要来加入类的数据与函…

计算机Java项目|Springboot房产销售系统

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容&#xff1a;Java项目、Python项目、前端项目、人工智能与大数据、简…

Windows下安装Node.js、npm和electronic,并运行一个Hello, World!脚本程序

20240510 By wdhuag 目录 简介&#xff1a; 参考&#xff1a; 安装Node.js 安装npm 配置npm&#xff1a; 修改包存放目录和缓存目录 切换镜像源 使用 nrm 切换镜像源 安装Electron 运行一个Hello, World!脚本程序 安装Yarn JavaScript 指南 简介&#xff1a; Nod…

flash attention的CUDA实现探讨-V3

之前关于flash attention的实现参考添加链接描述,添加链接描述,添加链接描述 lash attention的数学变换:给定三个矩阵Q,K,V,形状都是[N,d],计算S=QK.T,然后针对dim=1做softmax,然后和V继续做矩阵乘法得到形状为[N,d]的输出矩阵O,即O=softmax(QK.T,dim=1)V。 下面本人的…

物联网设计竞赛_2_Jetson Nano中文输入法配置安装vscode

1、装ibus和ibus依赖框架 sudo apt-get install ibus ibus-clutter ibus-gtk ibus-gtk3 ibus-qt4 2、启动ibus im-config -s ibus 3、安装拼音引擎 sudo apt-get install ibus-pinyin 4、重启linux系统 shutdown -r now 5、进入ibus设置添加中文 ibus-setup 插入中文p…

四川汇昌联信:拼多多网点怎么开?大概需要多少钱?

想要开一家拼多多网点&#xff0c;你肯定很关心需要准备多少资金。下面&#xff0c;我们就来详细解答这个问题&#xff0c;并从多个角度分析开设网点的要点。 一、 开设拼多多网点&#xff0c;首要任务是确定启动资金。根据不同的经营模式和地区差异&#xff0c;成本会有所不同…

基于SpringBoot + Vue的兼职网站管理系统设计与实现+毕业论文+答辩PPT

系统介绍 本系统包含管理员、用户、企业三个角色。 管理员角色&#xff1a;前台首页、个人中心、用户管理、企业管理、兼职信息管理、职位申请管理、留言板管理、系统管理。 用户角色&#xff1a;前台首页、个人中心、职位申请管理。 企业角色&#xff1a;前台首页、个人中心、…

JUC下的ThreadLocalRandom详解

ThreadLocalRandom 是Java并发包&#xff08;java.util.concurrent&#xff09;中提供的一个随机数生成器类&#xff0c;它是从Java 7开始引入的。相较于传统的Math.random()或Random类&#xff0c;ThreadLocalRandom更适用于多线程环境&#xff0c;因为它为每个线程维护了一个…

【spring】application.yml导入额外配置文件

有时候application.yml 已经配置很多配置已经很大很乱了想把他们拆出去放在一个独立的XX.yml文件管理。这时候就用到了 spring.config.import 属性。 spring.config.import spring.config.import 是 Spring Boot 2.4 版本引入的一个配置属性&#xff0c;用于导入额外的配置数…

Java入门基础学习笔记21——Scanner

在程序中接收用户通过键盘输入的数据&#xff1a; 需求&#xff1a; 请在程序中&#xff0c;提示用户通过键盘输入自己的姓名、年龄、并能在程序中收到这些信息&#xff0c;怎么解决&#xff1f; Java已经写好了实现程序&#xff0c;我们调用即可。 API&#xff1a;Applicat…

解决 XXL-Job 端口额外占用问题 小结

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Java技术栈笔记 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 目录 1. 前言 2. 问题解决 2.1. 下载源码 2.2. 启动admin服务器 2.3. 项目引入c…

MySQL-InnoDB数据存储结构

1、存储结构-页 索引结构提供了高效的索引方式&#xff0c;索引信息以及数据记录都保存在数据文件或索引文件中&#xff08;本质存储在页结构中&#xff09; 1.1、磁盘与内存交互的基本单位&#xff1a;页 在InnoDB中将数据划分为若干页&#xff0c;页的默认大小为&#xff…

OpenCV-基于累计直方图的中值滤波算法

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 实现原理 基于累计直方图的中值滤波算法是一种图像处理技术&#xff0c;用于去除图像中的噪声。它利用了像素值的频数分布&#…

LeetCode/NowCoder-链表经典算法OJ练习2

最好的&#xff0c;不一定是最合适的&#xff1b;最合适的&#xff0c;才是真正最好的。&#x1f493;&#x1f493;&#x1f493; 目录 说在前面 题目一&#xff1a;分割链表 题目二&#xff1a;环形链表的约瑟夫问题 SUMUP结尾 说在前面 dear朋友们大家好&#xff01;&…

卷积神经网络边缘识别

为什卷积神经网络能够识别图片呢&#xff1f;是基于图片相似度比较&#xff0c;两张图片的点击越大说明两张图片越像&#xff0c;比如我们那狗胡子的图片去比较&#xff0c;如果相似度很高&#xff0c;就是认为这个动物更像狗。点积越大&#xff0c;图片越相似&#xff0c;这个…

Windows2016系统禁止关闭系统自动更新教程

目录 1.输入cmd--适合系统2016版本2.输入sconfig&#xff0c;然后按回车键3.输入5&#xff0c;然后按回车键4.示例需要设置为手动更新&#xff0c;即输入M&#xff0c;然后按回车键 1.输入cmd–适合系统2016版本 2.输入sconfig&#xff0c;然后按回车键 3.输入5&#xff0c;然后…

揭秘APP广告变现:轻松赚取收益的秘密武器,你还在等什么?

在移动互联网时代&#xff0c;APP广告变现已成为许多开发者和公司获取收益的重要方式。它如同一把秘密武器&#xff0c;帮助那些掌握了其使用技巧的人轻松赚取收益。那么&#xff0c;究竟什么是APP广告变现&#xff1f;又如何通过它轻松赚取收益呢&#xff1f;接下来&#xff0…