CC2530模塊進行ZigBee實驗小結

1.寫在前面

今天是做了一天的實驗的,真的是做了一天,從早上8點到12點,再從下午2點半整到了晚上8點,這其間進行了不厭其煩的調試與安裝,可謂是困難重重,因爲資料給的開發軟件和光盤上的開發軟件不同,所以不得不將IAR裝了卸裝了卸;還有連線方面上,由於是獨立完成實驗,而且資料上講的的也晦澀難懂,所以一直有接線錯誤的問題;最令人頭疼的是明明將線接好了,卻在燒錄軟件上找不到反應,最後又不知道怎麼弄得,突然又好了,真是很玄學誒,總之今天這一天從毫無頭緒,到不斷髮現希望,不斷努力,不斷失望中,我們最終還是得到了我們想要的結果,結果還是美好的。
我們遇到什麼困難,也不要怕,微笑着面對它,消除恐懼的最好辦法就是面對恐懼,堅持纔是勝利,加油!奧利給!

2.必備軟件及硬件

UP-CUP CC2530 模塊是面向國內高校計算機、電子、通訊和物聯網相關學科,對 ZigBee(CC2530)模塊和傳感器模塊兩部分硬件相關操作及實驗進行指導和描述.
在這裏插入圖片描述

1.硬件

PC 機、移動互聯網綜合實驗平臺 、 12V 電源適配器、串口線(通信用)、USB 方口線(燒程序用)。
串口線連接平臺左側的第三個串口 Com2
USB 方口線連接平臺左側的 USB 方口 CC-Debug
注意幹什麼操作要連什麼線,還要安裝好驅動。

2. 軟件

1.IAR開發軟件
這個真是一個大坑了,光盤內的IAR是For ARM的,但是手冊上寫的要使用的IAR是8051的,具體要用哪個我也不太清楚了,但是使用ARM的發現程序無法編譯,但是使用8051的程序就可以正常編譯了。
要注意安裝的時候,Product一定要選擇對,我第一次就沒有選擇對,所以重安裝了。

在軟件內編譯前需要注意的地方是:
Config 標籤: 點擊 Linker command file 欄文本框右邊的 按鈕。選擇正確的連接命令文件 lnk51ew_cc2530.xcl,如圖:
在這裏插入圖片描述
Linker 選項,Output 標籤:選中 Overridedefault 可以在下面的文本框中更改輸出文件名。 如果要用 C-SPY 進行調試,選中 format 下面的 Debug information for C-SPY,否則按下面選擇。

在這裏插入圖片描述

注意:

如果沒有設置這一步:
在這裏插入圖片描述
燒錄程序時會出現以下情況:
在這裏插入圖片描述

Debugger: 在 Setup 標籤按下圖設置 driver 選項爲 Texas Instruments:

在這裏插入圖片描述
在這裏插入圖片描述
Stack/Heap 標籤:改變 XDATA 棧大小到 0x1FF
在這裏插入圖片描述
(這項我們沒有選擇,還是可以正常編譯並燒錄,不知道爲什麼)在 Device Description file 選擇 CC2530.ddf 文件,其位置在程序安裝文件夾下如
C:\Program Files\IAR Systems\Embedded Workbench 5.3 Evaluation version\8051\config\devices\Texas Instruments
在這裏插入圖片描述

設置完成後可以建立工程寫入代碼,也可以打開已有的工程,編譯並生成hex文件
在這裏插入圖片描述

2.燒錄程序 SmartRF Flash Programmer
在這裏插入圖片描述
這個程序我們是從官網上下載的,因爲光盤內自帶的軟件安裝後使用方面有些問題。
在這裏插入圖片描述
注意:打開設備管理器,檢查後發現是SmartRF04EB驅動沒有安裝
在這裏插入圖片描述
如果沒有該驅動文件夾可以下載這個
百度網盤鏈接:https://pan.baidu.com/s/1mCYMY1UN7dcrWKAeFUgL0A 提取碼: hzr7 複製這段內容後打開百度網盤手機App,操作更方便哦
提取碼:hzr7

