cmcu为stm32h743IIt6
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

97 lines
2.3 KiB

/*
* rs485_sample_master.c
*
* Change Logs:
* Date Author Notes
* 2020-12-17 qiyongzhong first version
* 2020-12-18 qiyongzhong fix to rs485_send_then_recv
*/
#include <rtthread.h>
#include <rtdevice.h>
#include <rs485.h>
#include <string.h>
#define DBG_TAG "rs485.sample.master"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>
#ifdef RS485_USING_SAMPLE_MASTER
#ifndef RS485_SAMPLE_MASTER_SERIAL
#define RS485_SAMPLE_MASTER_SERIAL "uart2" //serial device name
#endif
#ifndef RS485_SAMPLE_MASTER_BAUDRATE
#define RS485_SAMPLE_MASTER_BAUDRATE 9600
#endif
#ifndef RS485_SAMPLE_MASTER_PARITY
#define RS485_SAMPLE_MASTER_PARITY 0 //0 -- none parity
#endif
#ifndef RS485_SAMPLE_MASTER_PIN
#define RS485_SAMPLE_MASTER_PIN -1 //-1 -- nonuse rs485 mode control
#endif
#ifndef RS485_SAMPLE_MASTER_LVL
#define RS485_SAMPLE_MASTER_LVL 1
#endif
static void rs485_sample_master(void *args)
{
const char read_cmd[] = "read datas test\r\n";
static rt_uint8_t buf[256];
rs485_inst_t *hinst = rs485_create(RS485_SAMPLE_MASTER_SERIAL, RS485_SAMPLE_MASTER_BAUDRATE,
RS485_SAMPLE_MASTER_PARITY, RS485_SAMPLE_MASTER_PIN, RS485_SAMPLE_MASTER_LVL);
if (hinst == RT_NULL)
{
LOG_E("create rs485 instance fail.");
return;
}
rs485_set_recv_tmo(hinst, 1000);
if (rs485_connect(hinst) != RT_EOK)
{
rs485_destory(hinst);
LOG_E("rs485 connect fail.");
return;
}
while(1)
{
int len = strlen(read_cmd);
len = rs485_send_then_recv(hinst, (void *)read_cmd, len, buf, sizeof(buf));
if (len < 0)
{
LOG_E("rs485 send datas error.");
break;
}
if (len == 0)
{
LOG_D("rs485 recv timeout.");
continue;
}
buf[len] = 0;
LOG_D("rs485 recv %d datas : %s", len, buf);
}
rs485_destory(hinst);
LOG_D("rs485 test end.");
}
static int rs485_sample_master_init(void)
{
rt_thread_t tid = rt_thread_create("rs485master", rs485_sample_master, RT_NULL, 1024, 8, 20);
RT_ASSERT(tid != RT_NULL);
rt_thread_startup(tid);
LOG_I("rs485 sample master thread startup...");
return(RT_EOK);
}
INIT_APP_EXPORT(rs485_sample_master_init);
#endif