Longan nano RISC-V 开发板 VSCode+PlatformIO 开发环境最新配置 NucLei SDK 搭建流程

前言

Longan nano 开发板采用的是兆易创新的 GD32VF103CBT6 处理器,是一款使用 RISC-V 指令集架构的国产处理器。该开发板是由矽速科技设计的迷你学习板,由2019年开始进入开发者的视线,距今2024年已有5年的时间, 官网 的资料也是不再维护了,所以对于初学者而言是比较不利的,这里 官网开发环境搭建 的 VSCode 开发环境已经不能再使用了。所以笔者花费了一些时间研究了一下,结合 GitHub 上的两篇有用参考文章 https://github.com/sipeed/platform-gd32v/issues/40 和 https://community.platformio.org/t/i-am-unable-to-install-sipeed-longan-nano-gd32v/34758/20 ,总结一下最新的开发环境搭建流程,希望能帮到大家!

软件安装流程

1.安装 Python3
2.安装 VSCode
3.接着打开 VSCode 安装三个插件(这里用文字记录,以免图片丢失,还请勿嫌笔者啰嗦):Chinese(可选)、PlatformIO IDE(重要)、C/C++(自动安装)。等待安装完即可,网络不好的 PlatformIO IDE 插件可能会安装失败,多等待一会或多试几次,成功后需要重载 VSCode。
4.接着点击 VSCode 左侧竖栏的外星人图标: PlatformIO插件
然后点击 Open 一栏:
Open
接着在显示的插件窗口中依次点击 Platforms ,Embedded,搜索 Nuclei 并点击进去:
图片
点击 Install 安装即可:
图片
安装成功后就可以点击 Platforms 后,在 Installed 里看到:
图片
该SDK的路径默认位于:

(Windows)C:/Users/?/.platformio/packages
(Linux)/home/用户名/.platformio/packages

配置工程及点灯演示

笔者的水平也不高,这里演示的都是比较基础的操作,日后还需要大家靠自己摸索研究更好的项目配置方法。

一、导入示例项目

打开 VSCode,点击外星人图片打开 PlatformIO 开发平台,点击 QUICK ACCESS 窗口中 PIO Home 下的 Open,选择 Home,点击 Project Examples:
图片
在弹出的小窗口中选择 helloworld 示例,点击 Import 导入即可:
图片
该示例项目的路径默认位于:

(Windows)C:/Users/?/Documents/PlatformIO/Projects
(Linux)/home/用户名/Documents/PlatformIO/Projects

二、新建项目

打开 VSCode,点击外星人图片打开 Platform 开发平台,点击 QUICK ACCESS 窗口中 PIO Home 下的 Open,选择 Home,点击 New Project:
在这里插入图片描述
给项目取名,Board 栏搜索 gd32vf103 会有两个选项,笔者并不知道详细的区别,但二者都是可用的,日后大家可以自行判断二者的不同之处,接着点击 Finish 即可。
在这里插入图片描述
项目的默认路径与示例导入的路径相同。

项目配置

接着点击 VSCode 资源管理器:在这里插入图片描述
即可查看项目结构:
在这里插入图片描述
这里 platformio.ini 文件就是该项目的配置文件,我们将其修改一下,只留下

[env:nuclei-gd32vf103c_longan_nano]
platform = nuclei
framework = nuclei-sdk
board = gd32vf103c_longan_nano
upload_protocol = jlink

即可:
在这里插入图片描述

点灯

首先在项目的 src 文件夹下新建 main.c 文件,Nuclei SDK 中有开发板对应的头文件 gd32vf103c_longan_nano.h ,可以简化开发流程,头文件相对路径为:

SDK路径/framework-nuclei-sdk/SoC/gd32vf103/Board/gd32vf103c_longan_nano

可以看到以下几个函数:
在这里插入图片描述
在这里插入图片描述
这里附上笔者的 main.c 代码:

#include "gd32vf103c_longan_nano.h"
#include "gd32vf103_rcu.h"

