米尔又双叕在做活动,我拿到一个PN532 NFC开发板,准备做UART的数据交互。所以首先得学会如何使用UART。
1、在原理图中找到串口的接口:
image.png
从原理图中得知TX、RX为UART4。
原软件评估手册中找到uart_test的示例。
执行uart_test /dev/ttySC4 -b 115200 -r -asc -l
然后从串口助手发送数据,可以打印出来:
image.png
【编写自己的测试代码】
  1. #include <stdio.h>
  2. #include <fcntl.h>
  3. #include <unistd.h>
  4. #include <stdint.h>
  5. #include <termios.h>
  6. #include <string.h>

  7. /* 115200, 8, N, 1 */
  8. int uart_setup(int fd)
  9. {
  10.     struct termios options;

  11.     // 获取原有串口配置
  12.     if  (tcgetattr(fd, &options) < 0) {
  13.         return -1;
  14.     }

  15.     // 修改控制模式,保证程序不会占用串口
  16.     options.c_cflag  |=  CLOCAL;

  17.     // 修改控制模式,能够从串口读取数据
  18.     options.c_cflag  |=  CREAD;

  19.     // 不使用流控制
  20.     options.c_cflag &= ~CRTSCTS;

  21.     // 设置数据位
  22.     options.c_cflag &= ~CSIZE;
  23.     options.c_cflag |= CS8;

  24.     // 设置奇偶校验位
  25.     options.c_cflag &= ~PARENB;
  26.     options.c_iflag &= ~INPCK;  

  27.     // 设置停止位
  28.     options.c_cflag &= ~CSTOPB;

  29.     // 设置最少字符和等待时间
  30.     options.c_cc[VMIN] = 1;     // 读数据的最小字节数
  31.     options.c_cc[VTIME]  = 0;   //等待第1个数据,单位是10s
  32.      
  33.     // 修改输出模式,原始数据输出
  34.     options.c_oflag &= ~OPOST;
  35.     options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);

  36.     // 设置波特率
  37.     cfsetispeed(&options, B115200);  
  38.     cfsetospeed(&options, B115200);

  39.     // 清空终端未完成的数据
  40.     tcflush(fd, TCIFLUSH);

  41.     // 设置新属性
  42.     if(tcsetattr(fd, TCSANOW, &options) < 0) {
  43.         return -1;
  44.     }

  45.     return 0;
  46. }

  47. int main(int argc, char *argv[])
  48. {
  49.     int fd;
  50.     int ret;
  51.     char ch;

  52.     if (argc != 2) {
  53.         printf("usage: ./test_uart [device]\n");
  54.         return -1;
  55.     }

  56.     /* 打开串口 */
  57.     fd = open(argv[1], O_RDWR | O_NOCTTY | O_NDELAY);
  58.     if (fd < 0) {
  59.         printf("open dev fail!\n");
  60.         return -1;
  61.     } else {
  62.         fcntl(fd, F_SETFL, 0);
  63.     }

  64.     /* 设置串口 */
  65.     ret = uart_setup(fd);
  66.     if (ret < 0) {
  67.         printf("uart setup fail!\n");
  68.         close(fd);
  69.         return -1;
  70.     }

  71.     /* 串口回传实验 */
  72.     while (1) {
  73.         scanf("%c", &ch);
  74.         ret = write(fd, &ch, 1);
  75.         printf("write [%c] , ret is %d!\r\n", ch, ret);

  76.         ret = read(fd, &ch, 1);
  77.         if (ret < 1) {
  78.             printf("read fail, ret is %d\r\n", ret);
  79.         } else {
  80.             printf("recv a char:[0x%02x][%c]\r\n", ch, ch);
  81.         }
  82.     }

  83.     close(fd);
  84. }


编译好后上传给开发板,执行后,可以由串口终端转发给UART4
image.png
下面就可以插上开发板实现对NFC的操作了。