外观
六、LED控制实验
LED灯基础知识
LED灯结构组成
LED灯,也称发光二极管,是一种能够将电能转化为可见光的固态的半导体器件,它可以直接把电转化为光。LED的内部是一个半导体的晶片,晶片的一端附在一个支架上,一端是负极,另一端连接电源的正极,整个晶片被环氧树脂封装起来。
LED灯发光原理
半导体晶片由两部分组成,一部分是P型半导体,另一端是N型半导体。这两种半导体连接起来的时候,它们之间就形成了一个P-N结。当电流通过导线作用于这个晶片的时候,电子就会被推向P区,在P区里电子跟空穴复合,然后就会以光子的形式发出能量,这就是LED灯发光的原理。
LED灯驱动原理
驱动LED灯,也就是使LED灯点亮,首先查看原理图,查看LED灯引脚的连接关系,可通过对应单片机引脚输出高低电平,从而改变LED灯两侧电势差形成电流回路,点亮LED灯。
LED灯引脚原理图
核心板板载LED引脚图:
底板板载LED引脚图:
点亮LED灯
项目分析
本次项目完成点亮底板LED灯实验,核心板板载LED灯留给大家自行修改进行点亮;
通过前面的基础知识说明,我们已经知道LED灯点亮的原理与LED灯连接的引脚;
- LED2--->PC14
- LED3--->PC15
在LED灯的正极是连接3.3V,中间接入了一个1K的限流电阻防止LED灯烧坏;
当我们将对应引脚配置为高电平时,单片机引脚高电平输出(3.3V),此时没有电压差,没有电流流过,不能点亮LED;
当我们将对应引脚配置为低电平时,单片机引脚低电平输出(0V),此时有电压差,有电流流过,LED灯被点亮;
配置流程
一般我们使用GPIO的端口,都需要有以下几个步骤。
- 开启GPIO的端口时钟
- 配置GPIO的模式
- 配置GPIO的输出
开启GPIO端口时钟
GD32的所有外设资源时钟默认都是关闭的,在配置外设之前需要先开启对应的时钟。
时钟库函数在gd32e23x_rcu.h头文件中,也可通过附件资料中的《GD32固件库使用指南》查看该函数的详细说明。
C
rcu_periph_clock_enable(RCU_GPIOC);
1
配置GPIO模式
在配置模式前,首先需要了解GPIO的模式,GD32E230GPIO模式有以下几种:
- 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固件库使用指南》查看该函数的详细说明。
此函数有四个参数:
- 第一个参数是引脚端口,第二参数设置引脚模式;
- 第三个参数是设置上下拉情况,第四个参数是具体端口引脚号;
此处我们使用引脚的输出功能,无需上下拉设置,直接设置为浮空即可;
C
//设置输出模式,不上下拉
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);
1
2
3
4
2
3
4
配置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固件库使用指南》查看该函数的详细说明。
C
//设置输出类型,推挽输出,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);
1
2
3
4
2
3
4
输出高低电平
引脚配置完成后,现在可通过配置输出高低电平来实现LED的点亮和熄灭。
相关GPIO操作库函数在gd32e23x_gpio.h中,也可通过附件资料中的《GD32固件库使用指南查看》该函数的详细说明。
C
gpio_bit_reset(GPIOC,GPIO_PIN_14);
gpio_bit_reset(GPIOC,GPIO_PIN_15);
1
2
2
C
gpio_bit_set(GPIOC,GPIO_PIN_14);
gpio_bit_set(GPIOC,GPIO_PIN_15);
1
2
2
项目完整源码
下载成功后即可看到底板LED全部被点亮。
C
#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)
{
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
资料下载
工程代码可前往gitee下载资料包,简易数字示波器资料包
注意事项
新建工程及模板创建
可通过立创开发板中第二章,工程模板新建教程,完成工程新建。
也可直接使用项目源码中的本次实验源码作为基础模版,重点是理解GPIO各库函数的作用以及如何进行查找。
跳转函数失败
参考此链接:[csdn](https://blog.csdn.net/cao43215822/article/details/119594148)也可以直接使用Ctrl+F进行查找该函数; 在查找中选择在整个文档下进行查找,即可快速跳转到其余文件指定位置。
编译过程中遇到一些奇怪的警告
解决办法:参考以下配置Keil无法编译或编译失败
注意GD32E230是ARMV8架构,默认就是AC6,无法切换回AC5,请确保keil版本不能太老,需要支持AC6。