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