单片机和虚拟机里的Linux进行串口通信

2019-04-15 17:05发布

最近在做单片机的火焰传感器采集数据并且并且将危险信息发送给PC端的Linux。一直卡在Linux端的,所以,做了各种尝试,参考了网上一篇大神的代码,终于把自己的东西弄了出来。 先说明设备吧,CC2530单片机、linux下的pl2303的驱动、虚拟机环境下的CentOS以及minicom。 下面我把单片机端的代码贴出来: /* ************************************************ *Name : serial_communication_CC2530 * *Date : 2015-04-29 * *Author : Sniper * *Aim : fire sensor check the fire and send the * * message to linux wihich though the * * serial port. * ************************************************ */ #include "ioCC2530.h" #include #include #define uchar unsigned char #define uint unsigned int void Uart_send_char(int data); uchar Recdata[]="fire!"; /* * init the clock */ void initclk(void) { SLEEPCMD&= ~0X04; CLKCONCMD = 0X10; while(CLKCONSTA!=0X10); SLEEPCMD = 0X04; //主频32M } /* *init the uart */ void inituart(void) { IEN0|=0x84;//总中断,接收中断使能 U0CSR|=0xc0;//UART模式,允许接收 U0GCR=10; U0BAUD=59; } /* *init the IO */ void initio(void) { P0SEL|=0x0c; } /* *Uart send the string */ void UartTX_Send_String(uchar Data[],int len) { int j; for(j=0;j这个是linux端的代码,因为我用的设备设置是波特率38400、串口ttyUSB0、数据位8位、停止位1位、无校验方式。 /* ************************************************* *Name : Serial_communication.c * *Date : 2015-04-29 * *Author : Sniper * *Aim : make the CC2530 single chip and * * Linux (CentOS) communication. * * Linux receive and print the message* ************************************************* */ #include #include #include #include #include #include /* *terminal device header file */ #include #include #include /* *struct termios * struct termios{ unsigned short c_iflag; //输入模式标志 unsigned short c_oflag; //输出模式标志 unsigned short c_cflag; //控制模式标志 unsigned short c_lflag; //区域模式标志或本地模式标志或局部模式 unsigned char c_line; //行控制line discipline unsigned char c_cc[NCC]; // 控制字符特性 }; */ #define SERIAL_PORT "/dev/ttyUSB0" //串口地址 #define PORT_SPEED 38400 //串口波特率 #define DATABITS 8 //数据位 #define STOPBITS 1 //停止位 #define PARITY 'n' //校验方式 (不校验) int setSpeed(int, int, struct termios*); int setParity(int, int, int, int, struct termios); int openPort(void); int init(void); void readPort(int); int main() { char *quit = (char*)malloc(sizeof(char*)); int fd; char write_buf[256]; memset(write_buf,'