智能创客,中国最大的极客空间,智能平台,免费教学,视频教程,手把手教你创造儿时梦想!

标题: Zigbee之旅(五):几个重要的CC2430基础实验——串口通信 [打印本页]

作者: znck007    时间: 2014-2-9 10:28
标题: 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

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 '@'!");

  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++)="" [color="rgb(0," 136,="" 0)]="" 输出字符串[="" i][="" color]
      Uart0Send(recv_buf);
   
    Uart0SendString("");
    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上显示出来。



作者: eegyl    时间: 2015-8-7 13:16
提示: 作者被禁止或删除 内容自动屏蔽
作者: liji59061463    时间: 2015-9-20 21:16

好东东,谢谢楼主
作者: liji59061463    时间: 2015-9-20 21:17

好东东,谢谢楼主
作者: kycup    时间: 2015-9-28 03:58
提示: 作者被禁止或删除 内容自动屏蔽
作者: tswtj    时间: 2015-10-29 03:51
提示: 作者被禁止或删除 内容自动屏蔽
作者: okz348    时间: 2015-11-14 15:30
回复一下吧











huadaigou_com
作者: tswtj    时间: 2015-11-17 16:55
提示: 作者被禁止或删除 内容自动屏蔽
作者: nsebn    时间: 2016-1-18 02:34
呵呵,加油!













作者: dpzkm    时间: 2016-3-22 02:35
鉴定完毕!谢谢楼主多发帖子好帖子是顶出来的,,大家顶起!!
作者: gdfcv    时间: 2016-4-19 15:41
真正可以破解成功的少妇聊天室 559912.com 复制地址! 祝各位兄弟玩得愉快。
我在的狼群都是一些资深的狼友,狼友们看了那位狼友的消息,看着大家的讨论,怎么获取免费聊天室账号,现在很寂寞,由于本人前段时间刚跟女友分手,晚上寂寞无比,不如去试试看。

这一试不要紧,试过后我现在还在回味,聊.天.室里的mm太开放了,黑丝少妇,萌妹子,御姐 ,年轻白领,我刚进去就被诱惑住了,呵呵! [随机标点]

我进去选定了一个美女主播就与他进行了视频,具体过程我就不说了.

真想体验那种刺激的话还是狼友自己去验证,你完全可以抱着一种试试的心理去体验。 [随机字符]

我就说到这里,好东西大家分享,!


作者: zmlxh168    时间: 2016-4-21 12:35
帖子非常好

作者: ohtwu    时间: 2016-7-9 10:08
支持一下!!呵呵
作者: knd1bv    时间: 2016-9-21 10:45
顶一下吧~ 很少见的好帖了
作者: 所有爱情都成    时间: 2016-10-13 21:29
这么强,支持楼主,佩服













作者: 毫克里364    时间: 2016-11-2 17:45
谢谢你哦,你是最棒的













作者: ry粉丝来啦    时间: 2016-11-6 01:06
LZ辛苦了,支持一下!













作者: xke瓯江帆影    时间: 2016-11-7 23:16
真是好东西,顶啊!

















欢迎光临 智能创客,中国最大的极客空间,智能平台,免费教学,视频教程,手把手教你创造儿时梦想! (http://luntan.znck007.com/) Powered by Discuz! X3.2