基于RK3576开发板的UART使用说明 电子说
1. Uart介绍
1.1 串口资源介绍
EASY EAI Orin-Nano开发板的串口资源被划分为两类。一类是已被特定功能所占用的【不可用串口】,另外一个类可由用户自由使用的【可用串口】。
【不可直接使用的串口】分布情况如下所示。
| 串口号 | 设备节点 | 描述 |
| 串口0 | /dev/ttyFIQ0 | 调试串口占用,不作为普通串口使用 |
| 串口1~3 | 无 | 串口所关联的引脚,已被复用成其他功能 |
| 串口5~7 | 无 | 串口所关联的引脚,已被复用成其他功能 |
| 串口9 | 无 | 串口所关联的引脚,已被复用成其他功能 |
| 串口11 | 无 | 串口所关联的引脚,已被复用成其他功能 |
硬件分布情况如下所示。

【可用串口】分布情况如下所示。
| 串口号 | 设备节点 | 描述 |
| 串口4 | /dev/ttyS4 | TTL电平。 |
| 串口8 | /dev/ttyS8 | TTL电平。 |
| 串口10 | /dev/ttyS10 | TTL电平。 |
硬件分布情况如下所示。

1.2 硬件接线

常规接线,设备与设备进行通信:

本单例测试接线,利用跳线帽把Rxd引脚与Txd引脚短接,进行自发自收。

2. 快速上手
2.1 例程源码下载
到【百度网盘】上下载相关的单例程序:
链接:https://pan.baidu.com/s/1RXHMGpmGSEfFy0rb1VkXSg?pwd=1234
提取码: 1234
比如在windows环境中,就把单例程序下载到:此电脑D:BaiduNetdisk (无规定,用户可自主选择),如下图所示。

然后把例程【复制粘贴】到nfs挂载目录中。(不清楚目录如何构建的,可以参考《入门指南/开发环境准备/nfs服务搭建与挂载》)

2.2 例程编译&运行
通过adb shell进入开发板环境(不清楚如何通过adb进行调试,可以参考《入门指南/开发板调试方式介绍/adb调试》),执行下方命令定位到demo目录,并且执行编译操作。
cd /home/orin-nano/Desktop/nfs/06_Uart/ ./build.sh

编译成功后,相关的demo会生成2个可执行程序在Release目录下。它们分别是发送端demo:test-Send,接收端demo:test-Recv。
先执行下方命令以运行接收端demo,如下所示。
sudo ./Release/test-Recv /dev/ttyS10
执行效果如下所示,此时接收端会等待发送端发来数据。

再用【Ctrl+Shift+T】打开新终端,然后进入adbshell,定位到demo目录,如何所示:

最后执行下方命令以运行发送端demo,如下所示。
sudo ./Release/test-Send /dev/ttyS10

此时切换回来刚才的终端,就会发现接收端demo已经收到了发送端demo发过来的数据了。

3. C语言使用案例
串口的C语言使用案例,接收端代码地址为06_UART/test-uart/Recv.c,供用户编码参考。以下代码展示了对串口接收端操作流程:
int main(int argc, char **argv)
{
if(2 != argc){
printf("Usage:n");
printf(" sudo %s %sn", argv[0], "/dev/ttyS< 4/8/10 >");
return -1;
}
int fd = UART_Open(argv[1]);
if(fd < 0){
printf("33[33m【Open ERROR!】%sn", DEBUG_COLOR_TAIL);
return -1;
}
if(false == UART_Set(fd, 115200, 0, 8, 1, 'N')){
printf("33[33m【Init ERROR!】%sn", DEBUG_COLOR_TAIL);
return -1;
}
const char *strReceiver = "I am uart Receiver";
printf("33[36m【Init OK "%s"】%sn", strReceiver, DEBUG_COLOR_TAIL);
char recvBuf[128]={0};
while(1){
if(UART_Recv(fd, recvBuf, sizeof(recvBuf)) <= 0){
continue;
}else{
printf("33[36m【Recv Msg from Sender】:%s", DEBUG_COLOR_TAIL);
printf(" %sn", recvBuf);
break;
}
}
UART_Close(fd);
printf("33[42m【Recv date OK. BYE BYE!】%sn", DEBUG_COLOR_TAIL);
return 0;
}
发送端代码地址为06_UART/test-uart/Send.c,供用户编码参考。以下代码展示了对串口发送端操作流程:
int main(int argc, char **argv)
{
if(2 != argc){
printf("Usage:n");
printf(" sudo %s %sn", argv[0], "/dev/ttyACM< 4/8/10 >");
return -1;
}
int fd = UART_Open(argv[1]);
if(fd < 0){
printf("33[33m【Open ERROR!】%sn", DEBUG_COLOR_TAIL);
return -1;
}
if(false == UART_Set(fd, 115200, 0, 8, 1, 'N')){
printf("33[33m【Init ERROR!】%sn", DEBUG_COLOR_TAIL);
return -1;
}
char *strSender = "I am uart Sender";
printf("33[36m【Init OK "%s"】%sn", strSender, DEBUG_COLOR_TAIL);
int len = UART_Send(fd, strSender, strlen(strSender));
if(len <= 0){
printf("33[41m【Send data ERROR!】%sn", DEBUG_COLOR_TAIL);
return -1;
}
UART_Close(fd);
printf("33[42m【Send date OK. BYE BYE!】%sn", DEBUG_COLOR_TAIL);
return 0;
}
其中UART_Open(),UART_Set(),UART_Send(),UART_Recv()是对系统调用的易用化封装。具体实现于06_UART/commonApi/uart.c
审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !