【GD32F310开发板试用】浮点DSP运算及Modbus移植测评

首发极术社区。如对兆易创新GD32F310 MCU感兴趣,欢迎添加微信 aijishu2020 加入GD32技术讨论群。

1. 测评背景

GD32作为国产化ARM中的旗舰,其全系列产品不仅市场占有率高,而且各具特色,广受使用者好评。

笔者在测评这款GD32F310之前,曾经使用过GD32F450,其强大的性能,低廉的价格、使用方便程度和快速的技术支持,都给我留下非常深刻的印象。基于GD32F450芯片,我主导了公司主打产品DSP平台的国产化迁移。实践证明GD32 M4除了在ADC性能,其他完全可以全面取代业内中低端DSP芯片,同时也节省了通信和存储方面的扩展开支。

兆易推出的GD32F310同作为M4下的定位为超值型的产品系列,引起了我的好奇。从产品平台化的角度考虑,GD32F450可以作为中高端产品平台的核心,而低成本平台也需要一款性能强,价格优的芯片,GD32F310即可作为考虑。
基于此,测评一方面考虑其运算性能,另一方面考虑其工控通信功能。

2、浮点DSP运算测评

image.png

从数据手册可以看到,该款芯片支持FPU,集成DSP指令。
第一步,找相关库,因为之前F450已经有相关的移植,所以直接拿过来,添加库和头文件不再赘述。
微信截图_20220413205310.png

第二步,添加相关宏定义。
微信截图_20220413205518.png

第三步,编写数学运算测试代码,可以按自己的需求,这边测试基本浮点运算,和正弦余弦之类。
image.png

第四步,通过串口看时间消耗,以时钟tikc数为单位,当中涉及的串口外设初始化,和printf重定向也不必多说。
image.png

结论,用ARM MATH库时,GD32F310正弦余弦运算消耗与GD32F450基本等同,而基本数学运算消耗大约是GD32F450的两倍,不过这是超值版与超性能版的对比,不具备参考意义,可以将同样测试用于预取代的芯片上再作对比。

3、Modbus通信测评

在工业场合应用一款芯片,特别是低成本芯片,一般都会考虑用485通信,而大多采用的标准规约都是Modbus,所以,考虑实际应用GD32F310一定需要移植Modbus。
第一步,协议栈的选择,这里为了方便,选择FreeModbus作为移植测试对象,下载源码包,实际工业应用时,大多选择自研协议栈。
image.png

第二步,添加相关的源文件和头文件。
image.png

第三步,对portserial.c porttimer.c作驱动接口的修改移植。如:

void
vMBPortSerialEnable( BOOL xRxEnable, BOOL xTxEnable )
{
    /* If xRXEnable enable serial receive interrupts. If xTxENable enable
     * transmitter empty interrupts.
     */
    //只接收
    if (xRxEnable == TRUE)
    {
        usart_interrupt_enable(comPort, USART_INT_RBNE);
    }
    else
    {
        usart_interrupt_disable(comPort, USART_INT_RBNE);
    }

    //只发送
    if(xTxEnable == TRUE)
    {
        usart_interrupt_enable(comPort, USART_INT_TBE);
    }
    else
    {
        usart_interrupt_disable(comPort, USART_INT_TBE);
    }
}

BOOL
xMBPortSerialPutByte( CHAR ucByte )
{
    /* Put a byte in the UARTs transmit buffer. This function is called
     * by the protocol stack if pxMBFrameCBTransmitterEmpty( ) has been
     * called. */
    usart_data_transmit(comPort, (uint8_t)ucByte);
    // while(RESET == usart_flag_get(USART2, USART_FLAG_TBE));
    return TRUE;
}

BOOL
xMBPortSerialGetByte( CHAR * pucByte )
{
    /* Return the byte in the UARTs receive buffer. This function is called
     * by the protocol stack after pxMBFrameCBByteReceived( ) has been called.
     */
    *pucByte = usart_data_receive(comPort);
    return TRUE;
}

void vMBPortTimerPoll(void)
{
    uint32_t timeCurrentCount = 0;
    uint32_t timeGapCount = 0;

    if (bTimeOutEnable)
    {
        timeCurrentCount = runTimeTicks;
        if (timeCurrentCount < timeLastCount)
        {
            timeGapCount = 0xffffffff - timeLastCount + timeCurrentCount;
        }
        else
        {
            timeGapCount = timeCurrentCount - timeLastCount;
        }

        //进行超时判断
        if (timeGapCount > timeOutCount)
        {
            bTimeOutEnable = FALSE;
            (void)pxMBPortCBTimerExpired();     //关键的超时处理***********
        }
    }
}

第四步,测试使用合适的工具测试Modbus通信。
image.png

结论,该芯片在移植了FreeModbus协议栈后,能够非常好地支持modbus通信,具有广泛的应用场景。

最后,贴一张测评板照片,感谢“技术社区”给予的宝贵测评机会。
ed8e30023bf99ba22653c58e7dce28b.jpg

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值