一. 基于雅特力437芯片开发版485串口代码相关教程
注:本文档的背景是先完成DJYOS入门使用教程中的《基于雅特力AT32F437芯片开发的家庭储能DTU教程入门》
1. 准备工作
1.1 usb转232中的232接口,其中杜邦线的接线是在下侧
1.2 下图中时437芯片板子的232接口,其中杜邦线接线是上侧
2. 使用教程
- 有关串口的相关代码集中在dtu\src\app\YDT_1363_Protocol.c文件中;
- 其中serial_transmission方法是初始化串口和判断串口输出读取结果的函数,COMWrite是用来往串口输出的函数,COMRead是用来往串口读取的函数
2.1 先声明一个全局变量的初始化串口句柄
static int serial = -1; //串口句柄
2.2 开始配置要初始化板子上的哪个串口
char ucPORT = '\003';//选择初始化的485串口
char uart_name[20];
snprintf((char *)uart_name, 16, "/dev/UART%d", ucPORT);
2.3 通过open函数打开串口,并且判断这个串口是否能够正常使用
如果不能就要打印相关的错误,还有配置串口的相关功能和数据,如是否打开读写模式,防止串口成为进程的控制终端(图中的”O_RDWR | O_NOCTTY”)
if ((serial = open((char *)uart_name, O_RDWR | O_NOCTTY)) < 0) //串口是否正常打开判断
{
error_printf("YDS_1363", "open %s fail\r\n", uart_name);
serial = -1;
return bStatus;
}
2.4 串口成功开启后还要继续配置波特率,数据位,停止位,校验位,最后也要判断是否配置成功
struct COMParam com; //配置串口信息
com.BaudRate = CN_UART_BAUD_9600;//设置波特率
com.DataBits = CN_UART_DATABITS_8;//数据位
com.StopBits = CN_UART_STOPBITS_1;//停止位
com.Parity = CN_UART_PARITY_NONE;//校验位
bool_t comstate=fcntl(serial, CN_UART_COM_SET, &com);
if (comstate!=false)
{
fcntl(serial, CN_UART_COM_SET, &com);
}
2.5 如果初始化相应的串口不会关闭,之后还会用到那么就要外加代码限制再次初始化串口
if (serial==-1)
{
bool_t bStatus = false;
char ucPORT = '\003';//选择初始化的485串口
char uart_name[20];
snprintf((char *)uart_name, 16, "/dev/UART%d", ucPORT);
if ((serial = open((char *)uart_name, O_RDWR | O_NOCTTY)) < 0) //串口是否正常打开判断
{
error_printf("YDS_1363", "open %s fail\r\n", uart_name);
serial = -1;
return bStatus;
}
Handle_SetTimeOut(fd2Handle(serial),1000*1000);
struct COMParam com; //配置串口信息
com.BaudRate = CN_UART_BAUD_9600;//设置波特率
com.DataBits = CN_UART_DATABITS_8;//数据位
com.StopBits = CN_UART_STOPBITS_1;//停止位
com.Parity = CN_UART_PARITY_NONE;//校验位
bool_t comstate=fcntl(serial, CN_UART_COM_SET, &com);
if (comstate!=false)
{
fcntl(serial, CN_UART_COM_SET, &com);
}
}