最近在做单片机的火焰传感器采集数据并且并且将危险信息发送给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,'