《嵌入式系统 – GD32应用开发实战指南》第5章 I2C使用

开发环境:
IDE:RT-Thread Studio 2.1.5, Keil5.30
开发板:GD32407V-START

GD32407V有3路硬件I2C,但是笔者开发的是软件I2C,默认使用的I2C1的接口,对于应用而言,软件和硬件都是一样的。

5.1 RT-Thread 的I2C简介

I2C(Inter Integrated Circuit)总线是 PHILIPS 公司开发的一种半双工、双向二线制同步串行总线。I2C 总线传输数据时只需两根信号线,一根是双向数据线 SDA(serial data),另一根是双向时钟线 SCL(serial clock)。

I2C 总线允许同时有多个主设备存在,每个连接到总线上的器件都有唯一的地址,主设备启动数据传输并产生时钟信号,从设备被主设备寻址,同一时刻只允许有一个主设备。如下图所示:

在这里插入图片描述

一般情况下 MCU 的 I2C 器件都是作为主机和从机通讯,在 RT-Thread 中将 I2C 主机虚拟为 I2C总线设备,I2C 从机通过 I2C 设备接口和 I2C 总线通讯,相关接口如下所示:

函数 描述
rt_device_find() 根据 I2C 总线设备名称查找设备获取设备句柄
rt_i2c_transfer() 传输数据

关于I2C更详细的内容,请参看官方手册:
I2C 驱动

5.2 I2C使用实例

I2C使用起来很简单。

1.首先根据 I2C 设备名称查找 I2C 名称,获取设备句柄,然后初始化设备。
2.其次就是与设备进行通信。

GD32默认使用的I2C1,所用的GPIO对应表如下:

PB8(24)->SCL, PB9(25)->SDA

电路图对应如下:

在这里插入图片描述

本文将使用I2C点亮OELD,值得注意的是OLED接口一般有两种:I2C(4线)和SPI(7线或8线)。笔者这里使用的I2C接口的。

接下来就是配置相应的驱动。

首先配置软件I2C。

在这里插入图片描述

使能I2C接口,接着选择GPIO,一般默认即可。

在这里插入图片描述

接下来就是配置OLED驱动。

在这里插入图片描述

笔者这里使用的SSD1306的软件包。
在这里插入图片描述

以上参数默认即可,笔者这里还使用了SSD1306的sample。

最后保存即可,然后生成MDK工程。

当然啦,也可直接使用RT-Thread Studio,配置都是一样的。

值得注意的是,如果编译提示没有“_ansi.h”文件,删除该头文件即可。

在这里插入图片描述

编译下载,然后在终端输入“ssd1306_TestAll”即可进行测试。

在这里插入图片描述

正常情况下,OLED将会点亮。

在这里插入图片描述

在这里插入图片描述

资源获取方式

1.关注公众号[嵌入式实验楼]
2.在公众号回复关键词[GD32应用开发实战指南]获取资料提取码


欢迎访问我的网站

BruceOu的哔哩哔哩
BruceOu的主页
BruceOu的博客
BruceOu的CSDN博客
BruceOu的简书
BruceOu的知乎

版权声明:本文为CSDN博主「Bruceoxl」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013162035/article/details/122851248

开发环境:
IDE:RT-Thread Studio 2.1.5
开发板:GD32407V-START

很多朋友在调试的时候,都喜欢使用串口来调试。毕竟简单嘛,GD32的串口资源非常丰富,笔者已经完成了GD32不同系列的串口驱动,大家可以直接使用。

4.1 RT-Thread 的UART简介

UART和其他设备一样,应用程序通过统一的设备管理接口来访问串口硬件,相关接口如下所示:

函数 描述
rt_device_find() 查找设备
rt_device_open() 打开设备
rt_device_read() 读取数据
rt_device_write() 写入数据
rt_device_control() 控制设备
rt_device_set_rx_indicate() 设置接收回调函数
rt_device_set_tx_complete() 设置发送完成回调函数
rt_device_close() 关闭设备

关于API的详细描述请参看官网手册:
UART API

