3.1 点亮LED灯
一、实验目的
本节课主要学习K210最基础的功能,FPIOA引脚映射和点亮LED灯。
二、实验准备
1.实验元件
LED0和LED1
2.元件特性
LED0为红灯,LED1为绿灯。两颗LED灯都是低电平点亮,高电平熄灭。
3.硬件连接
K210开发板出厂默认已经焊接好LED0和LED1。LED0连接的是IO0,LED1连接的是IO17。
4.SDK中对应API功能
对应的头文件 gpio.h
通用gpio共8个,使用同一个中断源,可配置输入输出信号,可配置触发IO口总中断,边沿触发和电平触发。每隔IO可以分配到FPIOA上48个管脚之一。
为用户提供以下接口:
• GPIO口初始化
• GPIO口输入或输出模式
• GPIO引脚电平高gpio_get_pin:读取GPIO引脚电平
5.什么是FPIOA呢?
FPIOA (现场可编程IO阵列)允许用户将255 个内部功能映射到芯片外围的48 个自由IO 上:
• 支持IO 的可编程功能选择
• 支持IO 输出的8 种驱动能力选择
• 支持IO 的内部上拉电阻选择
• 支持IO 的内部下拉电阻选择
• 支持IO 输入的内部施密特触发器设置
• 支持IO 输出的斜率控制
• 支持内部输入逻辑的电平设置
三、实验原理
LED(Light Emitting Diode)也称为发光二极管,是一种能够将电能转化为可见光的固态的半导体器件,它可以直接把电转化为光。LED的内部是一个半导体晶片,晶片的一端附在一个支架上,一端是负极,另一端连接电源的正极,使整个晶片被环氧树脂封装起来。只需要给正极输入正极电压,负极接地,形成回路就可以点亮LED。
半导体晶片由两部分组成,一部分是P型半导体,在它里面空穴占主导地位,另一端是N型半导体,在这边主要是电子。但这两种半导体连接起来的时候,它们之间就形成一个P-N结。当电流通过导线作用于这个晶片的时候,电子就会被推向P区,在P区里电子跟空穴复合,然后就会以光子的形式发出能量,这就是LED灯发光的原理。而光的波长也就是光的颜色,是由形成P-N结的材料决定的。
四、实验过程
1. 首先根据上面的硬件连接引脚图,K210的硬件引脚和软件功能使用的是FPIOA映射关系。
这里要注意的是程序里操作的都是软件引脚,所以需要先把硬件引脚映射成软件GPIO功能,操作的时候直接操作软件GPIO即可。
2.main函数是K210芯片的入口函数,所有程序都从这里开始执行,首先初始化硬件引脚,然后使能GPIO时钟,再设置LED0和LED1为输出模式,接着设置LED0和LED1的电平为高电平,表示熄灭状态。
最后在while循环中每隔一秒切换修改value的值,让LED0和LED1交替点亮。
3.编译调试,烧录运行
把本课程资料中的gpio_led复制到SDK中的src目录下,
然后进入build目录,运行以下命令编译。
cmake .. -DPROJ=gpio_led -G "MinGW Makefiles"
make
注意:如果点击了PROBLEMS这一栏,有可能因为安装了某个插件(比如C/C++),插件检测头文件路径而发生的错误,实际并没有错误,不用理会这里的提示。以TERMINAL终端里输出的信息为准就好。
编译完成后,在build文件夹下会生成gpio_led.bin文件。
使用type-C数据线连接电脑与K210开发板,打开kflash,选择对应的设备,再将gpio_led.bin文件烧录到K210开发板上。
注意要勾选‘Open terminal after flash’,这样烧录完成固件后就会弹出一个终端可以查看调试的信息。
五、实验现象
LED0和LED1两个灯交替点亮。先亮绿灯1秒,然后绿灯熄灭,红灯亮一秒后熄灭,绿灯再亮起,以此循环。
六、实验总结
1.K210芯片使用FPIOA可编程阵列,所以每次使用硬件IO口前都需要对硬件IO口进行引脚映射。而且在软件中调用的也是软件映射后的软件GPIO。
2.K210芯片与其他单片机芯片同样是从main函数开始运行。
3.使用GPIO前需要设置GPIO的输入输出模式。
4.LED灯是低电平点亮的,给LED引脚设置低电平时点亮,设置高电平时熄灭。
附:API
对应的头文件 gpio.h
gpio_init
描述
初始化GPIO。
函数原型
int gpio_init(void)
返回值
返回值 | 描述 |
0 | 成功 |
非0 | 失败 |
gpio_set_drive_mode
描述
设置GPIO驱动模式。
函数原型
void gpio_set_drive_mode(uint8_t pin, gpio_drive_mode_t mode)
参数
参数名称 | 描述 | 输入输出 |
pin | GPIO管脚 | 输入 |
mode | GPIO驱动模式 | 输入 |
返回值
无。
gpio_set_pin
描述
设置GPIO管脚值。
函数原型
void gpio_set_pin(uint8_t pin, gpio_pin_value_t value)
参数
参数名称 | 描述 | 输入输出 |
pin | GPIO管脚 | 输入 |
value | GPIO值 | 输入 |
返回值
无。
gpio_get_pin
描述
获取GPIO管脚值。
函数原型
gpio_pin_value_t gpio_get_pin(uint8_t pin)
参数
参数名称 | 描述 | 输入输出 |
pin | GPIO管脚 | 输入 |
返回值
获取的GPIO管脚值。
数据类型
相关数据类型、数据结构定义如下:
gpio_drive_mode_t:GPIO驱动模式。
gpio_pin_value_t:GPIO值。
gpio_drive_mode_t
描述
GPIO驱动模式。
定义
typedef enum _gpio_drive_mode
{
GPIO_DM_INPUT,
GPIO_DM_INPUT_PULL_DOWN,
GPIO_DM_INPUT_PULL_UP,
GPIO_DM_OUTPUT,
} gpio_drive_mode_t;
成员
成员名称 | 描述 |
GPIO_DM_INPUT | 输入 |
GPIO_DM_INPUT_PULL_DOWN | 输入下拉 |
GPIO_DM_INPUT_PULL_UP | 输入上拉 |
GPIO_DM_OUTPUT | 输出 |
gpio_pin_value_t
描述
GPIO 值。
定义
typedef enum _gpio_pin_value
{
GPIO_PV_LOW,
GPIO_PV_HIGH
} gpio_pin_value_t;
成员
成员名称 | 描述 |
GPIO_PV_LOW | 低 |
GPIO_PV_HIGH | 高 |