TI CC2530组网演练BasicRF无线控制灯的亮灭.docx

上传人:b****8 文档编号:30298734 上传时间:2023-08-13 格式:DOCX 页数:34 大小:450.94KB
下载 相关 举报
TI CC2530组网演练BasicRF无线控制灯的亮灭.docx_第1页
第1页 / 共34页
TI CC2530组网演练BasicRF无线控制灯的亮灭.docx_第2页
第2页 / 共34页
TI CC2530组网演练BasicRF无线控制灯的亮灭.docx_第3页
第3页 / 共34页
TI CC2530组网演练BasicRF无线控制灯的亮灭.docx_第4页
第4页 / 共34页
TI CC2530组网演练BasicRF无线控制灯的亮灭.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

TI CC2530组网演练BasicRF无线控制灯的亮灭.docx

《TI CC2530组网演练BasicRF无线控制灯的亮灭.docx》由会员分享,可在线阅读,更多相关《TI CC2530组网演练BasicRF无线控制灯的亮灭.docx(34页珍藏版)》请在冰豆网上搜索。

TI CC2530组网演练BasicRF无线控制灯的亮灭.docx

TICC2530组网演练BasicRF无线控制灯的亮灭

TICC2530组网演练(BasicRF——无线控制灯的亮灭)

本文将从两个方面着手,一方面分析TI官网下载的CC2530BasicRF源码中的无线发送,另一方面根据自己的板子来修改实现无线发送控制灯的亮灭。

一、CC2530BasicRF

BasicRF由TI公司提供,它包含了IEEE802.15.4标准的数据包的收发功能但并没有使用到协议栈,它仅仅是让两个节点进行简单的通信,也就是说BasicRF仅仅是包含着IEEE802.15.4标准的一小部分而已。

其主要特点有:

1、不会自动加入协议、也不会自动扫描其他节点、同时也没有组网指示灯(LED3)

2、没有协议栈里面所说的协调器、路由器或者终端的区分,节点的地位都是相等的

3、没有自动重发的功能

BasicRFlayer为双向无线通信提供了一个简单的协议,通过这个协议能够进行数据的发送和接收。

BasicRF还提供了安全所使用的CCM-64身份验证和数据加密,它的安全性在工程文件里定义SECURITY_CCM了。

在Project->Option->C/C++Compiler->Preprocess里面就选择,本次实验并不是什么高度机密,所有在SECURITY_CCM前面带X了。

BasicRF的工作过程:

启动、发射、接收

工程文件分析

宏:

MCU_IO_DIR_OUTPUT(port,pin);

[cpp] viewplaincopyprint?

1./*********************************************************************** 

2. * MCU_IO_DIR_OUTPUT(port, pin);将端口port对应的pin位设置为输出(高电平) 

3. * ##为连接符,如port=0,pin=1,即P0DIR |= BM

(1); 

4. **********************************************************************/  

5.#define MCU_IO_DIR_OUTPUT(port, pin)   MCU_IO_DIR_OUTPUT_PREP(port, pin)  

6.#define MCU_IO_DIR_OUTPUT_PREP(port, pin)   st( P##port##DIR |= BM(pin); )  

7.#define st(x)      do { x } while (__LINE__ == -1)  

8.#define BM(n)      (1 << (n))  

MCU_IO_DIR_INPUT(port,pin);

[cpp] viewplaincopyprint?

1./*********************************************************************** 

2. * MCU_IO_DIR_INPUT(port, pin);将端口port对应的pin位设置为输入(低电平) 

3. **********************************************************************/  

4.#define MCU_IO_DIR_INPUT(port, pin)   MCU_IO_DIR_INPUT_PREP(port, pin)  

5.#define MCU_IO_DIR_INPUT_PREP(port, pin)   st( P##port##DIR |= ~BM(pin); )  

6.#define st(x)      do { x } while (__LINE__ == -1)  

7.#define BM(n)      (1 << (n))  

MCU_IO_GET(port,pin);

[cpp] viewplaincopyprint?

1./*********************************************************************** 

2. * MCU_IO_GET(port, pin);获取端口port的对应位pin的电平值 

3. **********************************************************************/  

4.#define MCU_IO_GET(port, pin)   MCU_IO_GET_PREP(port, pin)  

5.#define MCU_IO_GET_PREP(port, pin)   (P##port## & BM(pin))  

6.#define BM(n)      (1 << (n))  

MCU_IO_TGL(port,pin);

[cpp] viewplaincopyprint?

1./*********************************************************************** 

2. * MCU_IO_TGL(port, pin);将端口port的对应位pin的电平值设置为相反电平 

3. **********************************************************************/  

