RTT Studio和Cubemx联合开发

article/2025/8/27 0:49:27

1. RTT studio创建工程

创建工程

在这里插入图片描述## 创建完成以后的目录结构
在这里插入图片描述
在这里插入图片描述

2. 配置CubuMx

双击cubumx的图标打开CubeMx
配置时钟
在这里插入图片描述在这里插入图片描述在这里插入图片描述
生成代码
在这里插入图片描述

构建后的代码结构在这里插入图片描述

编译代码满屏错误:不要慌
在这里插入图片描述

3. 新增脚本

新建scons脚本文件 SConscript
在这里插入图片描述在这里插入图片描述
脚本内容如下,每次修改外设后度需要增加外设c文件的添加,本次使用了gpio.c 和 usart.c文件

import os
from building import *cwd = GetCurrentDir()
src  = Glob('*.c')
# add cubemx drivers
src = Split('''
Src/stm32f4xx_hal_msp.c
Src/main.c
Src/gpio.c
Src/usart.c
''')
print(src)
path = [cwd]
path += [cwd + '/Inc']group = DefineGroup('cubemx', src, depend = [''], CPPPATH = path)Return('group')

执行脚本,回报错就是存在2个main函数入口

在这里插入图片描述

开始编译代码,如果编译后还是很多错误,那就再执行一次脚本
在这里插入图片描述
修改main函数为弱函数,执行编译结果如下图

在这里插入图片描述
修改 application 目录下main.c文件,使用2个现场 点亮 2个LED
在这里插入图片描述

/** Copyright (c) 2006-2021, RT-Thread Development Team** SPDX-License-Identifier: Apache-2.0** Change Logs:* Date           Author       Notes* 2021-10-21     RT-Thread    first version*/#include <rtthread.h>#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>
#include "main.h"
#include "gpio.h"
#include "usart.h"
#include "rtthread.h"
#include "board.h"#define LED0 GET_PIN(F,9)
#define LED1 GET_PIN(F,10)#define THREAD_PRIORITY         25
#define THREAD_STACK_SIZE       512
#define THREAD_TIMESLICE        5/* 指向线程控制块的指针 */
rt_thread_t  tid1 = RT_NULL;
rt_thread_t  tid2 = RT_NULL;void led0_start(void);
void led1_start(void);int main(void)
{MX_GPIO_Init();MX_USART1_UART_Init();LOG_D("Init Ok!");int count = 1;while (count++){rt_thread_mdelay(1000);}return RT_EOK;
}void led0_entry(void* p)
{rt_kprintf("LED0 Runing\r\n");while(1){rt_pin_write(LED0, 1);rt_thread_delay(1000);rt_pin_write(LED0, 0);rt_thread_delay(1000);}
}
void led1_entry(void* p)
{rt_kprintf("LED1 Runing\r\n");while(1){rt_pin_write(LED1, 1);rt_thread_delay(1000);rt_pin_write(LED1, 0);rt_thread_delay(1000);}
}void led0_start(void)
{/* 创建线程1 */tid1 = rt_thread_create("t11",led0_entry,RT_NULL,THREAD_STACK_SIZE, THREAD_PRIORITY, THREAD_TIMESLICE);if(tid1 != RT_NULL)rt_thread_startup(tid1);
}
void led1_start(void)
{/* 创建线程1 */tid2 = rt_thread_create("t22",led1_entry,RT_NULL,THREAD_STACK_SIZE, THREAD_PRIORITY, THREAD_TIMESLICE);if(tid2 != RT_NULL)rt_thread_startup(tid2);
}
MSH_CMD_EXPORT(led0_start, led0_task);
MSH_CMD_EXPORT(led1_start, led1_task);
  1. 编译
    在这里插入图片描述

  2. 下载
    在这里插入图片描述
    配置调试终端
    在这里插入图片描述
    执行命令

led0_start

在这里插入图片描述

灯光开始闪烁


http://chatgpt.dhexx.cn/article/ZPFVC4Ed.shtml

相关文章

STM32 RTT