UART的主要步骤如下所示:
1.首先查找串口设备获取设备句柄。
2.配置串口参数。
3.初始化回调函数发送使用的信号量,然后以读写及中断接收方式打开串口设备。
4.设置串口设备的接收回调函数,之后发送字符串,并创建读取数据线程。

运行序列图如下图所示:

在这里插入图片描述

上述方式是基于中断实现的,当然也可使用DMA,目前UART驱动还不支持,待以后完善吧。

4.2 UART使用实例

笔者这里使用的是GD32407V-START开发板,GD32407V-START的有6路串口,均通过引脚引出,UART1已经用作调试口,因此笔者这里使用UART2演示。

首先看下电路图:

在这里插入图片描述

串口2使用的是PB10和PB11。

只需要简单配置就可使用,当然也可使用其他串口。

在这里插入图片描述

在applications文件夹下新建task.c文件。核心代码如下:
[task.c]

/**
  ******************************************************************************
  * @file                task.c
  * @author              BruceOu
  * @lib version         V3.5.0
  * @version             V1.0
  * @date                2022-01-31
  * @blog                https://blog.bruceou.cn/
  * @Official Accounts   嵌入式实验楼
  * @brief               RTT任务
  ******************************************************************************
  */
/*Includes**********************************************************************/
#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>

#define SAMPLE_UART_NAME                 "uart2" /* 串口设备名称 */

struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT;  /* 初始化配置参数 */

/* 用于接收消息的信号量 */
static struct rt_semaphore rx_sem;
static rt_device_t serial;

/**
  * @brief  uart_input //接收数据回调函数
  * @param  dev
  *         size
  * @retval RT_EOK
  */
static rt_err_t uart_input(rt_device_t dev, rt_size_t size)
{
    /* 串口接收到数据后产生中断,调用此回调函数,然后发送接收信号量 */
    rt_sem_release(&rx_sem);

    return RT_EOK;
}

/**
  * @brief  serial_thread_entry
  * @param  parameter
  * @retval None
  */
static void serial_thread_entry(void *parameter)
{
    char ch;

    while (1)
    {
        /* 从串口读取一个字节的数据,没有读取到则等待接收信号量 */
        while (rt_device_read(serial, -1, &ch, 1) != 1)
        {
            /* 阻塞等待接收信号量,等到信号量后再次读取数据 */
            rt_sem_take(&rx_sem, RT_WAITING_FOREVER);
        }
        /* 读取到的数据输出 */
        rt_kprintf("%c",ch);
    }
}

/**
  * @brief  thread_serial
  * @param  None
  * @retval ret
  */
int thread_serial(void)
{
    rt_err_t ret = RT_EOK;
    char uart_name[RT_NAME_MAX];
    char str[] = "hello RT-Thread!\r\n";

    rt_strncpy(uart_name, SAMPLE_UART_NAME, RT_NAME_MAX);

    /* 查找系统中的串口设备 */
    serial = rt_device_find(uart_name);
    if (!serial)
    {
        rt_kprintf("find %s failed!\n", uart_name);
        return RT_ERROR;
    }
    /* 修改串口配置参数 */
    config.baud_rate = BAUD_RATE_115200;        //修改波特率为 115200
    config.data_bits = DATA_BITS_8;           //数据位 8
    config.stop_bits = STOP_BITS_1;           //停止位 1
    config.bufsz     = 64;                   //修改缓冲区 buff size 为 128
    config.parity    = PARITY_NONE;           //无奇偶校验位

    /* 控制串口设备。通过控制接口传入命令控制字,与控制参数 */
    rt_device_control(serial, RT_DEVICE_CTRL_CONFIG, &config);

    /* 初始化信号量 */
    rt_sem_init(&rx_sem, "rx_sem", 0, RT_IPC_FLAG_FIFO);
    /* 以中断接收及轮询发送模式打开串口设备 */
    rt_device_open(serial, RT_DEVICE_FLAG_INT_RX);
    /* 设置接收回调函数 */
    rt_device_set_rx_indicate(serial, uart_input);
    /* 发送字符串 */
    rt_device_write(serial, 0, str, (sizeof(str) - 1));

    /* 创建 serial 线程 */
    rt_thread_t thread = rt_thread_create("serial", serial_thread_entry, RT_NULL, 1024, 25, 10);
    /* 创建成功则启动线程 */
    if (thread != RT_NULL)
    {
        rt_thread_startup(thread);
    }
    else
    {
        ret = RT_ERROR;
    }

    return ret;
}

