使用的Stm32F4的正点原子探索者开发板,通过ENV以及cubemx配置好工程后在libmodbus例程下正常轮询,但是主机自身没有发送指令进行查询,使用的是串口2的485通讯,485芯片为高电平为发送模式,代码如下:
#include "modbus_rtu_test.h"
#include "modbus.h"
#include "stdio.h"
#include "string.h"
#define RS485_RE GET_PIN(G, 8)
static void test_thread(void *param)
{
uint16_t tab_reg[64] = {0};
modbus_t *ctx = RT_NULL;
ctx = modbus_new_rtu("/dev/uart2", 115200, 'N', 8, 1);
modbus_rtu_set_serial_mode(ctx, MODBUS_RTU_RS485);
modbus_rtu_set_rts(ctx, RS485_RE, MODBUS_RTU_RTS_UP);
modbus_set_slave(ctx, 1);
modbus_connect(ctx);
modbus_set_response_timeout(ctx, 0, 1000000);
int num = 0;
while (1)
{
memset(tab_reg, 0, 64);
int regs = modbus_read_registers(ctx, 0, 10, tab_reg);
rt_kprintf("-------------------------------------------\n");
rt_kprintf("[%4d][read num = %d]", num, regs);
num++;
int i;
for (i = 0; i < 10; i++)
{
rt_kprintf("<%#x>", tab_reg[i]);
}
rt_kprintf("\n");
rt_kprintf("-------------------------------------------\n");
rt_thread_mdelay(1000);
}
//7-关闭modbus端口
modbus_close(ctx);
//8-释放modbus资源
modbus_free(ctx);
}
static int rtu_test_init(void)
{
rt_pin_mode(RS485_RE, PIN_MODE_OUTPUT);
rt_thread_t tid;
tid = rt_thread_create("test",
test_thread, RT_NULL,
2048,
6, 10);
if (tid != RT_NULL)
rt_thread_startup(tid);
return RT_EOK;
}
//MSH_CMD_EXPORT(rtu_test_init,modbus);
INIT_APP_EXPORT(rtu_test_init);
运行过程通过usb转485工具连接,PC端使用modbus Slave,串口精灵监视也没有任何数据交互的过程
有大佬可以看看是什么情况吗?谢谢
这样可以证明开启了吗
@zykkkk 现在modbus slave能收到板子发送的数据吗?另外你的板子的 RS485 的收发使能引脚也是 PG_8 吗?我看软件包默认的是 PG8,看看和你板子的引脚一不一致。
@crystal266 控制硬脚是PG8,主机没有发出数据
@zykkkk 我建议直接使用其他串口试一下,先不用485,看看可不可以用,这样可以证明下载的软件包有没有问题。然后在用485的串口。