Zigbee之旅(五):几个重要的CC2430基础实验——串口通信

一、承上启下

  在无线传感网络中,CC2430需要将采集到的数据发送给上位机(即PC)处理,同时上位机需要向CC2430发送控制信息。这一切都离不开两者之间的信息传递。这一节,我们就来学习如何实现PC机与CC2430之间的串口通信。

  CC2430包括2个串行通信接口 USART0 与 USART1,每个串口包括两个模式:UART(异步)模式、SPI(同步)模式,本节仅涉及UART模式)。

二、串口通信实验

(1)实验简介

  实现开发板与PC机的通信:PC向CC2430发送某一字符串,CC2430收到后返回此此字符串给PC。

(2)实验准备

  开始编写代码之前,需要搭建好硬件设施:正确连线 + 安装USB转串的驱动。

  硬件连线需要两条:

    CC2430开发板的JTAG口 → 调试器 → PC的USB口(用于程序的调试、下载)

    CC2430开发板的串口 → PC的USB口(用于PC与CC2430的数据通信)

  然后需要安装USB转串口的驱动(下载地址)

  为了向串口发送数据,还需要一个串口调试工具(下载地址)。

(3)程序流程图

(4)实验源码及剖析

/*
  实验说明:UART0,波特率115200bps,PC机向CC2430送字符串(以@字符结束),CC2430收到后返回该字符串
*/

#include <ioCC2430.h>

unsigned char recv_buf[300] = {0};
unsigned char recv_count = 0;

/*系统时钟初始化
-------------------------------------------------------*/
void xtal_init(void)
{
  SLEEP &= ~0x04;             //都上电
  while(!(SLEEP & 0x40));     //晶体振荡器开启且稳定
  CLKCON &= ~0x47;            //选择32MHz 晶体振荡器
  SLEEP |= 0x04;
}

/*UART0通信初始化
-------------------------------------------------------*/
void Uart0Init(unsigned char StopBits,unsigned char Parity)
{
   PERCFG&= ~0x01;                  //选择UART0为可选位置一,即RXD接P0.2,TXD接P0.3
   P0SEL |=  0x0C;                  //初始化UART0端口,设置P0.2与P0.3为外部设备IO口

U0CSR = 0xC0;                    //设置为UART模式,并使能接收器
   
   U0GCR = 11;
   U0BAUD = 216;                     //设置UART0波特率为115200bps,至于为何是216和11,可查阅CC2430中文手册
   
   U0UCR |= StopBits|Parity;        //设置停止位与奇偶校验
}

/*UART0发送数据
-------------------------------------------------------*/
void  Uart0Send(unsigned char data)
{
  while(U0CSR&0x01);    //等待UART空闲时发送数据
  U0DBUF = data;
}

/*UART0发送字符串
-------------------------------------------------------*/
void Uart0SendString(unsigned char *s)
{
  while(*s != 0)         //依次发送字符串s中的每个字符
    Uart0Send(*s++);
}

/*UART0接受数据
-------------------------------------------------------*/
unsigned char Uart0Receive(void)
{
  unsigned char data;
  while(!(U0CSR&0x04)); //查询是否收到数据,否则继续等待
  data=U0DBUF;          //提取接收到的数据
  return data;          
}

/*主函数
-------------------------------------------------------*/
void main(void)
{
  unsigned char i,b;
  
  xtal_init();

Uart0Init(0x00,0x00);  //初始化UART0,设置1个停止位,无奇偶校验
  Uart0SendString("Please Input string ended with '@'!\r\n");

recv_count = 0;
  
  while(1)
  {
    while(1)                           
    {
      b = Uart0Receive();UART
      if(b=='@')break;                 //若接收到'@',则跳出循环,输出字符串

recv_buf[recv_count] = b;        //若不是'@',则继续向字符数组recv_buf[]添加字符
      recv_count++;
    }
    for(i=0; i<recv_count; i++)        //输出字符串
      Uart0Send(recv_buf[i]);
    
    Uart0SendString("\n");
    recv_count =0;                     //重置
  }
}

  首先配置USART0所对应的I/O口:通过对 PECFRG.0 清零来设置UART0为可选位置1,即RXD对应P0.2,TXD对应P0.3。然后配置P0.2和P0.3为外部设备I/O。

  然后选择UART模式,并使能接收器。接着配置USART0的参数:波特率115200,无奇偶校验、停止位为1。

  接着向PC发送一条字符串:Please Input string ended with '@'!,然后就使用while(1)不断地去试图获取接收的每一个字符。当此字符不为'@'时,则表示还未输入完成,继续将此字符添加到字符数组recv_buf中;当此字符正好为'@'时,则表示输入完成,因此跳出循环将recv_buf中的每一个字符按次序发送到PC,同时重置recv_count。

(5)实验结果

  首先完成硬件连线,打开串口调试工具,配置参数如下图:

  点击“打开串口”,然后启动IAR调试,让程序跑起来,你会发现串口调试工具上的接收框中出现了预期的字符串:

  然后在串口调试工具中下方的发送textbox中,输入"Hello",如下所示:

  点击“发送”之后,你或许会奇怪,为什么CC2430不会返回你所输入的内容,那是因为你没有用@结尾。

  我们再次输入"Zigbee!@",点击“发送”,结果如下所示:

  就会出现预期内容“Hello Zigbee!”了!到此实验结束~

三、结语

  本篇介绍了CC2430开发板与上位机的通信。具备了串口通信的基础后,下一节我们来一起学习ADC(模数转换)单次采样。利用ADC,我们可以采集开发板上的温度传感器的值,并将温度值通过串口发送到PC上显示出来。

