本系列博客仅作为本人学习K210单片机的学习记录,作为初学者难免有错误之处,还望指出。
硬件:Sipeed Maix Dock开发板(推荐官方KD233开发板)
软件:Kendryte IDE(基于VS Code 开发)
文档:
Kendryte IDE使用手册
Standalone SDK编程指南
芯片技术规格书
SDK:
Kendryte SDK
MaixPy/drive
Kendryte IDE是基于VS Code所开发的编译器,并且已做了汉化处理,使用上相对方便,但由于使用Maix Dock开发板使用串口下载程序,而非JLINK,故无法使用进行在线调试,建议使用串口或LCD显示的方式debug。
在IDE安装完成后,
菜单栏——》kendryte——》软件包管理——》浏览线上软件包列表——》示例
在该界面下,查找需要的demo,
选择版本——》develop——》下载
在下载完成后,IDE会自动打开一个新的窗口,构建后如果出现了诸如未找到、无法打开.h文件的错误
菜单栏——》kendryte——》安装全部项目的依赖
安装成功后,选择IDE底部工具栏的
清理——》构建下载
在建立自己的工程时,难免会遇到需要自行添加.c.h文件的场合,根据《Kendryte IDE使用手册》所提供的方法。见下图1
双击Kendryte-package.json打开项目配置,见下图2,文件结构见下图3,如src/*.c代表着该目录下全部.c文件。添加完成后,可以点清理——》安装全部项目的依赖——》构建
相较于其他常用的单片机,如STM32一类,大都引脚的对应的功能被固定,或使用映射的方式进行改变。但K210单片机具有FPIOA(现场可编程IO阵列)可以将255个内部功能映射到外围48个IO上(见下图1),芯片内部有8个通用GPIO和32个高速GPIOHS,可以通过双击device-manager.json,打开FPIOA Configure进行配置(见下图2),配置完成后,会在fpioa-config.c中自动生成配置代码(见下图3)。除此之外,还可以在代码中直接进行配置
此外还可以直接配置fpioa的方法进行管脚配置,下图展示LCD驱动所采用的管脚配置方法
LCD.c(引脚38——GPIOHS(2)——LCD_DC)
fpio.h
有关VS Code的相关使用方法,可以参考
VS Code官网
芯片具有8个通用GPIO,可配置为上拉下拉驱动模式
Maix Dock所采用的原理图
所配置的管脚
其中按键使用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)部分
K210具有32个高速GPIO,相较通用GPIO,其管脚反转能力更强,GPIOHS可配置为上下拉驱动模式,支持上升沿、下降沿和双边沿触发。
以下程序使用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);
}
}
《Kendryte IDE使用手册》
《Standalone SDK编程指南》
《芯片技术规格书》
【看不懂来打我系列教程】第五集:K210 GPIO的输入输出