[]串口通信 零星笔记
1、
在 Linux 下串口文件是位于 /dev 下的
串口一 为 /dev/ttyS0
串口二 为 /dev/ttyS1
打开串口是通过使用标准的文件打开函数操作:
打开串口是通过使用标准的文件打开函数操作:
int fd;
fd = open( "/dev/ttyS0", O_RDWR);
if (-1 == fd){
perror(" 提示错误!");
}
|
最基本的设置串口包括波特率设置,效验位和停止位设置。
串口的设置主要是设置 struct termios 结构体的各成员值。
struct termio
{ unsigned short c_iflag;
unsigned short c_oflag;
unsigned short c_cflag;
unsigned short c_lflag;
unsigned char c_line;
unsigned char c_cc[NCC];
};
|
设置这个结构体很复杂,我这里就只说说常见的一些设置:
波特率设置
下面是修改波特率的代码:
struct termios Opt; tcgetattr(fd, &Opt); cfsetispeed(&Opt,B19200); cfsetospeed(&Opt,B19200); tcsetattr(fd,TCANOW,&Opt); |
设置波特率的例子函数:
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){
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(fd1, TCSANOW, &Opt);
if (status != 0) {
perror("tcsetattr fd1");
return;
}
tcflush(fd,TCIOFLUSH);
}
}
}
|
更多看原文:http://www.ibm.com/developerworks/cn/linux/l-serials/
char *专门用于指以' '为结束的字符串
Main函数参数argc,argv说明
Wikipedia,自由的百科全书
C/C++语言中的main函数,经常带有参数argc,argv,如下:
int main(int argc, char** argv)
int main(int argc, char* argv[])
这两个参数的作用是什么呢?argc 是指命令行输入参数的个数,argv存储了所有的命令行参数。假如你的程序是hello.exe,如果在命令行运行该程序,(首先应该在命令行下用 cd 命令进入到 hello.exe 文件所在目录) 运行命令为:
hello.exe Shiqi Yu
那么,argc的值是 3,argv[0]是"hello.exe",argv[1]是"Shiqi",argv[2]是"Yu"。 ![[转载]串口通信 <wbr>零星笔记 Image:Hello-argc-argv.png](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
下面的程序演示argc和argv的使用:
#include <stdio.h>
int main(int argc, char ** argv)
{
int i;
for (i=0; i < argc; i++)
printf("Argument %d is %s.n", i, argv[i]);
return 0;
}
假如上述代码编译为hello.exe,那么运行
hello.exe a b c d e
将得到
Argument 0 is hello.exe. Argument 1 is a. Argument 2 is b. Argument 3 is c. Argument 4 is d. Argument 5 is e.
运行
hello.exe lena.jpg
将得到
Argument 0 is hello.exe. Argument 1 is lena.jpg.
FILE *fopen(const char *filename, const char *mode);
fopen函数说明:将文件 filename以mode方式打开,并返回指向这个文件的一个流.
其中打开方式可以为以下的值:
r 只读方式打开
w 创建一个文件用于写入,如果文件已经存在,这个文件会被覆写
a 打开一个文件并添加,如果文件存在,打开的时候是指向文件的最后,如果不存在则创建
r+ 打开一个已经存在的文件来更新(读写),不存在则创建
w+ 创建一个文件来更新(读写),如果文件已经存在,则会被覆写
a+ 打开一个文件来更新,如果文件存在,打开的时候是指向文件的最后,如果不存在则创建
另外还可以指定是以二进制方式(b)打开还是以文本方式(t)打开
所以fp=fopen(filename, "rb++"); 应该是以二进制方式打开filename来更新
另外,与fopen一起用的还有:
指定当前位置:
int fseek(FILE *stream, long offset, int origin);
void rewind(FILE *stream);//指到开始位置
读:size_t fread(void *ptr, size_t size, size_t n, FILE *stream);
写:size_t fwrite(const void *ptr, size_t size, size_t n, FILE *stream);
格式化:int fprintf(FILE *stream, const char *format[, argument, ...]);
浙公网安备 33010602011771号