①連好線後(USB方口線)通過平臺上的 Select_ColSelect_Row 按鍵選中 ZigBee 主模塊
②打開 SmartRF Flash Programmer 軟件
如果未檢測到芯片型號,可以重新拔插一下 USB 方口線
注意:必須顯示芯片型號才能正確燒錄,否則無法進行下一步
③點擊 Flash 一行最後面的按鈕[…],選着要燒寫的 Hex 文件 E:\出廠演示程序燒寫目錄[模 塊]\zigbee\img\UP2530M.hex,如下
在這裏插入圖片描述
④在 Location 組裏選擇 Primary 單選按鈕,然後點擊[Read IEEE]按鈕
⑤在 Location 組裏選擇 Secondary 單選按鈕,然後點擊[Write IEEE]按鈕
⑥選中 Retain IEEE address when repogramming 組選框,然後點擊[Perform actions]按鈕燒寫程序,燒寫完後,界面如下:
在這裏插入圖片描述

相關軟件方面都在光盤上有
在這裏插入圖片描述
在這裏插入圖片描述
3.串口顯示軟件
光盤內自帶
在這裏插入圖片描述
注意使用串口通信時要將對應的串口com2連上。
相關設置在工具內。
在這裏插入圖片描述
注意:燒錄程序到哪一個模塊時,要將片選按鍵選中當前模塊,並處於上電狀態。

3.模塊實驗

1.紅外對射傳感器實驗
閱讀 UP-MobNet-II型系統 ZIGBEE 模塊硬件部分文檔,熟悉 ZIGBEE 模塊硬件接口。
學習紅外對射傳感器檢測原理和使用方法 使用 IAR 開發環境設計程序,利用 CC2530 的IO中斷來監測紅外對射傳感器的狀態。
在這裏插入圖片描述
源文件
main.c文件

#include <ioCC2530.h>
#include "./uart/hal_uart.h"

#define uint unsigned int
#define uchar unsigned char

//定義控制燈的端口
#define LED1 P1_0
#define LED2 P1_1


/****************************/

void Delay(uint n)
{
    uint i,t;
    for(i = 0;i<5;i++)
    for(t = 0;t<n;t++);
}

void LedInit(void)
{
    P1DIR |= 0x03; //設置LED
    LED1 = 1;
    LED2 = 1;
}

/*****************************************
//IO P1_2中斷模式初始化
*****************************************/
void InitIrda(void)
{
    // P0_0 interrupt io initialized.
    P0DIR &= ~(0x01<<0);//P0_0 input mode
    P0INP &= ~(0x01<<0);//P0_0 Pull up
    P0IEN |=(0x01<<0);//P0_0 int enable
    PICTL &= ~(0x01<<0);//P0 rasing edge
    //PICTL |= (0x01<<0); //falling edge

    IEN0 |=0x80;   //全局允許中斷
    IEN1 |=(0x01<<5);   //P1端口中斷允許

    P0IFG &=~(0x01<<0); // P0_0中斷標誌清0
}

/****************************************************************
*函數功能 :主函數								
*入口參數 :無							
*返 回 值 :無						
*說    明 :無							
****************************************************************/
void main(void)
{
    LedInit();
    InitUart();
    InitIrda();
    prints("http://www.up-tech.com\r\n");
    while(1)
    {
        LED2 = !LED2;
        Delay(50000);
        Delay(50000);
    }
}

/*********************************************************************
//中斷服務程序(P1_2端口)
*********************************************************************/
#pragma vector = P0INT_VECTOR
__interrupt void P0_ISR(void)
{
    prints("IRDS Warning!\r\n");
    if((P0IFG&0X01) == 0x01)         //中斷
    {
      P0IFG &= ~(0x01);
      LED1 = !LED1;
      Delay(1000);
    }
    P0IF = 0;          //清中斷標誌
}

hal_uart.h文件

#ifndef HAL_UART_H
#define HAL_UART_H

/* 宏定義 */
/********************************************************************/
#define ENTER      0x0D               // 按鍵定義
#define SPACE      0x20

#define CLKSPD  ( CLKCONCMD & 0x03 )  //系統時鐘速率

 /* 串行UART 配置 */
#define HIGH_STOP                   0x02
#define LOW_STOP                    0x00
#define HIGH_START                  0x01
#define TRANSFER_MSB_FIRST          0x80
#define TRANSFER_MSB_LAST           0x00
#define FLOW_CONTROL_ENABLE         0x40
#define UART_ENABLE_RECEIVE         0x40


