用户
 找回密码
 立即注册

扫一扫,访问微社区

查看: 5252|回复: 4

[求助] zigbee基础实验UART0改为UART1收发数据

[复制链接]

4

主题

7

帖子

26

积分

新手上路

Rank: 1

积分
26
发表于 2017-6-7 14:39:54 | 显示全部楼层 |阅读模式
硬件交流
硬件厂商: 其他
硬件类别: 串口 
基础实验中以UART0收发演示了串口对应配置和UART0中断回调函数的结合,这里我需要用UART1的通道1,即端口p-4,p-5去做这个串口收发,对应的端口配置感觉没有问题,因为可以给程序里面放数据的temp附初值可以实现打印输出,想来问题应该出在UART1的中断回调函数的书写上面了,程序进不了中断。开发环境是IAR8.2版本的,下面是我的程序。

/**************************************/
/*           WeBee团队                 */
/*         Zigbee学习例程              */
/*例程名称:串口通讯2                   */
/*建立时间:2012/06/5                  */
/*描述:例以abc#方式发送,#为结束符,
        返回abc。波特率:115200bps
**************************************/

#include <ioCC2530.h>
#include <string.h>

#define uint unsigned int
#define uchar unsigned char

//定义控制LED灯的端口
#define LED1 P1_0        //定义LED1为P10口控制
#define LED2 P1_1

//函数声明
void Delayms(uint xms);                //延时函数
void InitLed(void);                //初始化P1口
void InitUart();              //初始化串口
void Uart_Send_String(char *Data,int len);

char Rxdata[50];
uchar RXTXflag = 1;
char temp ;
uchar  datanumber = 0;

/****************************
          延时函数
*****************************/
void Delayms(uint xms)   //i=xms 即延时i毫秒 (16M晶振时候大约数,32M需要修改,系统不修改默认使用内部16M)
{
uint i,j;
for(i=xms;i>0;i--)
   for(j=587;j>0;j--);
}


/****************************
//初始化程序
*****************************/
void InitLed(void)
{
  P1DIR |= 0x03;   //P1_0、P1_1定义为输出
  LED1 = 0;       //LED灯熄灭
  LED2 = 0;   
}
/****************************************************************
   串口初始化函数     
***********************************************************/
void InitUart()
{
    CLKCONCMD &= ~0x40; // 设置系统时钟源为 32MHZ晶振
    while(CLKCONSTA & 0x40);                     // 等待晶振稳定
    CLKCONCMD &= ~0x47;                          // 设置系统主时钟频率为 32MHZ

    PERCFG = 0x00;        //USART1位置1 P0口
    P0SEL = 0x30;        //P0_2,P0_3,P0_4,P0_5用作串口,第二功能,p0_2,p0-3是可以用作串口的特殊IO口
   // P2DIR &= ~0X80;
    P2DIR &= ~0XC0;      //P0 优先作为UART0 ,优先级

    U1CSR |= 0x80;       //UART 方式
    U1GCR |= 11;         //U0GCR与U0BAUD配合     
    U1BAUD |= 216;       // 波特率设为115200

    UTX1IF = 0;          //UART0 TX 中断标志初始置位1  (收发时候)
    U1CSR |= 0x40;       //允许接收
    IEN0 |= 0x88;//IEN0 |= 0x84;        // 开总中断,接收中断   
}

