OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4696|回复: 2

CC2530关机后一直发数据?

[复制链接]

20

主题

42

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
374
金钱
374
注册时间
2018-1-22
在线时间
46 小时
发表于 2018-3-18 19:06:12 | 显示全部楼层 |阅读模式
1金钱
最近在搞CC2530串口接收但不知道怎么回事....关机后串口助手居然一直收到数据
开机后,串口助手才没接收到数据,然后我发什么,它返回什么

我就不理解为什么CC2530关机了,串口助手一直有数据接收到?

[mw_shl_code=c,true]#include <iocc2530.h>
#include <string.h>
#define uint unsigned int
#define uchar unsigned char

//定义控制灯的端口
#define LED1 P1_0
#define LED2 P1_1
#define LED3 P0_4

void initUART0(void);
void InitialAD(void);
void UartTX_Send_String(uchar *Data,int len);

uchar Recdata[30]="hello zigbee!\r\n";
uchar RXTXflag = 1;
uchar temp;
uint  datanumber = 0;
uint  stringlen;

/****************************************************************
串口发送字符串函数                               
****************************************************************/
void UartTX_Send_String(uchar *Data,int len)
{
  int j;
  for(j=0;j<len;j++)
  {
    U0DBUF = *Data++;
    while(UTX0IF == 0);
    UTX0IF = 0;
  }
}

/****************************************************************
初始化串口0函数                                       
****************************************************************/
void initUART0(void)
{
    CLKCONCMD &= ~0x40;                         //设置系统时钟源为32MHZ晶振
    while(CLKCONSTA & 0x40);                    //等待晶振稳定
    CLKCONCMD &= ~0x47;                         //设置系统主时钟频率为32MHZ
   
    PERCFG = 0x00;                                //位置1 P0口
    P0SEL = 0x0c;                                //P0用作串口
    P2DIR &= ~0XC0;                             //P0优先作为UART0   
   
    U0CSR |= 0x80;                                //串口设置为UART方式
    U0GCR |= 11;                               
    U0BAUD |= 216;                                //波特率设为115200
    UTX0IF = 1;                                 //UART0 TX中断标志初始置位1
   
    U0CSR |= 0X40;                                //允许接收
    IEN0 |= 0x84;                                //开总中断,接收中断
}

/****************************************************************
主函数                                                       
****************************************************************/
void main(void)
{       
        P1DIR = 0x03;                                 //P1控制LED
        LED1 = 1;
        LED2 = 1;                                //关LED
        LED3 = 1;
        initUART0();
        stringlen = strlen((char *)Recdata);
        UartTX_Send_String(Recdata,stringlen);                   
        while(1)
        {
          if(RXTXflag == 1)                             //接收状态
          {
            
            if( temp != 0)
            {
                LED2 = 0;                                     //接收状态指示
                if((temp!='#')&&(datanumber<50))     //’#‘被定义为结束字符,最多能接收50个字符
                {         
                  Recdata[datanumber++] = temp;
                }
                else
                {
                  RXTXflag = 3;                      //进入发送状态
                }
               
                if(datanumber == 50)
                  RXTXflag = 3;
               
              temp  = 0;       
            }
          }
          if(RXTXflag == 3)                        //发送状态
          {
            UartTX_Send_String("send:",5);
            
            LED1 = 0;                                //发送状态指示
            
            U0CSR &= ~0x40;                        //不能收数
            UartTX_Send_String(Recdata,datanumber);
            UartTX_Send_String("\r\n",2);
            U0CSR |= 0x40;                        //允许接收
            
            RXTXflag = 1;                        //恢复到接收状态
            datanumber = 0;                        //指针归0
            LED1 = 1;                                //关发送指示
            LED2 = 1;       
            memset(Recdata, 0, sizeof(Recdata));
          }
        }
}
/****************************************************************
串口接收一个字符:一旦有数据从串口传至CC2530,则进入中断,将接收到的数据赋值给变量temp.
****************************************************************/
#pragma vector = URX0_VECTOR
__interrupt void UART0_ISR(void)
{
        URX0IF = 0;                                //清中断标志
        temp = U0DBUF;   
        //U0DBUF=temp;
        datanumber = strlen(temp);
}
[/mw_shl_code]
360截图20180318190447615.jpg
360截图20180318190506129.jpg

最佳答案

查看完整内容[请看2#楼]

软件没有问题,主要是看硬件,测量单片机供电电压,看看单片机是否工作,应该不是单片机发的,是一些乱码!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
184
金钱
184
注册时间
2016-12-22
在线时间
52 小时
发表于 2018-3-18 19:06:13 | 显示全部楼层
软件没有问题,主要是看硬件,测量单片机供电电压,看看单片机是否工作,应该不是单片机发的,是一些乱码!
回复

使用道具 举报

21

主题

2205

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5136
金钱
5136
注册时间
2014-8-26
在线时间
1316 小时
发表于 2018-3-19 18:26:16 | 显示全部楼层
帮顶。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-1 11:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表