【平头哥RVB2601创意应用开发】+GPIO的使用
[复制链接]
本帖最后由 jinglixixi 于 2022-5-10 19:19 编辑
在解决了开发环境的构建后,首要学习的就是GPIO口的使用。其实,如果没有过高的设计要求,在通常的情况下基本上用GPIO口与延时函数相配合就能解决大部分的问题,因此掌握GPIO口的使用是十分重要的。
那如何来学习GPIO口的使用呢?
在没有相关学习教程的情况下,学习例程的程序设计是最简捷的途径。
作为GPIO口学习的硬件支持则是开发板上的现有资源,即LED和KEY,其电路原理图见图1所示。
图1原理图
1.点亮LED
由图2可知LED的引脚连接关系为:
红色 -- PA7
绿色 -- PA25
蓝色 -- PA4
当然在使用时,是需要用短接子来连接的,否则是影响效果观察的。
图2接口的原理图
要点亮LED就必须对所用的引脚进行功能设置,即设置为输出模式,然后再通过高低电平的输出来控制LED的亮灭。
将相关引脚设为输出模式的函数为:
static uint32_t g_ctr = 0;
staticcsi_gpio_pin_t r;
staticcsi_gpio_pin_t g;
staticcsi_gpio_pin_t b;
voidled_pinmux_init()
{
csi_pin_set_mux(PA7, PIN_FUNC_GPIO);
csi_pin_set_mux(PA25, PIN_FUNC_GPIO);
csi_pin_set_mux(PA4, PIN_FUNC_GPIO);
csi_gpio_pin_init(&r, PA7);
csi_gpio_pin_dir(&r, GPIO_DIRECTION_OUTPUT);
csi_gpio_pin_init(&g, PA25);
csi_gpio_pin_dir(&g, GPIO_DIRECTION_OUTPUT);
csi_gpio_pin_init(&b, PA4);
csi_gpio_pin_dir(&b, GPIO_DIRECTION_OUTPUT);
g_ctr = 0;
}
实现LED灯依次点亮的函数为:
voidled_refresh()
{
g_ctr++;
if (g_ctr % 3 == 0)
{
csi_gpio_pin_write(&r, GPIO_PIN_LOW);
csi_gpio_pin_write(&g, GPIO_PIN_HIGH);
csi_gpio_pin_write(&b, GPIO_PIN_HIGH);
}
else if (g_ctr % 3 == 1)
{
csi_gpio_pin_write(&r, GPIO_PIN_HIGH);
csi_gpio_pin_write(&g, GPIO_PIN_LOW);
csi_gpio_pin_write(&b, GPIO_PIN_HIGH);
}
else
{
csi_gpio_pin_write(&r, GPIO_PIN_HIGH);
csi_gpio_pin_write(&g, GPIO_PIN_HIGH);
csi_gpio_pin_write(&b, GPIO_PIN_LOW);
}
}
也就是说,通过计数值的变化就可以控制LED工作状态的转换。由原理图可知,LED灯是低高电平点亮,高电平熄灭。
程序下载后,其效果如图3所示。
图3运行效果
2.按键判别
由图1可知KEY的引脚连接关系为:
K1 -- PA11
K2 -- PA12
要判别按键所处的状态,就必须将引脚设置为输入模式,并通过读取位状态来识别电位的高与低。
将相关引脚设为输入模式的函数为:
staticcsi_gpio_pin_t key1;
staticcsi_gpio_pin_t key2;
static void key_init(void)
{
csi_pin_set_mux(PA11, PIN_FUNC_GPIO);
csi_pin_set_mux(PA12, PIN_FUNC_GPIO);
csi_gpio_pin_init(&key1, PA11);
csi_gpio_pin_dir(&key1, GPIO_DIRECTION_INPUT);
csi_gpio_pin_init(&key2, PA12);
csi_gpio_pin_dir(&key2, GPIO_DIRECTION_INPUT);
}
由原理图可知,按键在常规状态是处于高电平状态,当按下按键时则处于低电平状态。
读取按键状态的语句为:
csi_gpio_pin_read(&key1)
和
csi_gpio_pin_read(&key2)
3.按键控制LED
若按键K1,则点亮红色LED; 按键K2,则点亮绿色LED,则其控制程序为:
static void key_Lgc(void)
{
// 按下Key1红灯亮
if(GPIO_PIN_LOW == csi_gpio_pin_read(&key1))
{
csi_gpio_pin_write(&r, GPIO_PIN_LOW);
csi_gpio_pin_write(&g, GPIO_PIN_HIGH);
csi_gpio_pin_write(&b, GPIO_PIN_HIGH);
}
// 按下Key2绿灯亮
if(GPIO_PIN_LOW == csi_gpio_pin_read(&key2))
{
csi_gpio_pin_write(&r, GPIO_PIN_HIGH);
csi_gpio_pin_write(&g, GPIO_PIN_LOW);
csi_gpio_pin_write(&b, GPIO_PIN_HIGH);
}
}
这样就以开发板的作用为基础,掌握了GPIO口的使用,后面就可以利用GPIO来设计自己的程序了。
在设计使用过程中,一个比较讨厌的现象是关机后再次使用就只能编译而无法下载了不知为何?
|