米尔电子
直播中

jf_67024233

2年用户 294经验值
擅长:电源/新能源 模拟技术 测量仪表 接口/总线/驱动
私信 关注
[技术]

【米尔-瑞米派兼容树莓派扩展模块-试用体验】米尔-瑞米派Remi Pi-兼容树莓派扩展模块-体验串口编程

Remi Pi是一款基于RZ/G2L工业级处理器,以Cortex-A55内核为核心的嵌入式板卡,主频为1.2GHz。 Remi Pi配备了1GB高速DDR4和8GB eMMC,集成了双路千兆以太网、双频2.4GHz/5GHz WIFI+BT4.2 模块、USB 2.0 HOST、USB 2.0 OTG、HDMI显示接口、LVDS显示接口、MIPI CSI摄像头接口、音频输入输出接口以及兼容树莓派的40PIN接口。

004.jpg

米尔-瑞米派Remi Pi-兼容树莓派生态板收到后准备做UART的数据交互。所以首先得学会如何使用UART。

1、在原理图中找到串口的接口:

从原理图中得知TX、RX为UART4。
原软件评估手册中找到uart_test的示例。
执行uart_test /dev/ttySC4 -b 115200 -r -asc -l
然后从串口助手发送数据,可以打印出来:

【编写自己的测试代码】

1. #include <stdio.h>
1. #include <fcntl.h>
1. #include <unistd.h>
1. #include <stdint.h>
1. #include <termios.h>
1. #include <string.h>
1.
1. /* 115200, 8, N, 1 */
1. int uart_setup(int fd)
1. {
1.     struct termios options;
1.
1.     // 获取原有串口配置
1.     if  (tcgetattr(fd, &options) < 0) {
1.         return -1;
1.     }
1.
1.     // 修改控制模式,保证程序不会占用串口
1.     options.c_cflag  |=  CLOCAL;
1.
1.     // 修改控制模式,能够从串口读取数据
1.     options.c_cflag  |=  CREAD;
1.
1.     // 不使用流控制
1.     options.c_cflag &= ~CRTSCTS;
1.
1.     // 设置数据位
1.     options.c_cflag &= ~CSIZE;
1.     options.c_cflag |= CS8;
1.
1.     // 设置奇偶校验位
1.     options.c_cflag &= ~PARENB;
1.     options.c_iflag &= ~INPCK;
1.
1.     // 设置停止位
1.     options.c_cflag &= ~CSTOPB;
1.
1.     // 设置最少字符和等待时间
1.     options.c_cc[VMIN] = 1;     // 读数据的最小字节数
1.     options.c_cc[VTIME]  = 0;   //等待第1个数据,单位是10s
1.
1.     // 修改输出模式,原始数据输出
1.     options.c_oflag &= ~OPOST;
1.     options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
1.
1.     // 设置波特率
1.     cfsetispeed(&options, B115200);
1.     cfsetospeed(&options, B115200);
1.
1.     // 清空终端未完成的数据
1.     tcflush(fd, TCIFLUSH);
1.
1.     // 设置新属性
1.     if(tcsetattr(fd, TCSANOW, &options) < 0) {
1.         return -1;
1.     }
1.
1.     return 0;
1. }
1.
1. int main(int argc, char *argv[])
1. {
1.     int fd;
1.     int ret;
1.     char ch;
1.
1.     if (argc != 2) {
1.         printf("usage: ./test_uart [device]\n");
1.         return -1;
1.     }
1.
1.     /* 打开串口 */
1.     fd = open(argv[1], O_RDWR | O_NOCTTY | O_NDELAY);
1.     if (fd < 0) {
1.         printf("open dev fail!\n");
1.         return -1;
1.     } else {
1.         fcntl(fd, F_SETFL, 0);
1.     }
1.
1.     /* 设置串口 */
1.     ret = uart_setup(fd);
1.     if (ret < 0) {
1.         printf("uart setup fail!\n");
1.         close(fd);
1.         return -1;
1.     }
1.
1.     /* 串口回传实验 */
1.     while (1) {
1.         scanf("%c", &ch);
1.         ret = write(fd, &ch, 1);
1.         printf("write [%c] , ret is %d!\r\n", ch, ret);
1.
1.         ret = read(fd, &ch, 1);
1.         if (ret < 1) {
1.             printf("read fail, ret is %d\r\n", ret);
1.         } else {
1.             printf("recv a char:[0x%02x][%c]\r\n", ch, ch);
1.         }
1.     }
1.
1.     close(fd);
1. }

编译好后上传给开发板,执行后,可以由串口终端转发给UART4

13.jpg

ac21cbbfabb20ece4a7252f351387b6b.jpg

下面就可以插上开发板实现对NFC的操作了。

更多回帖

发帖
×
20
完善资料,
赚取积分