/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(thread_serial, uart device sample);

编译下载,调试信息如下:

在这里插入图片描述

从以上打印信息可以看出,串口2已经使能,然后使用MSH命令‘thread_serial’即可使能串口线程。

使能串口线程后,串口2将打印‘hello RT-Thread’,用户也可通过串口2发送数据到开发板,发送信息后,调试终端即可看到串口2发送的数据。

在这里插入图片描述


资源获取方式

1.关注公众号[嵌入式实验楼]
2.在公众号回复关键词[GD32应用开发实战指南]获取资料提取码


欢迎访问我的网站

BruceOu的哔哩哔哩
BruceOu的主页
BruceOu的博客
BruceOu的CSDN博客
BruceOu的简书
BruceOu的知乎

版权声明:本文为CSDN博主「Bruceoxl」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013162035/article/details/122833554

开发环境:
IDE:RT-Thread Studio 2.1.5
开发板:GD32407V-START

我相信大多数学习嵌入式的朋友学习单片机的第一个程序都是点灯,毕竟点灯简单嘛,操作下GPIO即可。当然,本教程的第一个应用也从GPIO的使用开始。

3.1 RT-Thread PIN设备驱动简介

RT-Thread 提供了一套简单的 I/O 设备模型框架,如下图所示。

在这里插入图片描述

它位于硬件和应用程序之间,共分成三层,从上到下分别是 I/O 设备管理层、设备驱动框架层、设备驱动层

应用程序通过 I/O 设备管理接口获得正确的设备驱动,然后通过这个设备驱动与底层 I/O 硬件设备进行数据(或控制)交互。关于I/O模型的详细描述请参看RT-Thread官方手册。

I/O设备模型

PIN设备属于Miscellaneous类型,在驱动文件pin.c中的rt_device_pin_register()函数可以看到其注册的设备类型,PIN设备是很多驱动的基础,其他驱动的开发还会依赖PIN设备,比如软件I2C的驱动就是在PIN设备的基础上开发的。

应用程序通过 RT-Thread 提供的 PIN 设备管理接口来访问 GPIO,相关接口如下所示:

函数 描述
rt_pin_get() 获取引脚编号
rt_pin_mode() 设置引脚模式
rt_pin_write() 设置引脚电平
rt_pin_read() 读取引脚电平
rt_pin_attach_irq() 绑定引脚中断回调函数
rt_pin_irq_enable() 使能引脚中断
rt_pin_detach_irq() 脱离引脚中断回调函数

关于PIN驱动API的详细描述请参看以下内容:

PIN设备

3.2 PIN设备使用实例之按键

笔者这里使用的是GD32407V-START开发板,MCU资源很丰富,但是板载资源较少。GD32407V-START的用户LED已经在主线程中使用了,因此这里就用户按键来举例说明如何使用PIN设备。

首先看下电路图:

在这里插入图片描述

当然不同开发板,其引脚可能不同,请根据具体情况使用。由以上电路图可以看到,当PA0输入低电平,表示按键按下,反之亦然。

核心代码如下:

/**
  ******************************************************************************
  * @file                app_task.c
  * @author              BruceOu
  * @version             V1.0
  * @date                2022-01-23
  * @blog                https://blog.bruceou.cn/
  * @Official Accounts   嵌入式实验楼
  * @brief               Key
  ******************************************************************************
  */
/*Includes**********************************************************************/
#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>

#define THREAD_PRIORITY         7
#define THREAD_STACK_SIZE       512
#define THREAD_TIMESLICE        3