#define IO_PER_LOC_USART0_AT_PORT0_PIN2345() \
          do { PERCFG = (PERCFG&~0x01)|0x00; } while (0)

 /* 串行UART_E設置 */
#define BAUD_E(baud, clkDivPow) (     \
    (baud==2400)   ?  6  +clkDivPow : \
    (baud==4800)   ?  7  +clkDivPow : \
    (baud==9600)   ?  8  +clkDivPow : \
    (baud==14400)  ?  8  +clkDivPow : \
    (baud==19200)  ?  9  +clkDivPow : \
    (baud==28800)  ?  9  +clkDivPow : \
    (baud==38400)  ?  10 +clkDivPow : \
    (baud==57600)  ?  10 +clkDivPow : \
    (baud==76800)  ?  11 +clkDivPow : \
    (baud==115200) ?  11 +clkDivPow : \
    (baud==153600) ?  12 +clkDivPow : \
    (baud==230400) ?  12 +clkDivPow : \
    (baud==307200) ?  13 +clkDivPow : \
    0  )

 /* 串行UART_M設置 */
#define BAUD_M(baud) (      \
    (baud==2400)   ?  59  : \
    (baud==4800)   ?  59  : \
    (baud==9600)   ?  59  : \
    (baud==14400)  ?  216 : \
    (baud==19200)  ?  59  : \
    (baud==28800)  ?  216 : \
    (baud==38400)  ?  59  : \
    (baud==57600)  ?  216 : \
    (baud==76800)  ?  59  : \
    (baud==115200) ?  216 : \
    (baud==153600) ?  59  : \
    (baud==230400) ?  216 : \
    (baud==307200) ?  59  : \
  0)

 /* 串行UART設置 */
#define UART_SETUP(uart, baudRate, options)      \
   do {                                          \
      if ((options) & FLOW_CONTROL_ENABLE){      \
         if((uart) == 0){      /* USART0       */\
            if(PERCFG & 0x01){ /* Alt 2        */\
               P1SEL |= 0x3C;                    \
            } else {           /* Alt 1        */\
               P0SEL |= 0x3C;                    \
            }                                    \
         }                                       \
         else {                /* USART1       */\
            if(PERCFG & 0x02){ /* Alt 2        */\
               P1SEL |= 0xF0;                    \
            } else {           /* Alt 1        */\
               P0SEL |= 0x3C;                    \
            }                                    \
         }                                       \
      }                                          \
      else{                    /* 流控不時能 */  \
         if((uart) == 0){      /* USART0       */\
            if(PERCFG & 0x01){ /* Alt 2        */\
               P1SEL |= 0x30;                    \
            } else {           /* Alt 1        */\
               P0SEL |= 0x0C;                    \
            }                                    \
         }                                       \
         else {                /* USART1       */\
            if(PERCFG & 0x02){ /* Alt 2        */\
               P1SEL |= 0xC0;                    \
            } else {           /* Alt 1        */\
               P0SEL |= 0x30;                    \
            }                                    \
         }                                       \
      }                                          \
                                                 \
      U##uart##GCR = BAUD_E((baudRate), CLKSPD); \
      U##uart##BAUD = BAUD_M(baudRate);          \
                                                 \
      U##uart##CSR |= 0x80;                      \
                                                 \
      U##uart##UCR |= ((options) | 0x80);        \
                                                 \
      if((options) & TRANSFER_MSB_FIRST){        \
         U##uart##GCR |= 0x20;                   \
      }                                          \
   } while(0)
/********************************************************************/

/**********************EXTERN FUNCTION******************************/
extern void InitUart(void);          //串口初始化
extern void prints(char *s);         //打印字符串
/*******************************************************************/

#endif

實驗結果:
使用 PC 機連接串口,將串口調試助手設置爲串口波特率 57600、8 位、無奇偶校驗、無硬 件流模式,當用厚卡片隔斷紅外對射管觸發傳感器異常時,可在終端收到字符串“IRDS warning!”, 且 ZigBee 模塊上的 LED 狀態改變一次。重新上電會顯示 http://www.up-tech.com
備註:卡片太薄可能無法觸發傳感器中斷,可以通過傳感器上的 LED 指示燈判斷紅外對射管是否被隔 斷,如果隔斷,LED 熄滅。
在這裏插入圖片描述
2.溫溼度傳感器
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章