转载于:https://www.cnblogs.com/leytton/p/8253339.html

Zigbee之旅(五):几个重要的CC2430基础实验——串口通信相关推荐

  1. Zigbee之旅(八):几个重要的CC2430基础实验——看门狗

    Zigbee之旅(八):几个重要的CC2430基础实验--看门狗 一.承上启下 再好的操作系统,不管是现在的Win7还是以后Win8.Win9,总会出现BlueScreen的时候,更何况是小小的单片机 ...

  2. Zigbee之旅(九):几个重要的CC2430基础实验——系统睡眠及中断唤醒

    Zigbee之旅(九):几个重要的CC2430基础实验--系统睡眠及中断唤醒 一.承上启下 这一篇,我们来讨论一下CC2430的睡眠功能及唤醒方法.在实际运用中的CC2430节点一般是靠电池来供电,因 ...

  3. 嵌入式成长轨迹54 【Zigbee项目】【CC2430基础实验】【系统睡眠工作状态】

    本实验在小灯闪烁10 次以后进入低功耗模式 PM3 .CC2430 一共有4 种功耗模式,分别是PM0,PM1,PM2,PM3,以 PM3 功耗最低. SLEEP (0xBE) - Sleep mod ...

  4. 嵌入式成长轨迹53 【Zigbee项目】【CC2430基础实验】【串口时钟PC显示】

    void InitT1(void) : 函数原型: 1 void InitT1(void) 2 { 3 T1CCTL0 = 0X44; 4 //T1CCTL0 (0xE5) 5 //T1 ch0 中断 ...

  5. 嵌入式成长轨迹37 【Zigbee项目】【CC2430基础实验】【自动闪烁】

    最为简单的代码,只用到一个寄存器P1DIR.因为点亮的led灯(p1.0和p1.1)的管脚是p1的,要输出就得将这两个管脚设置为输出管脚.该寄存器用0~8对应1.0~1.8管脚. 1 //main.c ...

  6. 嵌入式成长轨迹52 【Zigbee项目】【CC2430基础实验】【在PC用串口收数并发数】...

    在PC上从串口向 CC2430发任意长度为 30 字节的字串,若长度不足 30 字节,则以"#"为字串末字节,CC2430在收到字节后会将这一字串从串口反向发向 PC,用串口助手可 ...

  7. Zigbee之旅(二):第一个CC2430程序——LED灯闪烁实验

    Zigbee之旅(二):第一个CC2430程序--LED灯闪烁实验 一.承上启下 在上一篇文章<Zigbee之旅(一):开天辟地>中,我们简要的介绍了Zigbee,以及其开发环境的搭建.O ...

  8. Zigbee之旅(一):开天辟地

    Zigbee之旅(一):开天辟地 一.前言 首先自我介绍一下~我是来自湖北某高校的一名大三学生.因专业及个人爱好,最近对Zigbee比较感兴趣.于是我和几个班里的同学商量了下,凑了些钱购置了一套基于C ...

  9. HALCON学习之旅(五)

    HALCON学习之旅(五) 文章目录 HALCON学习之旅(五) 1.如何获取程序运行时间 2.如何将Bayer图像转换为彩色图像 3.如何将图像转化为矩阵形式 4.如何让图像自适应窗口(补充) 5. ...

  10. zigbee基础应用(五)uart串口通信

    zigbee基础应用(五)uart串口通信 1.硬件篇 P0.2为RX P0.3为TX 2.芯片篇 用到的芯片的概况 3.计算篇 波特率的计算公式,通过对UxBAUD.BAUD_M和UxGCR.BAU ...

最新文章

  1. C++/STL Bitset (转)
  2. 爱立信数据分析解决方案抓住物联网发展机遇
  3. ping 不是内部或外部命令,也不是可运行的程序 或批处理文件。的解决办法
  4. 作者:男,博士,西南财经大学经济数学学院讲师、硕士生导师
  5. 网易被曝暴力裁患绝症员工,回应:存在不近人情的地方,向前同事道歉
  6. python基础for循环和while循环(十)
  7. 力扣45. 跳跃游戏 II(JavaScript)
  8. 用maven按环境打包SpringBoot的不同配置文件
  9. html+css+js基础问答
  10. 有线电视维护服务器,东方有线电视 网络服务器 设置
  11. ABBYY教程—PDF识别模式如何使用?
  12. Amazon EC2最新最全使用教程!!!
  13. QQ商家(QQ在线咨询,QQ推广等)
  14. 安装了MyIM,试验后感觉还不错
  15. 前端高效开发必备的js库梳理,日常使用中会持续更新
  16. 常见C++开源网站项目
  17. zxing换行_为什么我的word里的横线上写完一行字不能自动换行,?
  18. ubuntu 网速测试方法
  19. Win7电脑不能录音怎么办?Win7电脑无法录音的解决方法
  20. 关于网站搜索引擎优化技巧,杭州SEO公司清法网络有话说

热门文章

  1. omnet++ 中tictoc10-12学习笔记
  2. 分销系统之项目架构(第一篇)
  3. 获取openid失败怎么办_微信小程序openid怎么获取 获取微信openid失败解决方法
  4. 《大电机技术》期刊简介
  5. 计算机系相声剧本,大学相声剧本:两种学生
  6. activex控件无法安装解决方法
  7. sql语句的插入方式总结
  8. coherence-based label propagation over time series for accelerated active learning
  9. 对象的15位、18位中国大陆身份证号码解析、验证工具
  10. HG30A-3多用表校验仪