本系列博客仅作为本人学习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部分
LCD.h 所定义的数值
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 <gpio.h> #include <gpiohs.h> #include <sleep.h> 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); } }【看不懂来打我系列教程】第五集:K210 GPIO的输入输出