文章目录[隐藏]
开发环境:
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官方手册。
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的详细描述请参看以下内容:
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 开发环境搭建(RT-Thread Studio)
可自行选择自己喜欢的开发环境,尽情玩耍吧。
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 开发环境搭建(RT-Thread Studio)
可自行选择自己喜欢的开发环境,尽情玩耍吧。
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
暂无评论