4.#define MCU_IO_TGL(port, pin)   MCU_IO_TGL_PREP(port, pin)  

5.#define MCU_IO_TGL_PREP(port, pin)   st( P##port##_##pin## ^= 1; )  

6.#define st(x)      do { x } while (__LINE__ == -1)  

MCU_IO_SET_LOW(port,pin);

[cpp] viewplaincopyprint?

1./*********************************************************************** 

2. * MCU_IO_SET_LOW(port, pin);将端口port的对应位pin设置为低电平 

3. **********************************************************************/  

4.#define MCU_IO_SET_LOW(port, pin)      MCU_IO_SET_LOW_PREP(port, pin)  

5.#define MCU_IO_SET_LOW_PREP(port, pin)      st( P##port##_##pin## = 0; )  

6.#define st(x)      do { x } while (__LINE__ == -1)  

MCU_IO_SET_HIGH(port,pin);

[cpp] viewplaincopyprint?

1./*********************************************************************** 

2. * MCU_IO_SET_HIGH(port, pin);将端口port的对应位pin设置为高电平 

3. **********************************************************************/  

4.#define MCU_IO_SET_HIGH(port, pin)      MCU_IO_SET_HIGH_PREP(port, pin)  

5.#define MCU_IO_SET_HIGH_PREP(port, pin)      st( P##port##_##pin## = 1; )  

6.#define st(x)      do { x } while (__LINE__ == -1)  

MCU_IO_SET(port,pin,val);

[cpp] viewplaincopyprint?

1./*********************************************************************** 

2. * MCU_IO_SET(port, pin, val);将端口port的对应位pin的电平值设置为val 

3. **********************************************************************/  

4.#define MCU_IO_SET(port, pin, val)     MCU_IO_SET_PREP(port, pin, val)  

5.#define MCU_IO_SET_PREP(port, pin, val)     st( P##port##_##pin## = val; )  

6.#define st(x)      do { x } while (__LINE__ == -1)  

MCU_IO_OUTPUT(port,pin,val);

[cpp] viewplaincopyprint?

1./*********************************************************************** 

2. * MCU_IO_OUTPUT(port, pin, val);将端口port的对应位pin的电平值设置为val 

3. *                              并且将此IO设置为通用IO,以及设置为输出 

4. **********************************************************************/  

5.#define MCU_IO_OUTPUT(port, pin, val)  MCU_IO_OUTPUT_PREP(port, pin, val)  

6.#define MCU_IO_OUTPUT_PREP(port, pin, val)  st( P##port##SEL &= ~BM(pin); \  

7.                                                P##port##_##pin## = val; \  

8.                                                P##port##DIR |= BM(pin); )  

9.#define st(x)      do { x } while (__LINE__ == -1)  

MCU_IO_OUTPUT(port,pin,func);

[cpp] viewplaincopyprint?

1./*********************************************************************** 

2. * MCU_IO_INPUT(port, pin, func);将端口port的对应位pin的设置为通用IO 

3. * 并将此IO口设置为func输入模式:

上拉、下拉、默认模式(三态) 

4. * func指的是IO口的输入模式:

MCU_IO_PULLUP、MCU_IO_PULLDOWN、默认模式                              

5. **********************************************************************/  

6.#define MCU_IO_INPUT(port, pin, func)  MCU_IO_INPUT_PREP(port, pin, func)  

7.#define MCU_IO_INPUT_PREP(port, pin, func)  st( P##port##SEL &= ~BM(pin); \  

8.                                                P##port##DIR &= ~BM(pin); \  

9.                                                switch (func) { \  

10.                                                case MCU_IO_PULLUP:

 \  

11.                                                    P##port##INP &= ~BM(pin); \  

12.                                                    P2INP &= ~BM(port + 5); \  

13.                                                    break; \  

14.                                                case MCU_IO_PULLDOWN:

 \  

15.                                                    P##port##INP &= ~BM(pin); \  

16.                                                    P2INP |= BM(port + 5); \  

17.                                                    break; \  

18.                                                default:

 \  

19.                                                    P##port##INP |= BM(pin); \  

20.                                                    break; } )  

21.#define st(x)      do { x } while (__LINE__ == -1)  

MCU_IO_PERIPHERAL(port,pin);

[cpp] viewplaincopyprint?

1./*********************************************************************** 

2. * MCU_IO_PERIPHERAL(port, pin);将端口port的对应位pin的设置为外设功能                             

3. **********************************************************************/  

4.#define MCU_IO_PERIPHERAL(port, pin)   MCU_IO_PERIPHERAL_PREP(port, pin)  