/****************************************************************
串口发送字符串函数   
****************************************************************/
void Uart_Send_String(char *Data,int len)
{
{
  int j;
  for(j=0;j<len;j++)
  {
    U1DBUF = *Data++; //USART 0 接收/发送数据缓存,发送,对应的是不是要整个写入的
    while(UTX1IF == 0); //发送完成标志位
    UTX1IF = 0;
  }
}
}
/***************************
//主函数
***************************/
void main(void)
{
  InitLed();                //调用初始化函数
  InitUart();
  while(1)
  {
     if(RXTXflag == 1)     //接收状态
     {
        LED1=1;       //接收状态指示,长亮
        if( temp != 0)
        {
          if((temp!='#')&&(datanumber<50)) //'#'被定义为结束字符,最多能接收50个字符           

             Rxdata[datanumber++] = temp;   
           else
           {
             RXTXflag = 3;                     //进入发送状态
             LED1=0; //关指示灯
            }
            temp  = 0;
         }
      }
      if(RXTXflag == 3)     //发送状态
      {
       LED2= 1;//是闪烁状态的                           
       U1CSR &= ~0x40;      //禁止接收
       Uart_Send_String(Rxdata,datanumber); //zigbee板子发送已记录的字符串。
       U1CSR |= 0x40;      //允许接收
       RXTXflag = 1;       // 恢复到接收状态
       datanumber = 0;     //指针归0
       LED2 = 0;           //关发送指示
      }   
    }
}

#pragma vector = URX0_VECTOR //这里是USART0 RX完成,即写到zigbee板子上完成
  __interrupt void UART0_ISR(void) //对应的UTX0是USART0 TX完成,即zigbee板子发送完成
{
  URX1IF = 0;    // 清中断标志,写入的中断标志位清0
  temp = U1DBUF; //USART 0 接收/发送数据缓存存入temp中,这里是USART0接受的数据                          
}

欢迎光临新一社区【newbitstudio.com】, 这里专注低功耗无线物联网技术的推广和分享,打造中文物联网开发社区,主要面对ZigBee, BLE, Thread, DOTDOT等协议,目前涉及到的芯片平台有CC2530,CC2540,nRF51822,nRF52832,ERF32MG,NXP5169。感谢大家在这里提问或者回答,助力成长,共同进步,写职业新篇章!
回复

使用道具 举报

4

主题

7

帖子

26

积分

新手上路

Rank: 1

积分
26
 楼主| 发表于 2017-6-7 14:50:13 | 显示全部楼层
那个我试验过了,并不行,我还查资料看到,有这样一个说法:
串口0/串口1 发送中断向量
UTX0_VECTOR
UTX1_VECTOR

串口0/串口1 接收中断向量
URX0_VECTOR

我才像程序里面那样写的中断向量
欢迎光临新一社区【newbitstudio.com】, 这里专注低功耗无线物联网技术的推广和分享,打造中文物联网开发社区,主要面对ZigBee, BLE, Thread, DOTDOT等协议,目前涉及到的芯片平台有CC2530,CC2540,nRF51822,nRF52832,ERF32MG,NXP5169。感谢大家在这里提问或者回答,助力成长,共同进步,写职业新篇章!
回复 支持 0 反对 1

使用道具 举报

4

主题

7

帖子

26

积分

新手上路

Rank: 1

积分
26
 楼主| 发表于 2017-6-7 16:06:32 | 显示全部楼层
690518661 发表于 2017-6-7 14:50
那个我试验过了,并不行,我还查资料看到,有这样一个说法:
串口0/串口1 发送中断向量
UTX0_VECTOR

这里查询的资料是错的,在cc2530里面 有对应的中断向量
#define  URX0_VECTOR    VECT(  2, 0x13 )   /*  USART0 RX Complete                          */
#define  URX1_VECTOR    VECT(  3, 0x1B )   /*  USART1 RX Complete                          */
欢迎光临新一社区【newbitstudio.com】, 这里专注低功耗无线物联网技术的推广和分享,打造中文物联网开发社区,主要面对ZigBee, BLE, Thread, DOTDOT等协议,目前涉及到的芯片平台有CC2530,CC2540,nRF51822,nRF52832,ERF32MG,NXP5169。感谢大家在这里提问或者回答,助力成长,共同进步,写职业新篇章!
回复 支持 1 反对 0

使用道具 举报

169

主题

375

帖子

2420

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2420
发表于 2017-6-7 14:44:48 | 显示全部楼层
#pragma vector = URX0_VECTOR //这里是USART0 RX完成,即写到zigbee板子上完成
  __interrupt void UART0_ISR(void) //对应的UTX0是USART0 TX完成,即zigbee板子发送完成

