资源简介
ZYNQ7021在Linux下, 串口UART0的实现,可以在PS端直接使用,也可以将UART0引荐通过引脚分配带EMIO上使用,测试效果可以查看我的博客。
代码片段和文件信息
//串口相关的头文件
#include /*标准输入输出定义*/
#include /*标准函数库定义*/
#include /*Unix 标准函数定义*/
#include
#include
#include /*文件控制定义*/
#include /*PPSIX 终端控制定义*/
#include /*错误号定义*/
#include
#include
#include
//宏定义
#define FALSE -1
#define TRUE 0
/*******************************************************************
* 名称: UART0_Open
* 功能: 打开串口并返回串口设备文件描述
* 入口参数: fd:文件描述符 port :串口号(ttyPS0ttyPS1)
* 出口参数: 正确返回为1,错误返回为0
*******************************************************************/
int UART0_Open(int fdchar* port)
{
fd = open( port O_RDWR|O_NOCTTY|O_NDELAY); //fd = -1
if (FALSE == fd)
{
perror(“Can‘t Open Serial Port“);
return(FALSE);
}
//恢复串口为阻塞状态
if(fcntl(fd F_SETFL 0) < 0)
{
printf(“fcntl failed!\n“);
return(FALSE);
}
else
{
printf(“fcntl=%d\n“fcntl(fd F_SETFL0));
}
//测试是否为终端设备
if(0 == isatty(STDIN_FILENO))
{
printf(“standard input is not a terminal device\n“);
return(FALSE);
}
else
{
printf(“isatty success!\n“);
}
printf(“fd->open=%d\n“fd);
return fd;
}
/*******************************************************************
* 名称: UART0_Close
* 功能: 关闭串口并返回串口设备文件描述
* 入口参数: fd:文件描述符 port :串口号(ttyPS0ttyPS1)
* 出口参数: void
*******************************************************************/
void UART0_Close(int fd)
{
close(fd);
}
/*******************************************************************
* 名称: UART0_Set
* 功能: 设置串口数据位,停止位和效验位
* 入口参数: fd 串口文件描述符
* speed 串口速度
* flow_ctrl 数据流控制
* databits 数据位 取值为 7 或者8
* stopbits 停止位 取值为 1 或者2
* parity 效验类型 取值为NEOS
*出口参数: 正确返回为1,错误返回为0
*******************************************************************/
int UART0_Set(int fdint speedint flow_ctrlint databitsint stopbitsint parity)
{
int i;
int status;
int speed_arr[] = { B115200 B19200 B9600 B4800 B2400 B1200 B300};
int name_arr[] = {115200 19200 9600 4800 2400 1200 300};
struct termios options;
/*tcgetattr(fd&options)得到与fd指向对象的相关参数,并将它们保存于options该函数还可以测试配置是否正确,
*该串口是否可用等。若调用成功,函数返回值为0,若调用失败,函数返回值为1. */
if ( tcgetattr( fd&options) != 0) //erro: tcgetattr( fd&options)=1
{
perror(“SetupSerial 1“);
return(FALSE);
}
//设置串口输入波特率和输出波特率
for ( i= 0; i < sizeof(speed_arr) / sizeof(int); i++)
{
if (speed == name_arr[i])
{
cfsetispeed(&options speed_arr[i]);
cfsetospeed(&options speed_arr[i]);
}
}
//修改控制模式,保证程序不会占用串口
options.c_cflag |= CLOCAL;
- 上一篇:STM32F407双串口
- 下一篇:STM32驱动TMC26x的工程文件
评论
共有 条评论