硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1205|回复: 4
收起左侧

[RTT] H7-TOOL的RTT波形最高速度稳定性测试(2023-02-23)

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106688
QQ
发表于 2023-2-23 02:19:26 | 显示全部楼层 |阅读模式
由于RTT是基于RAM块实现,无法做到像SPI之类的同步控制,所以大家程序中RTT的RAM块疯狂写数据(SWD接口速度远跟不上CPU写入RAM速度)会有RTT不能及时读取的情况,或者读取错误(比如调试器和CPU同时方式一块RAM区)。

但是一般性的应用场景下(中低速下),RTT波形基本是不丢数据或者读取错误的。

【稳定波形测试准备工作】
(1)先保证TOOL供电足,比如USB供电,要保证Power的电压在4.7以上,此贴有详细说明:地址
(2)用TOOL送的硅胶杜邦线或者60cm的屏蔽线均可。

【测试代码】
测试例子,我这里是用的我们V5开发板,STM32F407IGT6。开了一个定时器做发送。
每次发送6字节数据,比如定时器中断时10KHz的话,那么波形速度就是60KB/S
V5-工程调试利器SEGGER的RTT组件,替代串口调试.7z (2.63 MB, 下载次数: 29)

RTT的缓冲大小配置:
[C] 纯文本查看 复制代码
/*********************************************************************
*
*       Defines, configurable
*
**********************************************************************
*/

#define SEGGER_RTT_MAX_NUM_UP_BUFFERS             (3)     // Max. number of up-buffers (T->H) available on this target    (Default: 3)
#define SEGGER_RTT_MAX_NUM_DOWN_BUFFERS           (3)     // Max. number of down-buffers (H->T) available on this target  (Default: 3)

#define BUFFER_SIZE_UP                            (8192)  // Size of the buffer for terminal output of target, up to host (Default: 1k)
#define BUFFER_SIZE_DOWN                          (16)    // Size of the buffer for terminal input to target from host (Usually keyboard input) (Default: 16)

#define SEGGER_RTT_PRINTF_BUFFER_SIZE             (64u)    // Size of buffer for RTT printf to bulk-send chars via RTT     (Default: 64)

#define SEGGER_RTT_MODE_DEFAULT                   SEGGER_RTT_MODE_NO_BLOCK_SKIP // Mode for pre-initialized terminal channel (buffer 0)

#define USE_RTT_ASM                               (0)     // Use assembler version of SEGGER_RTT.c when 1 


测试代码:
[C] 纯文本查看 复制代码
#include "bsp.h"                        /* 底层硬件驱动 */
#include "SEGGER_RTT.h"



/*
*********************************************************************************************************
*        函 数 名: main
*        功能说明: c程序入口
*        形    参:无
*        返 回 值: 错误代码(无需处理)
*********************************************************************************************************
*/
#include "math.h"
float testInput_f32_REF[1024];
float testInput_f32_REF1[1024];
int main(void)
{
        uint32_t i = 0;
        /*
                由于ST固件库的启动文件已经执行了CPU系统时钟的初始化,所以不必再次重复配置系统时钟。
                启动文件 startup_stm32f4xx.s 会调用 system_stm32f4xx.c 中的 void SystemInit(void)。
                SystemInit()函数配置了CPU主时钟频率、内部Flash访问速度和可选的外部SRAM FSMC初始化。

                安富莱STM32-V5开发板主晶振是25MHz, 内部PLL倍频到168MHz。如果需要更改主频,可以修改下面的文件:
                \User\bsp_stm32f4xx\system_stm32f4xx.c
                文件开头的几个宏是PLL倍频参数,修改这些宏就可以修改主频,无需更改硬件。
        */

        bsp_Init();                /* 硬件初始化 */

        bsp_StartAutoTimer(0, 1);        /* 启动1个100ms的自动重装的定时器 */
        
    for(i=0; i<1024; i++)
        {
                testInput_f32_REF = sin(2*3.1415926f*50*i/1024);
                testInput_f32_REF1 = sin(2*3.1415926f*20*i/1024);
        }

        /* 配置通道0,上行配置*/
        SEGGER_RTT_ConfigUpBuffer(0, "RTTUP", NULL, 0, SEGGER_RTT_MODE_NO_BLOCK_SKIP);

        /* 配置通道0,下行配置*/        
        SEGGER_RTT_ConfigDownBuffer(0, "RTTDOWN", NULL, 0, SEGGER_RTT_MODE_NO_BLOCK_SKIP);

        bsp_SetTIMforInt(TIM6, 1000, 0, 0); 

        /* 进入主程序循环体 */
        while (1)
        {

        }
}

/*
*********************************************************************************************************
*        函 数 名: TIM6_DAC_IRQHandler
*        功能说明: TIM6中断服务程序。
*        形    参: 无
*        返 回 值: 无
*********************************************************************************************************
*/
uint32_t j = 0;
char buf[6];
void TIM6_DAC_IRQHandler( void )
{
        if(TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET)
        {
                j++;
                sprintf(buf, "%f\r\n", testInput_f32_REF[j]);
                SEGGER_RTT_WriteString(0, buf);
                if(j==1024) j=0;
                TIM_ClearITPendingBit(TIM6, TIM_IT_Update);
[i]        }[/i]
[i]}



【波形测试】

1KHz中断,每次6字节数据, 基本不出错



5KHz中断,每次6字节数据, 基本不出错



10KHz中断,每次6字节数据, 基本不出错



20KHz中断,每次6字节数据, 一般不出错,不排除有出错的可能



50KHz中断,每次6字节数据, 偶尔会出错



100KHz中断,每次6字节数据, 有时会出错




如果有出错时,效果,中间会有一个数据读取错误:

image.png



回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106688
QQ
 楼主| 发表于 2023-2-23 02:51:28 | 显示全部楼层
更新完毕。
回复

使用道具 举报

4

主题

74

回帖

86

积分

初级会员

积分
86
发表于 2023-2-23 09:16:11 | 显示全部楼层
感谢分享
回复

使用道具 举报

23

主题

1404

回帖

1473

积分

至尊会员

积分
1473
发表于 2023-2-23 12:30:21 | 显示全部楼层
强烈等待新版固件发布,什么时候发
代码不规范,亲人两行泪!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106688
QQ
 楼主| 发表于 2023-2-23 15:53:25 | 显示全部楼层
missfox 发表于 2023-2-23 12:30
强烈等待新版固件发布,什么时候发

本周末左右发布。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-30 02:51 , Processed in 0.238214 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表