这里使用  URX1_VECTOR   ,如果还不成,查一下中断配置。
欢迎光临新一社区【newbitstudio.com】, 这里专注低功耗无线物联网技术的推广和分享,打造中文物联网开发社区,主要面对ZigBee, BLE, Thread, DOTDOT等协议,目前涉及到的芯片平台有CC2530,CC2540,nRF51822,nRF52832,ERF32MG,NXP5169。感谢大家在这里提问或者回答,助力成长,共同进步,写职业新篇章!
回复 支持 反对

使用道具 举报

0

主题

28

帖子

90

积分

注册会员

Rank: 2

积分
90
发表于 2021-9-6 17:00:52 | 显示全部楼层
智能家居WiFi、Zigbee和蓝牙有什么区别
随着科技的进步,智能家居已经慢慢步入普通居民的家庭生活中,这也必将是未来生活方式的发展趋势。在当下的智能家居设备市场上可谓是丰富多彩,各种设备组网方式不尽相同,在成本、功耗、距离等特性上也各有千秋,当然组网方式的不同也直接影响控制技术方式的不同。目前大家广泛熟知的组网方式包括wifi、Zigbee和蓝牙等等,它们有什么区别呢?一起来看看吧!


智能家居WiFi、Zigbee和蓝牙有什么区别

1、WiFi组网

WiFi技术是目前传输速度最快的的无线天津快乐十分技术,在目前的生活中普及率较高,所以目前基于WiFi技术非常适合智能家居领域。缺点是安全性差,稳定性弱,功耗大,可连接的设备有限,也就是说wifi局限性很大,限制了发展。

2、ZigBee组网

关于ZigBee这项技术目前争议比较大。先介绍下Zigbee技术概述,ZigBee是一种近距离、低复杂度、低功耗、低成本的极速赛车双向无线通信技术。但从市面上的普及率来讲,ZigBee远不及蓝牙和wifi,因为ZigBee协议的繁琐及传输速率的低下,所以一直没有普及开来,但其自组网的特点让它在市场上占有一席之地。

于智能家居系统而言,网络通讯数据量小、在传输速度上要求也不高,但是家居数量一般较大其具有可变更性,对此需要选择合适的通讯协议进行通信。ZigBee技术是一种新型的短距离、低功耗的无线通信技术,非常适合智能家居系统的需求。

3、蓝牙组网

蓝牙(Bluetooth)是一种支持设备短距离通讯的无线电技术。蓝牙系统网络以蓝牙模块为节点,技术技巧无须建立基站就可以进行无线连接,新版本蓝牙5.0的传输速度为2Mbps,是之前4.2LE版本的两倍;另外一个重要改进是,它的有效距离是上一版本的4倍,同时,蓝牙5.0还支持室内定位导航功能,可以作为室内导航信标或类似定位设备使用。可以说蓝牙5.0针对物联网进行了很多底层优化,力求以更低的功耗和更高的性能为智能家居服务。

众所周知,WiFi的特点就是范围广168开奖网、速度快,但耗电量大;至于ZigBee,相信很多人是第一次接触这个名字,它的优点是低功耗,弱点是速度慢、难兼容,还有最致命的一点是其搭载的设备普及率极低;而蓝牙(Bluetooth)技术则致力于在特定空间内使所有支持该技术的设备建立联系传输数据,其极低功耗、低成本、稳定安全、开放的接口等特点十分符合物联网的技术要求。




欢迎光临新一社区【newbitstudio.com】, 这里专注低功耗无线物联网技术的推广和分享,打造中文物联网开发社区,主要面对ZigBee, BLE, Thread, DOTDOT等协议,目前涉及到的芯片平台有CC2530,CC2540,nRF51822,nRF52832,ERF32MG,NXP5169。感谢大家在这里提问或者回答,助力成长,共同进步,写职业新篇章!
回复 支持 反对

使用道具 举报

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

本版积分规则