1、安装包 如果安装过jlink&#xff0c;可以用evething来搜索“SEGGER_RTT”&#xff0c;选择“压缩文件”。 压缩文件中的RTT文件夹加入到项目当中 2、项目修改 3、使用 3.1 普通使用 SEGGER_RTT_printf(0, "Terminal 0 print&#xff1a;%d\r\n", i); 3.2 多端口…

[STM32]jlink RTT使用详解

1.什么是Jlink RTT。 全称为SEGGER’s Real Time Transfer&#xff08;RTT&#xff09;&#xff0c;一种基于SEGGER公司的基于JLink调试器的交互式用户I/O的技术。故名思义&#xff0c;就是一种基于jlink的和用户进行交互的技术&#xff0c;可以直观的显示调试芯片的信息&#…

Redis-RTT

1. 什么是redis的RTT RTT是网络往返时间的简称 每一次执行redis都会向redis-server发送执行的命令(send),比如set a 1, redis-server接收到请求并执行后,会返回一个数据或结果(recv) , send时间和recv中间的时间就是RTT, 也就是说假如发送了三次redis命令,就会产生三个RTT redi…

TCP RTT 采集方法

TCP RTT 采集方法值得一提&#xff1a; 正常状态采集的 RTT 因加入了接收端 Delayed ACK&#xff0c;积累 ACK 等原因而偏大。Disorder&#xff0c;Recovery 状态采集的 RTT 相对准确&#xff0c;通过 Timestamps&#xff0c;SACK 采集。 平时抓包&#xff0c;Wireshark 如何…

keil工程,程序写多后,RTT不能打印

一、Options for Target&#xff0c;Code Generation 一般默认是Use default compiler version 5 &#xff0c;选择V6.14&#xff0c;重新编译烧录程序&#xff0c;可以继续RTT打印。 修改为&#xff1a; 二、这样编译后&#xff0c;编译速度快很多&#xff0c;但是&#xff…

RTT 内核启动流程

1.启动流程&#xff1a; RT-Thread 支持多种平台和多种编译器&#xff0c;而 rtthread_startup() 函数是 RT-Thread 规定的统一启动入口。一般执行顺序是&#xff1a;系统先从启动文件开始运行&#xff0c;然后进入 RT-Thread 的启动 rtthread_startup() &#xff0c;最后进入…

segger_rtt使用帮助

一、KEIL中添加[RTT_Syscalls_KEIL.c][SEGGER_RTT.c][SEGGER_RTT_printf.c], 并将文件夹[segger_rtt]添加到引用目录中。 二、在[SEGGER_RTT_printf.c]中顶部添加 #define NRF_LOG_USES_RTT 1 三、main()中初始化如下&#xff1a; SEGGER_RTT_Init(); //初始化 SEGGER_RTT_pr…

H7-TooL高速 DAPLINK仿真器,含全功能版 RTT Viewer

摘要&#xff1a;前几天分享了一篇使用JLink的RTT代替串口文章&#xff0c;没想到这两天安富莱家更新了H7-TOOL&#xff0c;并且包含了全功能版 RTT Viewer功能&#xff0c;试了一下感觉很不错。 有关于安富莱家的H7-TooL工具在前面我已经介绍过了&#xff0c;电子工程师必备的…

使用Jlink RTT工具打印日志

使用Jlink RTT工具打印日志 背景 平常调试代码中使用串口打印log&#xff0c;往往需要接出串口引脚&#xff0c;比较麻烦&#xff0c;并且串口打印速度较慢&#xff0c;串口的中断可能会影响代码的执行效率。 SEGGER RTT支持使用J-link调试器输出来自目标微控制器的信息&…

RTT打印log

目录 一、移植 RTT驱动 二、环境搭建 一、移植 RTT驱动 1、找到RTT驱动文件 (1) 在 J-Flash安装目录找到 RTT驱动文件并解压得到如下文件&#xff1a; (2) 找到 RTT配置文件&#xff1a; 2、在工程中添加 RTT 驱动&#xff1a; (1) 将以上文件复制到工程目录 (2) 将对应的头…

