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_Col 和 Select_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.溫溼度傳感器