《电子技术应用》
您所在的位置:首页 > 模拟设计 > 设计应用 > 如何实现PC机与CC2430之间的串口通信
如何实现PC机与CC2430之间的串口通信
摘要: 在无线传感网络中,CC2430需要将采集到的数据发送给上位机(即PC)处理,同时上位机需要向CC2430发送控制信息。这一切都离不开两者之间的信息传递。这一节,我们就来学习如何实现PC机与CC2430之间的串口通信。
Abstract:
Key words :

  一、承上启下

  在无线传感网络中,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 = 216;

   U0BAUD = 11;                     //设置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

      Uart0Send(recv_buf[i]);

  

    Uart0SendString("\n");

    recv_count =0;                     //重置

  }

}

此内容为AET网站原创,未经授权禁止转载。