/* defined the KEY pin: PA0 */
#define PIN_KEY GET_PIN(A, 0)

static rt_thread_t key_tid = RT_NULL;

/* 按键检测线程入口函数*/
static void key_thread_entry(void *parameter)
{
    static rt_uint8_t key_up = 1;   /* 按键松开标志 */

    /* 初始化按键 */
    rt_pin_mode(PIN_KEY, PIN_MODE_INPUT);

    while (1)
    {
        /* 检测按键是否按下 */
        if (key_up && (rt_pin_read(PIN_KEY) == PIN_LOW) )
        {
            rt_thread_mdelay(50);   /* 延时消抖*/
            key_up = 0;

            if (rt_pin_read(PIN_KEY) == PIN_LOW)
            {
                /* 按键KEY按下,按键按下处理*/
                rt_kprintf("KEY pressed!\n");
            }
        }
        else if((rt_pin_read(PIN_KEY) == PIN_HIGH) )
        {
            key_up = 1;     /* 按键已松开 */
        }
        rt_thread_mdelay(100);
    }

}

/* 线程初始化*/
int key_init(void)
{
    /* 创建线程,名称是 key_thread,入口是 key_thread*/
    key_tid = rt_thread_create("key_thread",
                                   key_thread_entry,
                                   RT_NULL,
                                   THREAD_STACK_SIZE,
                                   THREAD_PRIORITY,
                                   THREAD_TIMESLICE);

    /* 如果获得线程控制块,启动这个线程 */
    if (key_tid != RT_NULL)
        rt_thread_startup(key_tid);

    return 0;
}

/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(key_init, key init);

构建并下载程序,并使用msh 命令初始化KEY线程,按下按键,则可以看到串口终端输出以下信息:

在这里插入图片描述

当然啦,在finsh输入list_device可以查到注册到RT-Thread的PIN设备:

在这里插入图片描述



资源获取方式

1.关注公众号[嵌入式实验楼]
2.在公众号回复关键词[GD32应用开发实战指南]获取资料提取码


欢迎访问我的网站

BruceOu的哔哩哔哩
BruceOu的主页
BruceOu的博客
BruceOu的CSDN博客
BruceOu的简书
BruceOu的知乎

版权声明:本文为CSDN博主「Bruceoxl」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013162035/article/details/122654809

笔者使用的开发板是兆易创新设计的GD32407V-START开发板。其主控芯片为GD32F407VKT6,主频168MHz,内部3072K Flash,192KB SRAM。

在这里插入图片描述

当然啦,其他的板子的使用也是类似的,只是笔者使用GD32407V-START为例进行讲解而已。

笔者本文主要针对GD32的开发环境搭建进行简单的介绍。

关于RT-Thread的各种开发环境请参考笔者博文:

RT-Thread 开发环境搭建 (Keil+env)

RT-Thread 开发环境搭建(RT-Thread Studio)

RT-Thread 开发环境搭建 (Ubuntu)

可自行选择自己喜欢的开发环境,尽情玩耍吧。

2.1使用 Keil +Env开发 GD32

目前市面通用的MDK for ARM版本有Keil 4和Keil 5:使用Keil 4建议安装4.74及以上;使用Keil 5建议安装5.20以上版本。笔者的MDK是5.30。

2.1.1 Pack包安装

从MDK的官网可以下载得到MDK的安装包,然后安装即可,关于的MDK安装请看笔者的教程。

MDK安装教程:https://blog.csdn.net/bruceoxl/article/details/108548573

MDK下载地址:https://www.keil.com/download/product/

在这里插入图片描述

安装完成后会自动打开,我们将其关闭。

接下来我们下载GD32F4xx的软件支持包。

下载地址:http://www.gd32mcu.com/cn/download

在这里插入图片描述

下载好后双击GigaDevice.GD32F4xx_DFP.2.1.0.pack运行即可:

在这里插入图片描述

点击[Next]即可安装完成。

在这里插入图片描述

安装成功后,重新打开Keil,则可以在File->Device Database中出现Gigadevice的下拉选项,点击可以查看到相应的型号。

