CC2530使用串口通信把发过来的数据发送回去

CC2530使用串口通信把发过来的数据发送回去

首先我们先来 了解一下CC2530的串口通信
数据通信时,根据CPU与外设之间的连线结构和数据传送方式的不同,可以将通信方式分为两种:并行通信和串行通信。

串行通信又分同步和异步两种方式。就是我们了解的 UART模式和SPI模式, 其中UART模式称为异步通信,SPI模式称为同步通信。

每一帧数据由起始位(低电平)、数据位、奇偶校验位(可选)、停止位(高电平)组成。帧的格式如下图:请添加图片描述
这里需要注意的是:
UART模式,每次中断就发送一个字符,所以我们应该定义一个结束的特殊字符来结束我们接收状态,当我们URX0IF 写0时就会清空接收U0DBUF的数据。
发送的时候我们可以判断字符串的结束符‘\0’,这个也是 一个一个发送的 ,UTX0IF = 0时也会清空发送U0DBUF的数据

UART模式提供全双工传送,接收器中的位同步不影响发送功能。传送一个UART字节包含1个起始位、8个数据位、1个作为可选项的第9位数据或者奇偶校验位再加上1个或2个停止位。实际发送的帧包含8位或者9位,但是数据传送只涉及一个字节。

下面为代码

#include <ioCC2530.h>
#include <string.h>
#define LED1 P1_1
typedef unsigned char uchr;
typedef unsigned int uint;

//需要发送的字符串
uchr Tx_send[30],Sand_flag = 0;
uchr return_success_tip[10] = "success";
uchr return_fail_tip[10] = "fail";
uint string_length = 0;

void display(uint ms){
  for(uint i=0;i<ms;i++)
    for(uint j=0;j<535;j++);
}

void init(){
  //led初始化
  P1SEL &= ~0x02;
  P1DIR |= 0x02;
  LED1 = 1;
  
  //设置晶振
  CLKCONCMD &= ~0x47;
  while(CLKCONCMD & 0x40);
   
  //串口初始化 选用USART0   UART  进行通信
  PERCFG = 0x00;  //选择串口备用位置1 
  P0SEL |= 0x0c;   //选择P0_2,P0_3作为串口 ,设置为外设功能 
  P2DIR &= ~0xc0;   //设置优先级 USART 0 > USART 1   > 定时器1
  
  U0GCR |= 8;
  U0BAUD |= 59;
  
  U0UCR |= 0x80;     //清空USART0单元
  UTX0IF = 0;        //清空USART0写标志
  URX0IF = 0;        //清空USART0读标志
  
  
  IEN0 |= 0x84;      //开启总中断与RX中断使能
  U0CSR |= 0xc0;     //设置USART0为UART模式、开启UART接收器使能
   
}
/********************************************
    发送数组字符
********************************************/
void TXS(char *Data){
  LED1 = 0;
  while(*Data != '\0')
  {
    U0DBUF = *Data++;
    while(UTX0IF == 0);
    UTX0IF = 0;
  }
}
void main(){
  init();
  while(1){
    //当接收到数据后发送回去
    if(Sand_flag == 1){
      TXS(Tx_send);
      LED1 = 1;
      // strcpy(Tx_send,"");
      Sand_flag = 0;
    }
  }
}
#pragma vector = URX0_VECTOR
__interrupt void UART0_ISR(){
  URX0IF = 0;
  uchr temp = U0DBUF;
  if(temp != '#'){
    Tx_send[string_length++] = temp;
  }else{
    //改变状态转为发送
    Sand_flag = 1;
    string_length = 0;
  }
}
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值