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

这篇具有很好参考价值的文章主要介绍了【GD32F310开发板试用】浮点DSP运算及Modbus移植测评。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

1. 测评背景

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

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

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

2、浮点DSP运算测评

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

从数据手册可以看到,该款芯片支持FPU,集成DSP指令。
第一步,找相关库,因为之前F450已经有相关的移植,所以直接拿过来,添加库和头文件不再赘述。
【GD32F310开发板试用】浮点DSP运算及Modbus移植测评

第二步,添加相关宏定义。
【GD32F310开发板试用】浮点DSP运算及Modbus移植测评

第三步,编写数学运算测试代码,可以按自己的需求,这边测试基本浮点运算,和正弦余弦之类。
【GD32F310开发板试用】浮点DSP运算及Modbus移植测评

第四步,通过串口看时间消耗,以时钟tikc数为单位,当中涉及的串口外设初始化,和printf重定向也不必多说。
【GD32F310开发板试用】浮点DSP运算及Modbus移植测评

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

3、Modbus通信测评

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

第二步,添加相关的源文件和头文件。
【GD32F310开发板试用】浮点DSP运算及Modbus移植测评

第三步,对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通信。
【GD32F310开发板试用】浮点DSP运算及Modbus移植测评

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

最后,贴一张测评板照片,感谢“技术社区”给予的宝贵测评机会。
【GD32F310开发板试用】浮点DSP运算及Modbus移植测评文章来源地址https://www.toymoban.com/news/detail-408229.html

到了这里,关于【GD32F310开发板试用】浮点DSP运算及Modbus移植测评的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【STM32】STM32F4调用DSP库实现FFT运算

    最近在整理之前的stm32笔记,打算把一些有价值的笔记发到CSDN分享一下。 在进行模拟/数字信号的转换过程中,当采样频率F大于信号中最高频率 fmax 的 2 倍时(F2*fmax),采样之后的数字信号完整地保留了原始信号中的信息。 设采样频率(单位时间可以采多少个信号样本)为 F

    2023年04月24日
    浏览(41)
  • DSP_TMS320F28377D_算法加速方法2_添加浮点运算快速补充库rts2800_fpu32_fast_supplement.lib

    继上一篇博客DSP_TMS320F28377D_算法加速方法1_拷贝程序到RAM运行_江湖上都叫我秋博的博客-CSDN博客之后,本文讲第二种DSP算法加速的方法,该方法的加速效果很明显,但是加速范围仅限于32位浮点数下面这几种函数: 下面稍微解释一下一些可能有疑问的点 1 电机控制中经常对同一

    2024年02月10日
    浏览(38)
  • GD32F303固件库开发

    芯片和开发板都可免费申请,暂时只能以公司名义免费申请,填下下面表格即可。 https://www.wjx.top/vm/wFGhGPF.aspx 使用GDLINK、jlink、串口下载程序到GD芯片。 https://blog.csdn.net/qq_24312945/article/details/124325797 芯片读保护以后,flash将不可以从外部读取,这样可以防止别人读取或者盗取

    2023年04月17日
    浏览(49)
  • 【stm32开发笔记】基于HAL库的STM32F4添加DSP库

    本文分两种方法添加DSP库:1.CubeMX直接配置ioc添加; 2.KEIL内添加; 简述:补齐全部lib库-添加DSP包-使能DSP勾选-添加头文件及魔术棒配置-测试 1.补齐lib库。( 如果使用直接默认添加的库,是不支持FPU的,所以需要补齐后找到所需的lib文件进行替换,在MX的工程管理栏,选择复制所

    2024年02月16日
    浏览(58)
  • GD32F303高级定时器输出互补PWM-开发笔记

    ◼ 总通道数:4; ◼ 计数器宽度:16位; ◼ 时钟源可选:内部时钟,内部触发,外部输入,外部触发; ◼ 多种计数模式:向上计数,向下计数和中央计数; ◼ 正交编码器接口:被用来追踪运动和分辨旋转方向和位置; ◼ 霍尔传感器接口:用来做三相电机控制; ◼ 可编程

    2024年02月09日
    浏览(62)
  • STM32开发(六)STM32F103 通信 —— RS485 Modbus通信编程详解

    👈《上一篇》  🏡《主目录》  👉《下一篇》 了解 RS485 Modbus协议技术 。本实验是基于STM32F103开发 实现 通过RS-485实现modbus协议。 准备好了吗?开始我的show time。 1、硬件开发准备 主控:STM32F103ZET6 RS485收发器:SP3485P 2、软件开发准备 软件开发使用虚拟机 + VScode + STM32Cub

    2024年02月03日
    浏览(52)
  • 单片机GD32F303RCT6 (Macos环境)开发 (二十)—— 光感芯片veml7700的使用

    1、veml有7个寄存器,每个十六位,见图。 00是config寄存器, 01 02 是中断设置的阈值 03是节能模式的设置 04 是得到的光的亮度值 05是得到的data of whole WHITE 06是中断设置值。 2、我们只测试得到光的亮度值,所以veml寄存器设置如下: 设置gain,integration time ,power save mode ,interrup

    2024年02月04日
    浏览(63)
  • [GD32F4]基于GD32固件库移植cherryusb[STM32F4]

    [GD32F4]基于GD32固件库移植cherryusb[STM32F4] 使用开发板是淘宝买的不知名开发板,没什么好说的,具体的型号是GD32F450VET6。 使用的cherryusb版本是0.9.0版本。 使用的GD32官方固件库版本是:GD32F4xx_Firmware_Library_V3.0.4 cherryusb最牛的地方在于抛弃掉所有的依赖,只需要知道芯片的usb中断

    2024年02月06日
    浏览(52)
  • GD32F4移植STM32F4

    近期在项目中采用了GD32F407VET6替换原项目中的STM32F407VET6,网传GD的兼容性很好,之前也用F1系统的替换了一下,按照CSND各位大佬的经验一步步改进了代码,测试直接通过,现在也一直在项目中实际应用了,一直没有出问题。 所以这SMT时,嘉立创没有STM的货果断换成了GD,可换时

    2024年02月16日
    浏览(83)
  • GD32F4(9):GD32f4出现上电不工作,必须按复位程序才能跑起来

    绘制一个gd32450的pcb板子,结果烧录程序后发生下面事情: 上电程序不能正常启动或者偶尔可以正常启动一次,很随机。 当上电后程序不启动的时候,我再按一下mcu的reset按键,程序就能正常启动了。 当我debug调试的时候,回回都能正常启动,根本定位不到问题 首先在板子里

    2023年04月08日
    浏览(72)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包