在这里插入图片描述

2.1.2 BSP配置与编译

每个 BSP 下的工程都有默认的配置,比如系统内核支持的最大线程优先级、系统时钟频率、使用的设备驱动、控制台使用的串口等。RT-Thread 操作系统具有高度的可裁剪性,用户可以根据自己的需求使用 Env 工具进行配置和裁剪。

在 BSP 目录下打开 Env,然后在使用 menuconfig 命令打开配置界面。menuconfig 常用快捷键如图所示:

在这里插入图片描述

还可以使能在线软件包,如下图所示,使能了 mqtt 相关的软件包。

在这里插入图片描述

选择软件包后需要使用 pkgs --update 命令下载软件包,然后使用scons --target=mdk5 命令或者 scons --target=iar 命令生成 MDK 或者 IAR 工程。

在这里插入图片描述

打开新生成的 MDK 工程 project.uvprojx ,可以看到我们选择的 paho mqtt 相关的软件包源文件已经被添加到了工程中。工程对应的芯片型号也是前文基于工程模板选择的芯片型号。

在这里插入图片描述

【注1】软件更新
下载 :如果软件包在本地已被选中,但是未下载,此时输入:pkgs --update ,该软件包自动下载;

更新 :如果选中的软件包在服务器端有更新,并且版本号选择的是 latest 。此时输入: pkgs --update ,该软件包将会在本地进行更新;

删除 :某个软件包如果无需使用,需要先在 menuconfig 中取消其的选中状态,然后再执行: pkgs --update 。此时本地已下载但未被选中的软件包将会被删除。

【注2】
如果大家直接修改 MDK 工程文件 project.uvprojx 或者 IAR 的工程文件 project.ewww 添加了自己的代码,或者修改了工程的一些基本配置,生成的新工程会覆盖之前对工程文件 project 的修改。
接下来就是编译工程,生成目标代码。

Env 中携带了 Python & scons 环境,只需在相应bsp目录中运行 scons 命令即可使用默认的 ARM_GCC 工具链编译 bsp。输入 scons 命令编译工程:

在这里插入图片描述

编译完成会有如下信息:

在这里插入图片描述

rtthread.bin就是生成的可执行文件。

当然我们也可以使用keil或者IAR编译,前提是安装有KEIL或者IAR,笔者安装了KEIL,因此直接使用KEIL编译。

在这里插入图片描述

最后尝试编译,编译信息如下:

在这里插入图片描述

没有提示错误则编译通过。

2.1.3使用 GD-Link下载调试 GD32

GD32部分开发板自带GD-link,可以用电路板上的GD-link调试仿真代码, 不带的可外接GD-link模块,具体操作方法如下。

1.第一次使用GD-link插入电脑后,会自动安装驱动。

在Options for Target -> Debug 中选择“CMSIS-DAP Debugger”,部分客户反馈找不到这一驱动器选项,那是因为MDK版本过低,只有Keil4.74以上的版本和Keil5才支持CMSIS-DAP Debugger选项。

在这里插入图片描述

2.在Options for Target -> Debug ->Settings勾选SWJ、 Port选择 SW。右框IDcode会出现”0xXBAXXXXX”。

在这里插入图片描述

3.在Options for Target -> Debug ->Settings -> Flash Download中添加GD32的flash算法。

在这里插入图片描述

4.单击下图的快捷方式“debug”, 即可使用GD-Link进行仿真。

在这里插入图片描述

当然啦,也可使用GD-Link下载程序。

在这里插入图片描述

下载程序成功后,打印信息如下:

在这里插入图片描述

如果没有安装Keil等工具,使用Env工具编译出固件后,也使用使用GD_Link_Programmer下载程序。

首先连接好设备,打开GD_Link_Programmer,点击Target(T)->Connect。

在这里插入图片描述

连接成功后打印信息如下:
在这里插入图片描述

然后将固件导入GD_Link_Programmer,在导入固件时,会提示烧写地址,默认即可。

在这里插入图片描述

在这里插入图片描述

