RT-Thread Studio之freemodbus调试

文章目录

  • 前言
    • 这篇文章主要是对rtthread studio freemodbus模块的调试以及问题的解决方案,其中有版本问题,以及官方示例代码无法得到结果的调试总结。
  • 一、RT-Thread Settings配置
    • 1.添加软件包
    • 2.软件包参数进行配置
  • 二、添加宏定义
  • 三、编写测试代码与测试实验
    • 1.具体部分测试代码如下
    • 2.代码测试与结果分析
      • 1.测试前准备
      • 2.V1.6版本测试结果
      • 3.latest版本测试结果
  • 总结


前言

这篇文章主要是对rtthread studio freemodbus模块的调试以及问题的解决方案,其中有版本问题,以及官方示例代码无法得到结果的调试总结。

一、RT-Thread Settings配置

1.添加软件包

RT-Thread Studio之freemodbus调试_第1张图片

2.软件包参数进行配置

对软件包的一些参数进行配置,记住一定要选择latest版本(别选择图片里面的v1.6版本,会有bug!!!!!!!!!!!!!!)。
RT-Thread Studio之freemodbus调试_第2张图片
RT-Thread Studio之freemodbus调试_第3张图片

二、添加宏定义

第1步 在board.h重新定义
#define BSP_USING_UART2
#define BSP_UART2_TX_PIN “PA2”
#define BSP_UART2_RX_PIN “PA3”
例如本人开发板的485通讯口是连接在串口2上的。
RT-Thread Studio之freemodbus调试_第4张图片
RT-Thread Studio之freemodbus调试_第5张图片

三、编写测试代码与测试实验

1.具体部分测试代码如下

RT-Thread Studio之freemodbus调试_第6张图片

static void send_thread_entry(void *parameter)
{
    eMBMasterReqErrCode error_code = MB_MRE_NO_ERR;
    rt_uint16_t error_count = 0;
    USHORT data[MB_SEND_REG_NUM] = {0};

    while (1)
    {
        /* Test Modbus Master */
        data[0] = (USHORT)(rt_tick_get() / 10);
        data[1] = (USHORT)(rt_tick_get() % 10);
        rt_thread_mdelay(10);
        error_code = eMBMasterReqWriteMultipleHoldingRegister(SLAVE_ADDR,          /* salve address */
                                                              MB_SEND_REG_START,   /* register start address */
                                                              MB_SEND_REG_NUM,     /* register total number */
                                                              data,                /* data to be written */
                                                              RT_WAITING_FOREVER); /* timeout */

        /* Record the number of errors */
        if (error_code != MB_MRE_NO_ERR)
        {
            error_count++;
        }
        rt_kprintf("data[0] is %d\n",data[0]);
        rt_thread_mdelay(1000);
    }
}

2.代码测试与结果分析

1.测试前准备

用到的软件为Modbus Slave
RT-Thread Studio之freemodbus调试_第7张图片

2.V1.6版本测试结果

通过测试,程序会卡死,会出现assertion failed。
RT-Thread Studio之freemodbus调试_第8张图片

3.latest版本测试结果

latest版本,能将数据通过freemodbus协议将数据发送出去。
RT-Thread Studio之freemodbus调试_第9张图片

总结

这个模块的使用一定要注意以下两个方面:
1)freemodbus版本的选择,一定得选择latest版本。
2)在官方的例程得数据发送得前面一定得有一定的时延,不然数据发不出去,程序不会执行发送程序后的程序(例如我的打印数据的代码,这个调试心得是因为debug在线调试发现代码不往下执行,并且将打印数据的函数放前面就会正常,一旦上方没有其他代码就得不到数据,最终确定为延时的问题)。

你可能感兴趣的:(rt-thread,studio系列教程,单片机,嵌入式硬件,stm32)