K210学习记录(1)——GPIO与软件使用

0、引言

本系列博客仅作为本人学习K210单片机的学习记录,作为初学者难免有错误之处,还望指出。
硬件:Sipeed Maix Dock开发板(推荐官方KD233开发板)
软件:Kendryte IDE(基于VS Code 开发)
文档:
Kendryte IDE使用手册
Standalone SDK编程指南
芯片技术规格书
SDK:
Kendryte SDK
MaixPy/drive

1、Kendryte IDE的使用

Kendryte IDE是基于VS Code所开发的编译器,并且已做了汉化处理,使用上相对方便,但由于使用Maix Dock开发板使用串口下载程序,而非JLINK,故无法使用进行在线调试,建议使用串口或LCD显示的方式debug。

1.1、使用线上软件包

在IDE安装完成后,
菜单栏——》kendryte——》软件包管理——》浏览线上软件包列表——》示例
在该界面下,查找需要的demo,
选择版本——》develop——》下载
在下载完成后,IDE会自动打开一个新的窗口,构建后如果出现了诸如未找到、无法打开.h文件的错误
菜单栏——》kendryte——》安装全部项目的依赖
安装成功后,选择IDE底部工具栏的
清理——》构建下载

1.2、添加文件

在建立自己的工程时,难免会遇到需要自行添加.c.h文件的场合,根据《Kendryte IDE使用手册》所提供的方法。见下图1

双击Kendryte-package.json打开项目配置,见下图2,文件结构见下图3,如src/*.c代表着该目录下全部.c文件。添加完成后,可以点清理——》安装全部项目的依赖——》构建
K210学习记录(1)——GPIO与软件使用_第1张图片
K210学习记录(1)——GPIO与软件使用_第2张图片
K210学习记录(1)——GPIO与软件使用_第3张图片

1.3、管脚配置

相较于其他常用的单片机,如STM32一类,大都引脚的对应的功能被固定,或使用映射的方式进行改变。但K210单片机具有FPIOA(现场可编程IO阵列)可以将255个内部功能映射到外围48个IO上(见下图1),芯片内部有8个通用GPIO和32个高速GPIOHS,可以通过双击device-manager.json,打开FPIOA Configure进行配置(见下图2),配置完成后,会在fpioa-config.c中自动生成配置代码(见下图3)。除此之外,还可以在代码中直接进行配置

K210学习记录(1)——GPIO与软件使用_第4张图片
K210学习记录(1)——GPIO与软件使用_第5张图片
K210学习记录(1)——GPIO与软件使用_第6张图片

此外还可以直接配置fpioa的方法进行管脚配置,下图展示LCD驱动所采用的管脚配置方法

原理图LCD部分
K210学习记录(1)——GPIO与软件使用_第7张图片

LCD.h 所定义的数值
K210学习记录(1)——GPIO与软件使用_第8张图片

LCD.c(引脚38——GPIOHS(2)——LCD_DC)
K210学习记录(1)——GPIO与软件使用_第9张图片

fpio.h
在这里插入图片描述
有关VS Code的相关使用方法,可以参考
VS Code官网

2、通用GPIO的使用

芯片具有8个通用GPIO,可配置为上拉下拉驱动模式
K210学习记录(1)——GPIO与软件使用_第10张图片
Maix Dock所采用的原理图
K210学习记录(1)——GPIO与软件使用_第11张图片
K210学习记录(1)——GPIO与软件使用_第12张图片
所配置的管脚
K210学习记录(1)——GPIO与软件使用_第13张图片

其中按键使用GPIO 31—— GND的方式。

int main(void) {
     
  gpio_init();//初始化GPIO
  gpio_set_drive_mode(0, GPIO_DM_OUTPUT);//将GPIO 0配置为输出模型
  gpio_set_drive_mode(1, GPIO_DM_OUTPUT);
  gpio_set_drive_mode(2, GPIO_DM_OUTPUT);
  gpio_set_pin(0, GPIO_PV_HIGH);//GPIO 0 输出高
  gpio_set_pin(1, GPIO_PV_HIGH);
  gpio_set_pin(2, GPIO_PV_HIGH);

// gpio_set_drive_mode(3, GPIO_DM_INPUT_PULL_UP);  //Key设置为上拉输入
//  gpio_set_pin(1, 1); // LED初始化,灭

  while (1) {
     
    // Key按下为低,取反为高,LED灭,非按下LED亮
//    gpio_set_pin(1, ~gpio_get_pin(3));
//    msleep(50);
    //-------闪烁灯-------
     gpio_set_pin(1, 1);
     msleep(500);
     gpio_set_pin(1, 0);
     msleep(500);
  }
}

详情请参考 《Standalone SDK编程指南》——通用输入/输出(GPIO)部分

3、高速GPIOHS(中断)

K210具有32个高速GPIO,相较通用GPIO,其管脚反转能力更强,GPIOHS可配置为上下拉驱动模式,支持上升沿、下降沿和双边沿触发。

K210学习记录(1)——GPIO与软件使用_第14张图片
K210学习记录(1)——GPIO与软件使用_第15张图片
K210学习记录(1)——GPIO与软件使用_第16张图片
K210学习记录(1)——GPIO与软件使用_第17张图片

K210学习记录(1)——GPIO与软件使用_第18张图片
以下程序使用IO 31作为GPIOHS 0,使用下降沿触发(管脚配置为上拉输入),使用IO 13作为GPIO 1,作为LED的输出控制

#include 
#include 
#include 

char LED_flag = 0;

void Flash_LED() {
     
  msleep(100);             //消抖
  if (!gpiohs_get_pin(0))  //判断电平状态
    LED_flag = ~LED_flag;
}

int main(void) {
     
  gpio_init();
  gpio_set_drive_mode(1, GPIO_DM_OUTPUT);//LED
  gpio_set_pin(1, GPIO_PV_HIGH);

  //配置中断管脚
  gpiohs_set_drive_mode(0, GPIO_DM_INPUT_PULL_UP);  // Key上拉输入
  gpiohs_set_pin_edge(0, GPIO_PE_FALLING);          //配置为下降沿触发

  //中端管脚、优先级(1-1023)、中断回调函数(类似中断服务程序)、回调函数参数
  gpiohs_irq_register(0, 1, Flash_LED, 0);
  while (1) {
     
    gpio_set_pin(1, LED_flag);
  }
}

4、参考资料

《Kendryte IDE使用手册》

《Standalone SDK编程指南》

《芯片技术规格书》

【看不懂来打我系列教程】第五集:K210 GPIO的输入输出

你可能感兴趣的:(K210单片机学习,K210,单片机,Kendryte)