然后点击Target(T)->Program。

在这里插入图片描述

然后等待片刻即可。

在这里插入图片描述

2.2使用RT-Thread Studio开发 GD32

当然,该工程不仅可使用Keil开发也可导出工程,使用RT-thread studio开发。
先使用scons --dist导出工程。

在这里插入图片描述

再将工程导入RT-thread studio中

在这里插入图片描述

最后,就可在RT-thread studio就可进行开发工作了。

在这里插入图片描述

不管是过何种开发环境,何种下载方式,最终使用终端助手,接上串口1,打印信息如下:

在这里插入图片描述



欢迎访问我的网站

BruceOu的哔哩哔哩
BruceOu的主页
BruceOu的博客
BruceOu的CSDN博客
BruceOu的简书
BruceOu的知乎


欢迎订阅我的微信公众号

更多资讯,请关注公众号[嵌入式实验楼]

版权声明:本文为CSDN博主「Bruceoxl」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013162035/article/details/122649060

笔者使用的开发板是兆易创新设计的GD32407V-START开发板。其主控芯片为GD32F407VKT6,主频168MHz,内部3072K Flash,192KB SRAM。

在这里插入图片描述

当然啦,其他的板子的使用也是类似的,只是笔者使用GD32407V-START为例进行讲解而已。

笔者本文主要针对GD32的开发环境搭建进行简单的介绍。

关于RT-Thread的各种开发环境请参考笔者博文:

RT-Thread 开发环境搭建 (Keil+env)

RT-Thread 开发环境搭建(RT-Thread Studio)

RT-Thread 开发环境搭建 (Ubuntu)

可自行选择自己喜欢的开发环境,尽情玩耍吧。

2.1使用 Keil +Env开发 GD32

目前市面通用的MDK for ARM版本有Keil 4和Keil 5:使用Keil 4建议安装4.74及以上;使用Keil 5建议安装5.20以上版本。笔者的MDK是5.30。

2.1.1 Pack包安装

从MDK的官网可以下载得到MDK的安装包,然后安装即可,关于的MDK安装请看笔者的教程。

MDK安装教程:https://blog.csdn.net/bruceoxl/article/details/108548573

MDK下载地址:https://www.keil.com/download/product/

在这里插入图片描述

安装完成后会自动打开,我们将其关闭。

接下来我们下载GD32F4xx的软件支持包。

下载地址:http://www.gd32mcu.com/cn/download

在这里插入图片描述

下载好后双击GigaDevice.GD32F4xx_DFP.2.1.0.pack运行即可:

在这里插入图片描述

点击[Next]即可安装完成。

在这里插入图片描述

安装成功后,重新打开Keil,则可以在File->Device Database中出现Gigadevice的下拉选项,点击可以查看到相应的型号。

在这里插入图片描述

2.1.2 BSP配置与编译

每个 BSP 下的工程都有默认的配置,比如系统内核支持的最大线程优先级、系统时钟频率、使用的设备驱动、控制台使用的串口等。RT-Thread 操作系统具有高度的可裁剪性,用户可以根据自己的需求使用 Env 工具进行配置和裁剪。

在 BSP 目录下打开 Env,然后在使用 menuconfig 命令打开配置界面。menuconfig 常用快捷键如图所示:

在这里插入图片描述

还可以使能在线软件包,如下图所示,使能了 mqtt 相关的软件包。

在这里插入图片描述

选择软件包后需要使用 pkgs --update 命令下载软件包,然后使用scons --target=mdk5 命令或者 scons --target=iar 命令生成 MDK 或者 IAR 工程。

在这里插入图片描述

打开新生成的 MDK 工程 project.uvprojx ,可以看到我们选择的 paho mqtt 相关的软件包源文件已经被添加到了工程中。工程对应的芯片型号也是前文基于工程模板选择的芯片型号。

在这里插入图片描述

【注1】软件更新
下载 :如果软件包在本地已被选中,但是未下载,此时输入:pkgs --update ,该软件包自动下载;