5.#define MCU_IO_PERIPHERAL_PREP(port, pin)   st( P##port##SEL |= BM(pin); )  

6.#define BM(n)      (1 << (n))  

light_switch.c——main函数

[cpp] viewplaincopyprint?

1.void main(void)  

2.{  

3.    uint8 appMode = LIGHT;  

4.  

5.    // Config basicRF  

6.    basicRfConfig.panId = PAN_ID;         //网络地址,0x2007  

7.    basicRfConfig.channel = RF_CHANNEL;   //通道,25  // 2.4 GHz RF channel  

8.    basicRfConfig.ackRequest = TRUE;      //是否应当,  1  

9.#ifdef SECURITY_CCM  

10.    basicRfConfig.securityKey = key;  

11.#endif  

12.  

13.    // Initalise board peripherals  

14.    /* 

15.     * 一些GPIO口初始化,包括以下LEDs和Buttons初始化 

16.     * 将LEDs(P0_0、P1_1、P1_4、P0_1)设置为输出、Buttons(P0_1)设置为输入模式且为三态输入模式 

17.     */  

18.    halBoardInit();  

19.    /* 

20.     * 多方向按键初始化,不用管 

21.     */  

22.    halJoystickInit();  

23.  

24.    // Initalise hal_rf  硬件抽象层rf初始化  

25.    if(halRfInit()==FAILED) {  

26.      HAL_ASSERT(FALSE);  

27.    }  

28.  

29.    // Indicate that device is powered  将按键1设置为高电平,并将状态设置为1  

30.    /* 

31.    switch (id) 

32.    { 

33.    case 1:

 HAL_LED_SET_1(); break; 

34.    case 2:

 HAL_LED_SET_2(); break; 

35.    case 3:

 HAL_LED_SET_3(); break; 

36.    case 4:

 HAL_LED_SET_4(); led4State=1; break; 

37. 

38.    default:

 break; 

39.    } 

40.     

41.    #define HAL_LED_SET_1()                 MCU_IO_SET_HIGH(HAL_BOARD_IO_LED_1_PORT, HAL_BOARD_IO_LED_1_PIN) 

42.    #define HAL_LED_SET_2()                 MCU_IO_SET_HIGH(HAL_BOARD_IO_LED_2_PORT, HAL_BOARD_IO_LED_2_PIN) 

43.    #define HAL_LED_SET_3()                 MCU_IO_SET_HIGH(HAL_BOARD_IO_LED_3_PORT, HAL_BOARD_IO_LED_3_PIN) 

44.    #define HAL_LED_SET_4()                 MCU_IO_SET_HIGH(HAL_BOARD_IO_LED_4_PORT, HAL_BOARD_IO_LED_4_PIN) 

45.     

46.    #define HAL_BOARD_IO_LED_1_PORT        1   // Green 

47.    #define HAL_BOARD_IO_LED_1_PIN         0 

48.    #define HAL_BOARD_IO_LED_2_PORT        1   // Red 

49.    #define HAL_BOARD_IO_LED_2_PIN         1 

50.    #define HAL_BOARD_IO_LED_3_PORT        1   // Yellow 

51.    #define HAL_BOARD_IO_LED_3_PIN         4 

52.    #define HAL_BOARD_IO_LED_4_PORT        0   // Orange 

53.    #define HAL_BOARD_IO_LED_4_PIN         1 

54.    */  

55.    halLedSet

(1);  

56.  

57.    // Print Logo and splash screen on LCD  

58.    utilPrintLogo("Light Switch");  //有关LCD的函数不管  

59.  

60.    // Wait for user to press S1 to enter menu  

61.    while (halButtonPushed()!

=HAL_BUTTON_1);  

62.    halMcuWaitMs(350);  

63.    halLcdClear();    //lcd清屏,不用管  

64.  

65.    // Set application role  

66.    appMode = appSelectMode();    //模式选择  

67.    halLcdClear();  

68.  

69.    // Transmitter application  

70.    if(appMode == SWITCH) {  

71.        // No return from here  

72.        appSwitch();  

73.    }  

74.    // Receiver application  

75.    else if(appMode == LIGHT) {  

76.        // No return from here  

77.        appLight();  

78.    }  

79.    // Role is undefined. This code should not be reached  

80.    HAL_ASSERT(FALSE);  

81.}  

hal_board.c——halBoardInit()函数实现

[cpp] viewplaincopyprint?

1.void halBoardInit(void)  

2.{  

3.    //mcu初始化,设置系统时钟  

4.    halMcuInit();  

5.  

6.    // LEDs  

7.#ifdef SRF05EB_VERSION_1_3 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 金融投资

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1