串口收发数据实验

一、实验目的

     利用CC2530的串口0不停的打印信息到电脑上,同时接收从串口发过来了的数据,把发送过来的数据直接送回给电脑。

二、实验环境

     1.硬件:通用节点或任意传感器节点一个、USB仿真器、USB电缆、PC机;
     2.软件:IAR Embedded Workbench for MCS-51、串口调试工具。

三、实验内容
     1、了解有关实验内容及知识点:
           使用协议:RS232 RS480
                             RS232通信协议:
                                                        R:接收-默认高电平(起始位-八位数据-接受位)。
                                                              1:发送速率:波特率(115200bp)
                                                              2:奇偶校验(电平转换芯片:低的放更低,高的更高)
                                                        T:发送
           微接口:HPML、USB、TYPE-C、雷电3接口-3G速度、可扩展10接口等。
           异步接收发送器:RX引脚
                                        TX引脚
          芯片时钟配置:32HZ XOSC(外部时钟)16HZ RXOSC(内部时钟)
          TIMER TICKS:低拉闹钟(频率:250KHZ-过1s)
          U0BUF寄存器:8位
     2、使用IAR 开发环境设计程序,利用CC2530 的串口0 进行数据收发通讯。
        (1)硬件设计
             在CC2530中,此次我们使用USART0,并且工作在UART标准串口模式下。

串口收发数据实验_第1张图片

                                                          此图为部分外设复用IO对应图;

            接下来我们了解了有关CC2530相关寄存器:

                                                           P0寄存器(IO数据寄存器);

                                                           POSEL寄存器(外设功能选择寄存器);

串口收发数据实验_第2张图片

                                                           PODIR寄存器(IO输入输出选择寄存器);

             接下来我们了解了芯片的时钟操作及配置:

串口收发数据实验_第3张图片

                                                                 此图为CLKCONCMD 寄存器;

串口收发数据实验_第4张图片

                                                                此图为CLKCONSTA 寄存器;

串口收发数据实验_第5张图片


             此图为CH340芯片完成了USB转串口。(通过USB电缆连接节点和计算机后,CH340芯片会在计算机中虚拟一个串口,这个串口信号对于图中的CH340_TXD和CH340_RXD,通过J2上的跳线帽与CC2530的P0.2和P0.3引脚相连。)

             (2)软件设计(串口函数)

                      

#define uint unsigned int
#define uchar unsigned char

//定义控制灯的端口
#define led1 P1_0
#define led2 P1_1

void InitIO(void);                          //IO初始化
void InitUart(void);                        //串口初始化
void SendString(char*string,uint legth);    //发送字符串

uchar temp;               // 存放接受的数据

char wch[] = "2#155 hello!\n";
/*****************************************************************************
  功能描述: 延时
  Count:    延时单位数量
*****************************************************************************/
void DelayXms(unsigned int Count)
{
 unsigned int i;
 unsigned int j;
 for(i = 0; i < Count; i++)
 {
    for( j=10000; j>0; j--);
 }
}
/*****************************************************************************
  功能描述: IO初始化
*****************************************************************************/
void InitIO(void)
{
    SLEEPCMD &= ~0X04;
    CLKCONCMD = 0X10;           //32k和32M时钟使用外部晶体,timer分频8M
    while(CLKCONSTA!=0X10);     //等待时钟切换
    SLEEPCMD = 0X04; 
   
    P2DIR = 0x00;              //高两位零   若设则最高优先USART0
    P1DIR|= 0X03;              //P1.0 P1.1 LEDs 灯端口配置
    P0DIR|= 0X00;              //input
   
    PERCFG = 0x00;              //UART0 默认端口
    P1SEL = 0X00;
    P0SEL = 0X0c;               //P0<3:2>设置成外围应用

}
/*****************************************************************************
  功能描述: 串口初始化
*****************************************************************************/
void InitUart(void)
{
    U0CSR |= 0x80;    //UART方式
    U0GCR = 11;            //baud_e 波特率设为115200
    U0BAUD |= 216;    //baud_m = BaudRate*2^(28-buad_e)/32M-256
                                                //BaudRate=(256+baud_m)/2^(28-buad_e)x32MHz
    UTX0IF = 1;                                 //接收中断标记
    U0CSR |= 0X40;    //允许接收
    URX0IE = 1;                                 //接收中断使能
    EA =1;                                      //总中断开关打开
}
/*****************************************************************************
  功能描述: 串口发送字符串
  string:   字符串指针
  lenth:   长度
*****************************************************************************/
void SendString(char*string,uint lenth)
{
    uint j;
    for (j=0; j     {
      U0DBUF = *string++;         //将要发送字符送入U0DBUF发送寄存器
      while(UTX0IF == 0);         //等待发送完成
      UTX0IF = 0;                 //清0标志位
    }
}
/*****************************************************************************
  功能描述:    主函数
*****************************************************************************/
 void main(void)
 {
    InitIO();
    InitUart();
    DelayXms(10);
  
    led1=1;                         //点亮2个LED灯
    led2=1;
    SendString(wch,sizeof(wch));
   
    while(1)
    {
      ; //进入无限循环等待中断函数被处触发
    }
 }
/*****************************************************************************
  功能描述: 串口中断函数
*****************************************************************************/
#pragma vector = URX0_VECTOR
__interrupt void UART0_ISR(void)
{
  URX0IF = 0;           //清中断标志
 temp = U0DBUF;
        U0DBUF = temp;                         //将收到的字符发送回去
        while(UTX0IF == 0);                    //等待发送
        UTX0IF = 0;                            //清发送标志
        led1 = ~led1;                          //指示中断活动
        led2 = ~led2;
}

四、实验结果

串口收发数据实验_第6张图片

 

你可能感兴趣的:((惠星宇,彭晓朦,刘祎然,魏晨))