STM32 DWT外设 、serial studio软件 辅助 测试STM3DSP

本文实用STM32F407的DWT外设测试芯片的DSP性能。

1.DWT介绍

       DWT实际上是Cortex-M内核的debug工具,中文名为数据观察点单元.其中有一个寄存器CYCCNT,如果使能了DWT,CYCCNT的值就会每隔一个时钟周期+1。可以方便测试一段代码运行消耗的系统时钟周期。

      使用DWT计数功能需要如下步骤:

        1.首先要设置寄存器DEMCR中的TRCENA位为1以使能DWT外设。

             CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;

        2.清空CYCCNT

            DWT->CYCCNT = 0;    

        3.设置DWTCR寄存器中的CYCCNTTENA位为1,启动CYCCNT计数

           DWT->CTRL|= DWT_CTRL_CYCCNTENA_Msk;

2.Serial Studio

给大家分享一个比较实用的开源、免费的数据可视化小工具:Serial Studio。从名称就可以看的出来,它是一款串口(Serial)可视化(Studio)工具:

3.DSP测试

本文通过三角函数sin测试STM32F407使用DSP和不使用DSP性能差异。

    uint32_t tick_start,tmp;
    uint32_t dwt_start_tick, dwt_end_tick;
    uint8_t test_char[256];
    float in, out;

    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();
    MX_USART1_UART_Init();

    CoreDebug->DEMCR |= 1<<24;
    DWT->CYCCNT = 0;
    DWT->CTRL|= DWT_CTRL_CYCCNTENA_Msk;
  
    for (uint32_t i = 0; i < 0x400; i++)
    {
        in = i * 3.1415926f * 2 / 0x400;
        dwt_start_tick = DWT->CYCCNT;
//        out = sin(in);
        out = arm_sin_f32(in);//使用DSP功能
        dwt_end_tick = DWT->CYCCNT;
        tmp = (int)((out+1)*0x200);
        sprintf((char*)test_char, "/*%4d, %4d*/\r\n", tmp, dwt_end_tick - dwt_start_tick);
        HAL_UART_Transmit(&huart1, test_char, strlen((char*)test_char), 100);
        HAL_Delay(1);
    }

Serial Studio JSON配置

不使用DSP功能sin函数测试

如上图左图为sin函数值加1然后放大512倍后的值范围0-1024,右图为不同sin函数输入消耗的时钟周期,sin函数不同输入计算消耗的系统时钟周期差别很大多数在1300~2500。

使用DSP功能sin函数测试
如上图左图为sin函数值加1然后放大512倍后的值范围0-1024,右图为不同sin函数输入消耗的时钟周期,实用DSP功能后每次sin函数计算消耗100个左右系统时钟周期,性能提高了10倍甚至20倍以上。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值