webrtc rtt 计算

Definitions RTT(Round-Trip Time): 往返时延。在计算机网络中它是一个重要的性能指标&#xff0c;表示从发送端发送数据开始&#xff0c;到发送端收到来自接收端的确认&#xff08;接收端收到数据后便立即发送确认&#xff09;&#xff0c;总共经历的时延。 一般认为单向时延…

《嵌入式 - 嵌入式大杂烩》详解J-Link RTT打印

开发环境: J-Link版本:V9.4 J-Link驱动版本:V760h_x86_64 Keil:V5.30 在嵌入式开发过程中,经常需要进行打印调试,通常使用串口进行打印输出,但通常串口资源有限,这时就可以通过J-Link工具里面自带的RTT实现打印,从而节约一个串口资源。 1 RTT简介 RTT全称是Real Ti…

RTT学习笔记8-RTT内核移植

RTT 内核移植接口 CortexM系列的内核移植 1.关闭中断 ;/* ; * rt_base_t rt_hw_interrupt_disable(void); ; */ rt_hw_interrupt_disable PROC ;PROC 伪指令定义函数EXPORT rt_hw_interrupt_disable ;EXPORT 输出定义的函数&#xff0c;类似于 C 语言 externMRS …

nordic 52832中添加RTT打印

JlinkRTT RTT是基于Jlink调试器的实时传输技术,可以代替串口打印一些调试信息,不需要额外接线。 nordic 52832官方例程中,会将RTT打印函数做进一步封装,下面就讲一下怎么开启52832中的RTT打印。 第一步 增加RTT代码 RTT源代码可以在segger官方网站下载,也可以在nordic 5…

计算机网络传输层——学习笔记

目录 传输层概述 多路复用和多路分解 协议 UDP协议 可靠数据传输协议&#xff08;reliable data transfer protocol RDT&#xff09; 经完全可靠信道的可靠数据传输&#xff1a;rdt 1.0 经具有比特差错信道的可靠数据传输&#xff1a;rdt 2.0 经具有比特差错的丢包信道的…

RTT简介及其简单应用

一、 裸机系统和多任务系统 裸机系统通常分为轮询系统和前后台系统。 轮询系统不难理解就是按照顺序从上往下反复来执行&#xff0c;伪代码如下&#xff1a; int main() {Init();while(1){/*事件1*/event1();/*事件2*/event2();/*事件3*/event3();} }前后台系统就是在轮询系统…

TCP中RTT时延的理解

最近服务器环境部署了tcprtt网络时延监控&#xff0c;发现不同服务器不同节点之间的RTT时延表象非常奇怪&#xff0c;无法准确的判断服务器的网络情况。因此需要弄清楚什么是RTT&#xff0c;以及能否作为服务器网络性能的检测指标。 1、RTT是什么&#xff1f; TCP中的RTT指的是…

FreeRTOS记录(四、FreeRTOS任务堆栈溢出问题和临界区)

本来计划是消息队列、信号量、任务通知、事件集、邮件的文章 但是因为自己调试的时候遇到了一个问题&#xff0c;还是把堆栈溢出问题放到前面来说 ..增加临界区的使用说明 2021/11/7 ..临界区的使用部分增加任务挂起与临界区说明 2021/11/26目录 任务…

1-FreeRTOS入门指南

本专栏是根据官方提供的文档进行FreeRTOS的各个功能函数的说明&#xff0c;以及函数的使用 本专栏不涉及动手操作&#xff0c;只是对原理进行说明&#xff0c;FreeRTOS基础知识篇更新完成会对如何在开发板上进行上手实战操作。 这里不会对比其他RTOS的优缺点&#xff0c;因为每…

freeRTOS调度

freeRTOS调度策略 背景 嵌入式的设备开发通常有两种模式&#xff1a;裸机开发和OS开发。像功能较为强大的SOC通常都会先一直linux或其他OS然后进行业务逻辑的开发&#xff1b;而单片机则有很多简单的应用场景直接使用裸机开发的模式&#xff0c;稍微复杂些的场景&#xff0c;会…