更新 :如果选中的软件包在服务器端有更新,并且版本号选择的是 latest 。此时输入: pkgs --update ,该软件包将会在本地进行更新;

删除 :某个软件包如果无需使用,需要先在 menuconfig 中取消其的选中状态,然后再执行: pkgs --update 。此时本地已下载但未被选中的软件包将会被删除。

【注2】
如果大家直接修改 MDK 工程文件 project.uvprojx 或者 IAR 的工程文件 project.ewww 添加了自己的代码,或者修改了工程的一些基本配置,生成的新工程会覆盖之前对工程文件 project 的修改。
接下来就是编译工程,生成目标代码。

Env 中携带了 Python & scons 环境,只需在相应bsp目录中运行 scons 命令即可使用默认的 ARM_GCC 工具链编译 bsp。输入 scons 命令编译工程:

在这里插入图片描述

编译完成会有如下信息:

在这里插入图片描述

rtthread.bin就是生成的可执行文件。

当然我们也可以使用keil或者IAR编译,前提是安装有KEIL或者IAR,笔者安装了KEIL,因此直接使用KEIL编译。

在这里插入图片描述

最后尝试编译,编译信息如下:

在这里插入图片描述

没有提示错误则编译通过。

2.1.3使用 GD-Link下载调试 GD32

GD32部分开发板自带GD-link,可以用电路板上的GD-link调试仿真代码, 不带的可外接GD-link模块,具体操作方法如下。

1.第一次使用GD-link插入电脑后,会自动安装驱动。

在Options for Target -> Debug 中选择“CMSIS-DAP Debugger”,部分客户反馈找不到这一驱动器选项,那是因为MDK版本过低,只有Keil4.74以上的版本和Keil5才支持CMSIS-DAP Debugger选项。

在这里插入图片描述

2.在Options for Target -> Debug ->Settings勾选SWJ、 Port选择 SW。右框IDcode会出现”0xXBAXXXXX”。

在这里插入图片描述

3.在Options for Target -> Debug ->Settings -> Flash Download中添加GD32的flash算法。

在这里插入图片描述

4.单击下图的快捷方式“debug”, 即可使用GD-Link进行仿真。

在这里插入图片描述

当然啦,也可使用GD-Link下载程序。

在这里插入图片描述

下载程序成功后,打印信息如下:

在这里插入图片描述

如果没有安装Keil等工具,使用Env工具编译出固件后,也使用使用GD_Link_Programmer下载程序。

首先连接好设备,打开GD_Link_Programmer,点击Target(T)->Connect。

在这里插入图片描述

连接成功后打印信息如下:
在这里插入图片描述

然后将固件导入GD_Link_Programmer,在导入固件时,会提示烧写地址,默认即可。

在这里插入图片描述

在这里插入图片描述

然后点击Target(T)->Program。

在这里插入图片描述

然后等待片刻即可。

在这里插入图片描述

2.2使用RT-Thread Studio开发 GD32

当然,该工程不仅可使用Keil开发也可导出工程,使用RT-thread studio开发。
先使用scons --dist导出工程。

在这里插入图片描述

再将工程导入RT-thread studio中

在这里插入图片描述

最后,就可在RT-thread studio就可进行开发工作了。

在这里插入图片描述

不管是过何种开发环境,何种下载方式,最终使用终端助手,接上串口1,打印信息如下:

在这里插入图片描述



欢迎访问我的网站

BruceOu的哔哩哔哩
BruceOu的主页
BruceOu的博客
BruceOu的CSDN博客
BruceOu的简书
BruceOu的知乎


欢迎订阅我的微信公众号

更多资讯,请关注公众号[嵌入式实验楼]

版权声明:本文为CSDN博主「Bruceoxl」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013162035/article/details/122649060

Bruceoxl

我还没有学会写个人说明!

暂无评论

相关推荐

GD32串口通信注意事项

GD32串口通信 虽说GD32与stm32采用同样的ARM® Cortex®-M3内核,而且GD32很大程度上可兼容stm32的程序,但是也存在着一些差异;所以为了使用上减少出错,使用G