查看: 4226|回复: 8

[求助] 【玩转ChipKIT Uno32】第二节串口通信

[复制链接]

该用户从未签到

发表于 2012-8-8 13:05:52 | 显示全部楼层 |阅读模式
分享到:
原帖由
nongxiaoming
发自:dev.eefocus.com
------------------------------------------------------------------------------------------------------------------------------------------
上一节我们讲了驱动的安装和开发平台的搭建使用,并在后面做了个点亮LED的小实验。这节我们来学习一下ChipKIT Uno32的串口的使用,内容比较少,也比较简单。
     
     ChipKIT Uno32的串口分为两种,一种是硬件串口,一种为软件串口。
     硬件串口是我们板子主芯片内带的串口,也就是我们的USB转串口芯片连接的串口,它的特点是:发送和接收管脚固定,用户不能指定,CPU损耗较低。
     软件串口是ChipKIT Uno32提供的一个软件库,是使用软件模拟出来的串口,它的特点是:发送管脚和接收管脚可以由用户定义,方便灵活但由于是软件实现,对CPU损耗较高。

下面我们先介绍几个串口通信常用的几个函数:
Ø Serial.begin(baudrate)   串口定义波特率函数,baudrate表示波特率,如960019200等,这个比较重要,在使用串口之前必须先设定好。
Ø int  Serial.available()  判断缓冲器状态,如果大于0则表示缓冲器有数据。
Ø int  Serial.read()   读串口数据并返回收到数据。这里读只是读一个帧的数据,想读入一串字符的话请配合Serial.available()使用,读出缓冲区的所有数据。
Ø Serial.flush()   清空缓冲器。这个用的比较少,主要是为了避免缓冲区太多数据堆积,导致用户接收不到最新数据而提供的,在接收数据过快,不能及时读取到新数据时使用清空缓冲器来确保收到的数据为新数据。
Ø Serial.print(data)  从串行端口输出数据。data代表数据,默认为十进制,等同于Serial.print(dataDEC)
Ø Serial.print(data, encoding)   从串口输出特定格式的数据。data代表数据,encoding代表数据格式,可以为DECHEXOCTBINBYTE分别代表十进制,十六进制,八进制,二进制,字符型。
Ø 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);                          //打印100ACII码字符
   Serial.println(" ");                              //打印空格换行
  delay(100);
  Serial.println("SerialPort demo end test!");       //输出字符串
}

如下图:
1.jpg
编译并上传到板子运行,点击菜单栏的“Tool”菜单下的“Serial Monitor”串口监视软件将会看到如下效果图:
   2.jpg
在发送框中输入"Hello",点击发送,将同时收到"Hello"

到此我们的硬件串口测试完毕。下面我们看一下软件串口。
我们打开Mpide目录下的“libraries”文件夹,我们会看到有“SoftwareSerial”的文件夹,没错,这里就是软件串口的库文件,打开文件夹下面的“SoftwareSerial.h”文件,我们会看到有如下代码:
3.jpg
这里就是软件串口的类声明。我们新建一个工程,命名为“SoftWareSerialTest”,将刚刚我们写的代码复制过来。同时点击菜单栏“Sketch”中的“Import Library...”加入“SoftwareSerial”库的头文件,如下图:
4.jpg

同时将代码改变如下:
#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);                          //打印100ACII码字符
   mySerial.println(" ");                              //打印空格换行
  delay(100);
  mySerial.println("SerialPort demo end test!");       //输出字符串
}

这里我们留着给读者自己去实验验证。



【玩转ChipKIT Uno32】2.串口通信.zip (110.68 KB, 下载次数: 29)
回复

使用道具 举报

  • TA的每日心情
    难过
    2015-7-11 15:23
  • 签到天数: 567 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2012-9-8 09:19:04 | 显示全部楼层
    突然发现这一版块基本都是LZ的帖子,这个…………坛子里学的人不多啊
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2015-7-11 15:23
  • 签到天数: 567 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2012-9-8 09:19:42 | 显示全部楼层
    本帖最后由 醉清风 于 2012-9-9 20:54 编辑

    这都能抢到沙发,看来关注的童鞋不多啊
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-5-12 10:32
  • 签到天数: 295 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2014-1-2 22:29:35 | 显示全部楼层
    顶一个~~~~~~~~~~~~~~~~~~~~~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-2-22 19:39
  • 签到天数: 316 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2014-1-12 20:37:34 | 显示全部楼层
    顶一个!!!!!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2016-11-17 13:26
  • 签到天数: 410 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2014-1-18 11:04:07 | 显示全部楼层
    本帖最后由 woshizz 于 2014-1-18 19:05 编辑

    软件串口 可能是要外接max232 到对应的引脚才可以  我试着 软件操作与usb链接的端口 不可以 ,没有看datasheet{:soso_e127:}
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2016-11-17 13:26
  • 签到天数: 410 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2014-1-18 11:04:43 | 显示全部楼层
    硬件串口调试通过
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2023-1-28 16:20
  • 签到天数: 980 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2014-5-22 08:21:40 | 显示全部楼层
    请问一下这个ChipKIT Uno32怎么连接电脑的串口啊
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2023-1-28 16:20
  • 签到天数: 980 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2014-5-23 08:13:06 | 显示全部楼层
    o 没人回答我                          
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-4-18 08:09 , Processed in 0.209029 second(s), 31 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.