二、Jetson TX2下的串口通信 (Linux)------程序(采用SIGIO中断)

本文介绍了在Jetson TX2上使用SIGIO中断进行串口通信的过程,包括串口配置、termios结构体的使用以及遇到的发送、接收中断问题。在解决发送接收同步、波特率设置、特殊字符干扰和程序卡死等问题的过程中,详细记录了问题分析与解决方案,提供了一种非阻塞模式下的串口通信实现。
摘要由CSDN通过智能技术生成

串口通信需要几个基本的条件:

硬件------串口,这个不用多说,一定都有的

软件------使用的相关的头文件

串口通信的相关的配置基本上博客都是有的,我在这里罗列一下:

它的主要动作是:

一、打开设备

二、设置波特率等等

三、读写函数

四、关闭

具体的可以参考下面这个:

打开串口及串口读写

https://blog.csdn.net/specialshoot/article/details/50707965

https://blog.csdn.net/specialshoot/article/details/50709257

串口主要涉及到termios结构体,这个很重要,可以参考:

下面这个的讲解:

termios的讲解

https://blog.csdn.net/querdaizhi/article/details/7436722

这个需要自己改一下。

但是很多都没有提到完整的接收和发送中断的问题(有的是用进程写的,对我来说有点难度),所以就希望写成中断的方式,希望写一个接收的中断。

具体的文件如下:

#include "serial.hpp"
//using the serial to transmit information
int my_fd;
//char my_buf[30]={"/dev/ttyUSB0"};
char my_buf[30]={"/dev/ttyTHS2"};
int my_nread=0;
int my_nByte=0;
u8 USART_TX_BUF[32];
/**
*@brief 设置串口通信速率
*@param fd 类型 int 打开串口的文件句柄
*@param speed 类型 int 串口速度
*@return void
*/
      int speed_arr[] = { B38400, B19200, B9600, B4800, B2400, B1200, B300,
                          B38400, B19200, B9600, B4800, B2400, B1200, B300, };
      int name_arr[] = {  38400, 19200, 9600, 4800, 2400, 1200, 300, 38400,
                          19200, 9600, 4800, 2400, 1200, 300, };
void set_speed(int fd, int speed)
{
      unsigned int i;
      int status;
      struct termios Opt;
      tcgetattr(fd, &Opt);
      for ( i= 0; i < sizeof(speed_arr) / sizeof(int); i++)
      {
      if (speed == name_arr[i]) 
           {
            tcflush(fd, TCIOFLUSH);
            cfsetispeed(&Opt, speed_arr[i]);
            cfsetospeed(&Opt, speed_arr[i]);
            status = tcsetattr(fd, TCSANOW, &Opt);
            if (status != 0) 
            {
            perror("tcsetattr fd");
            return;
            }
            tcflush(fd,TCIOFLUSH);
           }
      }
}


/**
*@brief 设置串口数据位,停止位和效验位
*@param fd 类型 int 打开的串口文件句柄
*@param databits 类型 int 数据位 取值 为 7 或者8
*@param stopbits 类型 int 停止位 取值为 1 或者2
*@param parity 类型 int 效验类型 取值为N,E,O,S
*/
int set_Parity(int fd,int databits,int stopbits,int parity)
{
     struct termios options;
     if ( tcgetattr( fd,&options) != 0) 
     {
       perror("SetupSerial 1");
       perror("SetupSerial 2");
       return(SERIAL_FA
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值