原帖由
nongxiaoming
发自:dev.eefocus.com
------------------------------------------------------------------------------------------------------------------------------------------
上一节我们讲了驱动的安装和开发平台的搭建使用,并在后面做了个点亮LED的小实验。这节我们来学习一下ChipKIT Uno32的串口的使用,内容比较少,也比较简单。 ChipKIT Uno32的串口分为两种,一种是硬件串口,一种为软件串口。 硬件串口是我们板子主芯片内带的串口,也就是我们的USB转串口芯片连接的串口,它的特点是:发送和接收管脚固定,用户不能指定,CPU损耗较低。 软件串口是ChipKIT Uno32提供的一个软件库,是使用软件模拟出来的串口,它的特点是:发送管脚和接收管脚可以由用户定义,方便灵活但由于是软件实现,对CPU损耗较高。
下面我们先介绍几个串口通信常用的几个函数: Ø Serial.begin(baudrate) 串口定义波特率函数,baudrate表示波特率,如9600,19200等,这个比较重要,在使用串口之前必须先设定好。 Ø int Serial.available() 判断缓冲器状态,如果大于0则表示缓冲器有数据。 Ø int Serial.read() 读串口数据并返回收到数据。这里读只是读一个帧的数据,想读入一串字符的话请配合Serial.available()使用,读出缓冲区的所有数据。 Ø Serial.flush() 清空缓冲器。这个用的比较少,主要是为了避免缓冲区太多数据堆积,导致用户接收不到最新数据而提供的,在接收数据过快,不能及时读取到新数据时使用清空缓冲器来确保收到的数据为新数据。 Ø Serial.print(data) 从串行端口输出数据。data代表数据,默认为十进制,等同于Serial.print(data,DEC)。 Ø Serial.print(data, encoding) 从串口输出特定格式的数据。data代表数据,encoding代表数据格式,可以为DEC,HEX,OCT,BIN,BYTE分别代表十进制,十六进制,八进制,二进制,字符型。 Ø Serial.println(data) 从串行端口输出数据并换行,data代表数据,和Serial.print(data) 类似,就是在数据的末尾多加了换行符。 Ø Serial.println(data, encoding) 从串口输出特定格式的数据并换行,这个也是和Serial.print(data, encoding) 多了个在结尾换行而已。
好了,说了那么多理论,该是实验的时候了。 打开我们的Mpide,选择好板子和端口(如果你上次配置好了,就可以不用配置),保存工程为“SerialTest”。 在我们的工程中输入以下代码:
void setup() { Serial.begin(9600); //设置串口的波特率 test(); //运行我们的测试程序 } void loop() { if(0<Serial.available()) //判断是否接收到数据 { Serial.print(Serial.read(),BYTE); //将数据读回并发送回去 } } void test() { Serial.println("Hello,I am ChipKIT Uno32!"); //输出字符串 delay(100); //延时 Serial.println("This is a SerialPort demo!"); //输出字符串 delay(100); //延时 Serial.print("The pint(data) function test!"); //输出字符串 Serial.print(100); //延时 Serial.print("The pint(data,encoding) function test!"); //输出字符串 Serial.println(" "); //打印空格换行 Serial.print(100,DEC); //打印100的十进制 Serial.println(" "); //打印空格换行 Serial.print(100,HEX); //打印100的十六进制 Serial.println(" "); //打印空格换行 Serial.print(100,OCT); //打印100的八进制 Serial.println(" "); //打印空格换行 Serial.print(100,BIN); //打印100的二进制 Serial.println(" "); //打印空格换行 Serial.print(100,BYTE); //打印100的ACII码字符 Serial.println(" "); //打印空格换行 delay(100); Serial.println("SerialPort demo end test!"); //输出字符串 }
如下图: 编译并上传到板子运行,点击菜单栏的“Tool”菜单下的“Serial Monitor”串口监视软件将会看到如下效果图: 在发送框中输入"Hello",点击发送,将同时收到"Hello"。
到此我们的硬件串口测试完毕。下面我们看一下软件串口。 我们打开Mpide目录下的“libraries”文件夹,我们会看到有“SoftwareSerial”的文件夹,没错,这里就是软件串口的库文件,打开文件夹下面的“SoftwareSerial.h”文件,我们会看到有如下代码: 这里就是软件串口的类声明。我们新建一个工程,命名为“SoftWareSerialTest”,将刚刚我们写的代码复制过来。同时点击菜单栏“Sketch”中的“Import Library...”加入“SoftwareSerial”库的头文件,如下图:
同时将代码改变如下: #include <SoftwareSerial.h> #define Tx 2 //定义发送管脚 #define Rx 3 //定义接收管脚 SoftwareSerial mySerial(Rx,Tx); void setup() { mySerial.begin(9600); //设置串口的波特率 test(); //运行我们的测试程序 } void loop() { mySerial.print(Serial.read(),BYTE); //将数据读回并发送回去 } void test() { mySerial.println("Hello,I am ChipKIT Uno32!"); //输出字符串 delay(100); //延时 mySerial.println("This is a SerialPort demo!"); //输出字符串 delay(100); //延时 mySerial.print("The pint(data) function test!"); //输出字符串 mySerial.print(100); //延时 mySerial.print("The pint(data,encoding) function test!"); //输出字符串 mySerial.println(" "); //打印空格换行 mySerial.print(100,DEC); //打印100的十进制 mySerial.println(" "); //打印空格换行 mySerial.print(100,HEX); //打印100的十六进制 mySerial.println(" "); //打印空格换行 mySerial.print(100,OCT); //打印100的八进制 mySerial.println(" "); //打印空格换行 mySerial.print(100,BIN); //打印100的二进制 mySerial.println(" "); //打印空格换行 mySerial.print(100,BYTE); //打印100的ACII码字符 mySerial.println(" "); //打印空格换行 delay(100); mySerial.println("SerialPort demo end test!"); //输出字符串 }
这里我们留着给读者自己去实验验证。
【玩转ChipKIT Uno32】2.串口通信.zip
(110.68 KB, 下载次数: 29)
|