本次实验使用开发板是美国Marvell公司生产的SOHO级网络通信微处理器芯片88E6218。开发环境是Ubuntu12.04,内核是UCLinux。

1.使用串口

本次课程主要是了解uart的使用,UART: Universal Asynchronous Receiver/Transmitter ,如图1-1所示:

图1-1 串口展示
实验是CPU往串口输入一个数据,然后串口会自动把该数据输出到串口终端,然后我们从串口终端输入字符,由串口接收到该字符后,传给CPU,由CPU执行相应的操作后打印出来。
首先,第一个实验是串口的波特率设置。根据数据手册,我们可以知道串口的基地址是0x8000_C840。如图1-2所示:

图1-2 串口基地址
其余的寄存器的地址也列出来了,在这里我们主要使用的寄存器是
LCR–控制寄存器,
LSR–状态寄存器,
RBR–接收数据寄存器,
THR–传输数据寄存器,
DLL和DLH是设置波特率的寄存器。

时序控制:
1.设置串口的波特率,首先要设置控制寄存器的D7位也就是第八位,如图1-3所示:

图1-3 设置串口控制寄存器
设置了这个位,就允许了读写DLL和DLH这两个寄存器,然后设置波特率。

计算波特率因子
baud factor=baud rate base/baud rate
baud rate base=8000000/16
由以上公式可以设置波特因子,将波特因子baud factor的第八位写入DLL寄存器,高八位写入DLH寄存器。这样就设置好了串口的波特率。

开始编程:见附录一
在虚拟机上面进入目录/s1/uClinux-dist,然后进入user,创建文件uart,在里面创建两个文件,serial.c 和Makefile,如图1-4所示:

图1-4 创建文件
然后将刚刚编写好的文件(附录1)复制进去,然后编写Makefile,如图1-5所示:

图1-5 编写Makefile

接着退到目录/s1/uClinux-dist/user下面,编辑Makefile,如图1-6所示,加入一行可以在编译的时候将这个uart目录页编译。

图1-6 编辑Makefile,添加代码
然后退出到目录/s1/uClinux-dist,下面执行make的编译命令,然后检查romfs/bin,可以看见下面已经生成了serial的命令。如图1-7所示

图1-7 检查romfs
接着启动开发板,下载新的zRomfs,进入shell之后运行serial,可以看见跟我们代码写的一样,会提示用法,如图1-8所示:

图1-8 输入提示
然后正确输入serial baud 38400,可以看见打印出设定的提示字符。如图1-9所示:

图1-9 输入设置波特率

2.使用串口输出数据

根据数据手册,我们可以知道,CPU从串口输出数据,是要将数据传到数据寄存器–THR,我们重新编写刚刚的设置波特率的程序实现输出一个字符,首先要添加代码,如图2-1所示:

图2-1 添加代码
判断是使用串口设置波特率还是纯输出数据,然后写好输出数据的函数,见附录2.
然后还是编译,下载到开发板试运行,这时候发现一个问题,提示输出字符的提示信息打印出来了,但是该字符却未打印出来,如图2-2所示,查阅资料,后才发现是printf函数将CPU输到串口的缓存数据给覆盖掉了,才未能打印出来,因此将printf函数全部注释掉,可以看见打印实现。

图2-2 输出被覆盖掉

输出被覆盖掉后修改代码,注释printf()函数。


图2-2修改后的代码(注释掉printf函数)
然后重新编译,下载,测试。

图2-2 修改代码之后的输出

接下来实现输出字符串的代码,输出字符串,只需要将字符串一个一个的输出,然后将字符串首地址加一,就可以实现一个一个的字符打印实现字符串的打印。在原来的代码上面继续添加函数,见附录3,然后还是编译,下载到开发板试运行,如图2-3所示:

图2-3 添加输出字符串的函数代码
然后编译,下载,测试。

图2-3 运行输出字符串
然后再继续修改,见附录四,实现输入字符串,转变大小写的函数,因为大小写的字符之间的ASCII码只相差32,所以添加代码如图2-4所示:

图2-4 添加转变字符串大小写的代码
然后还是编译,下载到开发板试运行,如图2-5所示:

