文章目录
前言
这篇文章主要是对rtthread studio freemodbus模块的调试以及问题的解决方案,其中有版本问题,以及官方示例代码无法得到结果的调试总结。
一、RT-Thread Settings配置
1.添加软件包
2.软件包参数进行配置
对软件包的一些参数进行配置,记住一定要选择latest版本(别选择图片里面的v1.6版本,会有bug!!!!!!!!!!!!!!)。
二、添加宏定义
第1步 在board.h重新定义
#define BSP_USING_UART2
#define BSP_UART2_TX_PIN “PA2”
#define BSP_UART2_RX_PIN “PA3”
例如本人开发板的485通讯口是连接在串口2上的。
三、编写测试代码与测试实验
1.具体部分测试代码如下
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
2.V1.6版本测试结果
通过测试,程序会卡死,会出现assertion failed。
3.latest版本测试结果
latest版本,能将数据通过freemodbus协议将数据发送出去。
总结
这个模块的使用一定要注意以下两个方面:
1)freemodbus版本的选择,一定得选择latest版本。
2)在官方的例程得数据发送得前面一定得有一定的时延,不然数据发不出去,程序不会执行发送程序后的程序(例如我的打印数据的代码,这个调试心得是因为debug在线调试发现代码不往下执行,并且将打印数据的函数放前面就会正常,一旦上方没有其他代码就得不到数据,最终确定为延时的问题)。