#include "systick.h"

int main() {
    gd_led_init(LED_R);
    gd_led_init(LED_G);
    gd_led_init(LED_B);

    while (1) {
        gd_led_on(LED_R);
        mdelay_1ms(200);

        gd_led_off(LED_R);
        gd_led_on(LED_G);
        mdelay_1ms(200);

        gd_led_off(LED_G);
        gd_led_on(LED_B);
        mdelay_1ms(200);

        gd_led_off(LED_G);
        mdelay_1ms(200);
    }
}

代码中的 LED_R、LED_G、LED_B 对应下面原理图中的 GPIO_A 和 GPIO_C :
在这里插入图片描述
GD32VF103CBT6 的时钟线路图:
在这里插入图片描述
查看源码 gd32vf103c_longan_nano.c 即可查看操作的流程:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
文件 gd32vf103c_longan_nano.h 的引脚等定义:
在这里插入图片描述
文件 gd32vf103_rcu.h 中复位控制单元对应总线的定义:
在这里插入图片描述
由此开始理清一下思路:

  1. 查看原理图,发现RGB灯对应的是 GPIOA 和 GPIOC 引脚
  2. 查看时钟电路图,时钟电源线进入 RCU 后,通过外设 AHB 总线又经过 APB2 桥总线控制 GPIOA 和 GPIOC,因此需要使能对应的时钟线及总线
  3. 配置 GPIO 端口映射、模式、速率和引脚,初始化
  4. 灯闪逻辑

这里是 systick.h(新建并放在项目的 include 文件夹) 和 systick.c (新建并放在项目的 src 文件夹)的源码:
systick.h

#ifndef SYS_TICK_H
#define SYS_TICK_H

#include <stdint.h>

void mdelay_1ms(uint32_t count);

#endif /* SYS_TICK_H */

systick.c

#include "gd32vf103.h"
#include "systick.h"

uint64_t get_timer_value(); // 读取时间计数器(时钟寄存器)的值

void mdelay_1ms(uint32_t count)
{
    uint64_t start_mtime, delta_mtime;

    // Don't start measuruing until we see an mtime tick
    uint64_t tmp = get_timer_value();
    do {
    start_mtime = get_timer_value();
    } while (start_mtime == tmp);

    do {
    delta_mtime = get_timer_value() - start_mtime;
    }while(delta_mtime <(SystemCoreClock/4000.0 *count ));
}

#define TIMER_CTRL_ADDR           0xd1000000
#define TIMER_MTIME 0x0

uint32_t mtime_lo(void)
{
  return *(volatile uint32_t *)(TIMER_CTRL_ADDR + TIMER_MTIME);
}


uint32_t mtime_hi(void)
{
  return *(volatile uint32_t *)(TIMER_CTRL_ADDR + TIMER_MTIME + 4);
}

uint64_t get_timer_value()
{
  while (1) {
    uint32_t hi = mtime_hi();
    uint32_t lo = mtime_lo();
    if (hi == mtime_hi())
      return ((uint64_t)hi << 32) | lo;
  }
}

程序编译及下载

点击 VSCode 底部状态栏的 对勾 按钮即可编译,编译成功后,点击右边的 向右箭头 即是下载:
在这里插入图片描述
需要注意的是,编译完可能只能看到 .elf 格式的文件,点击下载后就能看到 .hex 文件,默认使用 rv-link JTAG方式下载,可通过 platformio.ini 文件配置不同的下载方式,例如添加:

upload_protocol = jlink

即可使用 jlink JTAG方式下载。
如果下载一直不成功,可以另外采用 GigaDevice Dfu Tool 软件工具下载 hex 程序。

至此,完毕!

附上 VSCode+PlatformIO 开发环境配置问题的 GitHub 参考网址:
[1]: https://github.com/sipeed/platform-gd32v/issues/40
[2]: https://community.platformio.org/t/i-am-unable-to-install-sipeed-longan-nano-gd32v/34758/20

  • 45
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值