图2-5 实现转变字符串大小写

接下来还要添加代码,实现人机交互,从输入流stdin,获取数据,放到uart的数据寄存器里面,然后CPU将其转换大小写形式,将其输出,如果检测到输入的字符为Q,则直接退出程序。接下来继续添加代码,见附录5,然后还是编译,下载到开发板试运行,如图2-6所示:

图2-5 实现人机交互

总结:

这个uart实验,主要是代码部分比较麻烦,需要不断的调试,不断的测试,最终才能实现完整的功能。从最初的只需要设置波特率,到后来的人机交互,慢慢增加代码的功能,一步一步的调试到最后的实现各个部分,中间经过了很多的工作和思考,但是经此一役,我可以明显的看到自己的进步,对于数据手册的阅读和使用又提升了一些熟练程度,并且对于自己的代码的掌控也是有了很大的进步,甚至在编写代码的时候有很多自己的想法去通过串口去实现很多的功能,这是以前自己做不到的,我相信通过这门课程我会形成自己的编程思想,锻炼自己的能力。

路很长,还需要继续努力,加油。

附录一:设置波特率serial.c(1)


#include<stdlib.h>
#include<string.h>
#include<ctype.h>#define SERIAL_IO_MEM 0x8000C840
#define FIREFOX_SERIAL_BAUD_BASE (8000000/16)
#define UART_RX 0x00
#define UART_TX 0x00
#define UART_DLL 0x00
#define UART_DLH 0x04
#define UART_IER 0x04
#define UART_IIR 0x08
#define UART_FCR 0x08
#define UART_LCR 0x0C
#define UART_MCR 0x10
#define UART_LSR 0x14
#define UART_MSR 0x18
#define UART_SCR 0x1C
//上面定义了很多宏定义,基地址已经给出,下面的都是偏移//函数声明
unsigned long serial_in( unsigned long offset );
void serial_out( unsigned long offset, unsigned long value);
int set_baud_rate(unsigned long baud);unsigned long parameter;
int main(int argc , char *argv[])
{int i;if(argc != 3){printf("Usage : serial  name  parameter\n");return 0;}if(strncmp(argv[1],"baud",4)==0){i = 0;printf("this is set baud.\n");}else {printf("input fault please retry\n");return -1;}switch(i){case 0: parameter = atol(argv[2]); //把字符串转换成长整型数set_baud_rate(parameter);printf("set baud parameter succssful!\n");break;default: break;}
printf("End succssful!\n");return 0;
}/*输入输出函数*/
/*从串口输出到CPU--CPU读*/
unsigned long serial_in( unsigned long offset )
{return *( unsigned long *)(SERIAL_IO_MEM+offset);
}
/*CPU往串口写*/
void serial_out( unsigned long offset, unsigned long value)
{*(unsigned long *)(SERIAL_IO_MEM+offset) = value;
}
/*设置波特率并初始化的函数*/
/*
*baud:设置的速率
*/
int set_baud_rate(unsigned long baud)
{unsigned long cval = 0x03;unsigned long quot;if( baud <= 0 )baud = 38400;quot = FIREFOX_SERIAL_BAUD_BASE / baud;serial_out( UART_LCR, cval | 0x80 ); /* set DLAB */serial_out( UART_DLL, quot & 0xff); /* LS of divisor */serial_out( UART_DLH, quot >> 8); /* MS of divisor */serial_out( UART_LCR, cval); /* reset DLAB */return 0;
}

附录二:实现输出单个字符serial.c(2)


#include<stdlib.h>
#include<string.h>
#include<ctype.h>#define SERIAL_IO_MEM 0x8000C840
#define FIREFOX_SERIAL_BAUD_BASE (8000000/16)
#define UART_RX 0x00
#define UART_TX 0x00
#define UART_DLL 0x00
#define UART_DLH 0x04
#define UART_IER 0x04
#define UART_IIR 0x08
#define UART_FCR 0x08
#define UART_LCR 0x0C
#define UART_MCR 0x10
#define UART_LSR 0x14
#define UART_MSR 0x18
#define UART_SCR 0x1C
//上面定义了很多宏定义,基地址已经给出,下面的都是偏移//函数声明
unsigned long serial_in( unsigned long offset );
void serial_out( unsigned long offset, unsigned long value);
int set_baud_rate(unsigned long baud);unsigned long parameter;
int main(int argc , char *argv[])
{int i;if(argc != 3){printf("Usage : serial  name  parameter\n");return 0;}if(strncmp(argv[1],"baud",4)==0){i = 0;printf("this is set baud.\n");}else if(strncmp(argv[1],"data",4)==0){i = 1;//printf("this is set input data.\n");}else {//printf("input fault please retry\n");return -1;}switch(i){case 0: parameter = atol(argv[2]); //把字符串转换成长整型数set_baud_rate(parameter);//printf("set baud parameter succssful!\n");break;case 1: parameter = 38400;set_baud_rate(parameter);//printf("set baud  parameter 38400 succssful!\n");set_output_chr(*argv[2]);//printf("set data  succssful!\n");break;default: break;}//printf("End succssful!\n");return 0;}/*输入输出函数*/
/*从串口输出到CPU--CPU读*/
unsigned long serial_in( unsigned long offset )
{return *( unsigned long *)(SERIAL_IO_MEM+offset);
}
/*CPU往串口写*/
void serial_out( unsigned long offset, unsigned long value)
{*(unsigned long *)(SERIAL_IO_MEM+offset) = value;
}/*设置波特率并初始化的函数*/
/*
*baud:设置的速率
*/
int set_baud_rate(unsigned long baud)
{unsigned long cval = 0x03;unsigned long quot;if( baud <= 0 )baud = 38400;quot = FIREFOX_SERIAL_BAUD_BASE / baud;serial_out( UART_LCR, cval | 0x80 ); /* set DLAB */serial_out( UART_DLL, quot & 0xff); /* LS of divisor */serial_out( UART_DLH, quot >> 8); /* MS of divisor */serial_out( UART_LCR, cval); /* reset DLAB */return 0;
}/*CPU往串口输出一个字符(串口输出数据到终端)*/
/*
*chr:串口要输出的字符
*/
void  set_output_chr(char chr )
{unsigned long cval = 0x20;//unsigned long rval = 0x00;/*设置状态寄存器,允许CPU写入*/serial_out(UART_LSR,cval & 0xff); //设置状态寄存器允许写串口(从CPU接受字符)/*将数据写到数据寄存器*/serial_out(UART_TX,chr); //8个字节/*写完后复位*/
//  serial_out(UART_LSR,rval & 0xff); //设置状态寄存器复位
}

附录三:实现输出字符串serial.c(3)


#include<stdlib.h>
#include<string.h>
#include<ctype.h>#define SERIAL_IO_MEM 0x8000C840
#define FIREFOX_SERIAL_BAUD_BASE (8000000/16)
#define UART_RX 0x00
#define UART_TX 0x00
#define UART_DLL 0x00
#define UART_DLH 0x04
#define UART_IER 0x04
#define UART_IIR 0x08
#define UART_FCR 0x08
#define UART_LCR 0x0C
#define UART_MCR 0x10
#define UART_LSR 0x14
#define UART_MSR 0x18
#define UART_SCR 0x1C
//上面定义了很多宏定义,基地址已经给出,下面的都是偏移//函数声明
unsigned long serial_in( unsigned long offset );
void serial_out( unsigned long offset, unsigned long value);
int set_baud_rate(unsigned long baud);unsigned long parameter;
int main(int argc , char *argv[])
{int i;if(argc != 3){printf("Usage : serial  name  parameter\n");return 0;}if(strncmp(argv[1],"baud",4)==0){i = 0;printf("this is set baud.\n");}else if(strncmp(argv[1],"data",4)==0){i = 1;//printf("this is set input data.\n");}else {//printf("input fault please retry\n");return -1;}switch(i){case 0: parameter = atol(argv[2]); //把字符串转换成长整型数set_baud_rate(parameter);//printf("set baud parameter succssful!\n");break;case 1: parameter = 38400;set_baud_rate(parameter);//printf("set baud  parameter 38400 succssful!\n");//set_output_chr(*argv[2]);//输出字符set_output_string(argv[2]);//输出字符串//printf("set data  succssful!\n");break;default: break;}//printf("End succssful!\n");return 0;}/*输入输出函数*/
/*从串口输出到CPU--CPU读*/
unsigned long serial_in( unsigned long offset )
{return *( unsigned long *)(SERIAL_IO_MEM+offset);
}
/*CPU往串口写*/
void serial_out( unsigned long offset, unsigned long value)
{*(unsigned long *)(SERIAL_IO_MEM+offset) = value;
}/*设置波特率并初始化的函数*/
/*
*baud:设置的速率
*/
int set_baud_rate(unsigned long baud)
{unsigned long cval = 0x03;unsigned long quot;if( baud <= 0 )baud = 38400;quot = FIREFOX_SERIAL_BAUD_BASE / baud;serial_out( UART_LCR, cval | 0x80 ); /* set DLAB */serial_out( UART_DLL, quot & 0xff); /* LS of divisor */serial_out( UART_DLH, quot >> 8); /* MS of divisor */serial_out( UART_LCR, cval); /* reset DLAB */return 0;
}/*CPU往串口输出一个字符(串口输出数据到终端)*/
/*
*chr:串口要输出的字符
*/
void  set_output_chr(char chr )
{unsigned long cval = 0x20;//unsigned long rval = 0x00;/*设置状态寄存器,允许CPU写入*/serial_out(UART_LSR,cval & 0xff); //设置状态寄存器允许写串口(从CPU接受字符)/*将数据写到数据寄存器*/serial_out(UART_TX,chr); //8个字节/*写完后复位*/
//  serial_out(UART_LSR,rval & 0xff); //设置状态寄存器复位
}/*CPU往串口输出字符串*/
/*
*chr:要输出的字符串
*/
void set_output_string(char *chr)
{unsigned long cval = 0x20;//unsigned long rval = 0x00;unsigned long n = 0;/*设置状态寄存器,允许写入*/serial_out(UART_LSR,cval & 0xff); //设置状态寄存器允许写串口(从CPU接受字符)while( (*chr!='\0')&&(n<128)) //规定最多写入128个{/*将一个数据写到数据寄存器*/set_output_chr(*chr);chr+=1; //开始写入下一个数据n++;}/*写完后复位*///serial_out(UART_LSR,rval & 0xff); //设置状态寄存器复位
}

附录四:实现输出字符串转换大小写serial.c(4)


#include<stdlib.h>
#include<string.h>
#include<ctype.h>#define SERIAL_IO_MEM 0x8000C840
#define FIREFOX_SERIAL_BAUD_BASE (8000000/16)
#define UART_RX 0x00
#define UART_TX 0x00
#define UART_DLL 0x00
#define UART_DLH 0x04
#define UART_IER 0x04
#define UART_IIR 0x08
#define UART_FCR 0x08
#define UART_LCR 0x0C
#define UART_MCR 0x10
#define UART_LSR 0x14
#define UART_MSR 0x18
#define UART_SCR 0x1C
//上面定义了很多宏定义,基地址已经给出,下面的都是偏移//函数声明
unsigned long serial_in( unsigned long offset );
void serial_out( unsigned long offset, unsigned long value);
int set_baud_rate(unsigned long baud);unsigned long parameter;
int main(int argc , char *argv[])
{int i;if(argc != 3){printf("Usage : serial  name  parameter\n");return 0;}if(strncmp(argv[1],"baud",4)==0){i = 0;printf("this is set baud.\n");}else if(strncmp(argv[1],"data",4)==0){i = 1;//printf("this is set input data.\n");}else {//printf("input fault please retry\n");return -1;}switch(i){case 0: parameter = atol(argv[2]); //把字符串转换成长整型数set_baud_rate(parameter);//printf("set baud parameter succssful!\n");break;case 1: parameter = 38400;set_baud_rate(parameter);//printf("set baud  parameter 38400 succssful!\n");//set_output_chr(*argv[2]);set_output_string(argv[2]);//printf("set data  succssful!\n");break;default: break;}//printf("End succssful!\n");return 0;}/*输入输出函数*/
/*从串口输出到CPU--CPU读*/
unsigned long serial_in( unsigned long offset )
{return *( unsigned long *)(SERIAL_IO_MEM+offset);
}
/*CPU往串口写*/
void serial_out( unsigned long offset, unsigned long value)
{*(unsigned long *)(SERIAL_IO_MEM+offset) = value;
}/*设置波特率并初始化的函数*/
/*
*baud:设置的速率
*/
int set_baud_rate(unsigned long baud)
{unsigned long cval = 0x03;unsigned long quot;if( baud <= 0 )baud = 38400;quot = FIREFOX_SERIAL_BAUD_BASE / baud;serial_out( UART_LCR, cval | 0x80 ); /* set DLAB */serial_out( UART_DLL, quot & 0xff); /* LS of divisor */serial_out( UART_DLH, quot >> 8); /* MS of divisor */serial_out( UART_LCR, cval); /* reset DLAB */return 0;
}/*CPU往串口输出一个字符(串口输出数据到终端)*/
/*
*chr:串口要输出的字符
*/
void  set_output_chr(char chr )
{unsigned long cval = 0x20;//unsigned long rval = 0x00;/*设置状态寄存器,允许CPU写入*/serial_out(UART_LSR,cval & 0xff); //设置状态寄存器允许写串口(从CPU接受字符)/*将数据写到数据寄存器*/serial_out(UART_TX,chr); //8个字节/*写完后复位*/
//  serial_out(UART_LSR,rval & 0xff); //设置状态寄存器复位
}/*CPU往串口输出字符串*/
/*
*chr:要输出的字符串
*/
void set_output_string(char *chr)
{unsigned long cval = 0x20;//unsigned long rval = 0x00;unsigned long n = 0;/*设置状态寄存器,允许写入*/serial_out(UART_LSR,cval & 0xff); //设置状态寄存器允许写串口(从CPU接受字符)while( (*chr!='\0')&&(n<128)) //规定最多写入128个{/*将一个数据写到数据寄存器*/set_output_chr(changeChr(*chr));chr+=1; //开始写入下一个数据n++;}/*写完后复位*///serial_out(UART_LSR,rval & 0xff); //设置状态寄存器复位
}/*转换一个字符*/
char changeChr(char chr )
{if(chr >='A' && chr <= 'Z'){chr+=32;}else if(chr >='a' && chr <= 'z'){chr-=32;}return chr;
}

附录五:实现人机交互serial.c(5)


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>#define SERIAL_IO_MEM 0x8000C840
#define FIREFOX_SERIAL_BAUD_BASE (8000000/16)
#define UART_RX 0x00
#define UART_TX 0x00
#define UART_DLL 0x00
#define UART_DLH 0x04
#define UART_IER 0x04
#define UART_IIR 0x08
#define UART_FCR 0x08
#define UART_LCR 0x0C
#define UART_MCR 0x10
#define UART_LSR 0x14
#define UART_MSR 0x18
#define UART_SCR 0x1C
//上面定义了很多宏定义,基地址已经给出,下面的都是偏移/*接下来是是定义很多函数的宏,便于主函数调用*/
unsigned long serial_in( unsigned long offset );
void serial_out( unsigned long offset, unsigned long value);
int set_baud_rate(unsigned long baud);
void  set_output_chr(char chr );
void set_output_string(char *chr);
void  input_chr();
void input_string();
char changeChr(char chr );char *data;
char dbuff[128];
unsigned long parameter;
char *rbuf;
int main(int argc , char *argv[])
{int i;if(argc != 3){printf("Usage : serial  name  parameter\n");return 0;}if(strncmp(argv[1],"baud",4)==0){i = 0;printf("this is set baud.\n");}else if(strncmp(argv[1],"data",4)==0){i = 1;//printf("this is set input data.\n");}else {printf("input fault please retry\n");return -1;}switch(i){case 0: parameter = atol(argv[2]); //把字符串转换成长整型数set_baud_rate(parameter);printf("set baud parameter succssful!\n");break;case 1: parameter = 38400;set_baud_rate(parameter);//printf("set baud  parameter 38400 succssful!\n");//set_output_chr(*argv[2]);set_output_string(argv[2]);//printf("set  data  succssful!\n");break;default: break;}//printf("End succssful!\n");sleep(2);//延时2秒printf("\n");
printf("******************************************************************\n");
printf(" please input yuor char  i can change it's format to the opposite\n");printf("******************************************************************\n");fflush(stdout); //刷新输出缓存,以免串口输出被覆盖掉sleep(1);//延时1秒while(1){fgets(rbuf,64,stdin);if(*rbuf == 'Q'){printf("you enter the world Q,i known that you want to go\n");printf("byb-byb !!!\n");return 0;   }elseset_output_string(rbuf);sleep(1);//延时1秒fflush(stdout); //刷新输出缓存}
}/*输入输出函数*/
/*从串口输出到CPU--CPU读*/
unsigned long serial_in( unsigned long offset )
{return *( unsigned long *)(SERIAL_IO_MEM+offset);
}
/*CPU往串口写*/
void serial_out( unsigned long offset, unsigned long value)
{*(unsigned long *)(SERIAL_IO_MEM+offset) = value;
}/*设置波特率并初始化的函数*/
/*
*baud:设置的速率
*/
int set_baud_rate(unsigned long baud)
{unsigned long cval = 0x03;unsigned long quot;if( baud <= 0 )baud = 38400;quot = FIREFOX_SERIAL_BAUD_BASE / baud;serial_out( UART_LCR, cval | 0x80 ); /* set DLAB */serial_out( UART_DLL, quot & 0xff); /* LS of divisor */serial_out( UART_DLH, quot >> 8); /* MS of divisor */serial_out( UART_LCR, cval); /* reset DLAB */return 0;
}/*CPU往串口输出一个字符(串口输出数据到终端)*/
/*
*chr:串口要输出的字符
*/
void  set_output_chr(char chr )
{unsigned long cval = 0x20;//unsigned long rval = 0x00;/*设置状态寄存器,允许CPU写入*/serial_out(UART_LSR,cval & 0xff); //设置状态寄存器允许写串口(从CPU接受字符)/*将数据写到数据寄存器*/serial_out(UART_TX,chr); //8个字节/*写完后复位*/
//  serial_out(UART_LSR,rval & 0xff); //设置状态寄存器复位
}/*CPU往串口输出字符串*/
/*
*chr:要输出的字符串
*/
void set_output_string(char *chr)
{unsigned long cval = 0x20;//unsigned long rval = 0x00;unsigned long n = 0;/*设置状态寄存器,允许写入*/serial_out(UART_LSR,cval & 0xff); //设置状态寄存器允许写串口(从CPU接受字符)while( (*chr!='\0')&&(n<128)) //规定最多写入128个{/*将一个数据写到数据寄存器*/set_output_chr(changeChr(*chr));//serial_out(*(unsigned long *)(SERIAL_IO_MEM+UART_TX),*chr);chr+=1; //开始写入下一个数据n++;}/*写完后复位*///serial_out(UART_LSR,rval & 0xff); //设置状态寄存器复位
}/*转换一个字符*/
char changeChr(char chr )
{if(chr >='A' && chr <= 'Z'){chr+=32;}else if(chr >='a' && chr <= 'z'){chr-=32;}return chr;
}

(五)嵌入式:设置UART波特率并实现转变字符串大小,实现人机交互相关推荐

  1. NXP JN5169 UART 波特率设置

    NXP JN5169 UART 波特率设置 一.系统时钟介绍 1.高速(32MHz)系统时钟 1.32MHz 晶体振荡器 2.高速RC振荡器 2.低速(32kHz)系统时钟 1.32 kHz RC 振 ...

  2. 【嵌入式】任意波特率的合理计算——高波特率、低误差

    文章目录 一.概要 二.STM32F4波特率的计算方法 三.高波特率.低误差的计算方法 四.实验验证 1.与参考手册中的典型波特率误差进行比对 2.实际验证 一.概要 使用UART串口时往往比较喜欢配 ...

  3. linux命令设置波特率,Linux设置串口波特率等参数

    stty查看串口参数 stty -F /dev/ttyS0 -a 1 1 查看串口1(/dev/ttyS0)当前的参数,包括波特率.数据位等. stty设置串口参数 stty -F /dev/ttyS ...

  4. TQ2440开发板学习纪实(5)--- 设置UART串口,输出Hello World!

    0 串口,UART,RS232,RS485傻傻分不清 0.1 串行通信与并行通信 串口名字表示采用的通信方式为串行而不是并行.那么串行与并行的区别是啥呢?很简单,串行就是同一时刻只能传输一个bit,而 ...

  5. DSP:TMS320C6657 之 UART波特率问题

    6657 设置串口波特率 以614400为例 (1)根据公式计算分频系数 (2)1GHz主频下 UART输入频率166666666Hz.(1/6) (3)16倍采样率下分频系数是16.95取整16,实 ...

  6. (100)Verilog HDL:UART波特率设计

    (100)Verilog HDL:UART波特率设计 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL:UART波特率设计 5)结语 1.2 FPG ...

  7. Fiddler(五)设置代理 HTTPS 请求

    Fiddler(五)设置代理 HTTPS 请求 HTTPS 介绍 Fiddler设置HTTPS代理 HTTPS 介绍 HTTPS(全称:Hyper Text Transfer Protocol ove ...

  8. 【重装xp系统必然要知道的五个设置】

    使用xp系统的网友们想必都知道,xp系统中有一个系统还原的功能,这个功能能够让网友们轻松的重装系统,不过,网友们在使用这个功能的时候,有几个需要注意的设置一定设置好才行,下面就一起来了解这五个设置吧! ...

  9. 安装Windows XP后的五个设置步骤

    安装Windows XP后的五个设置步骤 安装Windows XP后的五个设置步骤 当你兴冲冲地买来XP的光盘,经过漫长的文件拷贝.Windows识别硬件和初始化系统后,终于进入Windows XP那 ...

最新文章

  1. 影谱科技宣布完成13.6亿D轮融资 商汤软银等多家参与
  2. hdu1799 循环多少次?(组合递推公式的使用)
  3. 用函数式编程思维解析anagrams函数
  4. OJ1077: 字符串加密(C语言)
  5. CV方向介绍 | 基于自然语言的跨模态行人re-id的SOTA方法简述(上)
  6. java for in 循环_js的for in循环和java里foreach循环的区别分析
  7. usb深度检查 清理_红桥区清理隔油池一般多少钱
  8. mysql udf http,mysql下mysql-udf-http效率测试小记
  9. PCD Lesson2:PCD文件的write
  10. 多线程同步工具——volatile变量
  11. a卡 n卡 html5性能,实测说明,A卡N卡测试平台
  12. 几个有用的遥感和地理信息网站
  13. 颜值即正义,这个蓝色爱心不好看吗
  14. 《软件测试》 --- 读书笔记
  15. 淘宝关键词搜索采集商品价格销量接口分析商品价格走势(商品列表接口,商品销量接口,商品价格接口,分类ID采集精准商品数据接口)接口代码对接流程
  16. Hazelcast介绍
  17. 智能抠图工具 TeoreX PhotoScissors 5.0 汉化
  18. 学习 HTTP Referer
  19. Python:统计正负数个数
  20. Java EE基础练习题

热门文章

  1. python如何读取tfrecord文件_tensorflow-TFRecord 文件详解
  2. 算法工程师 面试题与解答
  3. 微软呼吁企业升级Win 8 称死机率比XP降低63%
  4. 浏览器怎么模拟手机访问网页
  5. BZOJ4770: 图样
  6. 【VMware】VMware Pro16 使用 Ubuntu18.04,从零配置基础环境
  7. 东方博宜OJ 1462 - 【入门】小明的游泳时间
  8. 汇编语言实验4-利用跳转指令构造循环
  9. Lanenet网络Tusimple数据集国内源下载
  10. 由eric6转到pycharm的2个理由