1、简介
本文简介如何在simpleBLEperipheral工程中控制LED。
2、实验平台
协议栈版本:ble_cc26xx_2_01_00_44423
编译软件:IAR Embedded Workbench for ARM Version 7.40
硬件平台:CC26xxDK开发板
仿真器:XDS100V3(香瓜)
3、实验前提
1、在进行本文步骤前,请先阅读以下博文:
暂无
2、在进行本文步骤前,请先实现以下博文:
暂无
4、硬件原理图
由上面的两张图可知:
1、IO口为高电平时,LED亮;IO口为低电平时,LED灭。
2、
LED1——DIO_25
LED2——DIO_27
LED3——DIO_7
LED4——DIO_0
注:SFM16是拨码开关。
5、实验步骤
1、编写并添加自定义的LED驱动
1)写一个LED驱动GUA_Led.c(存放在“……\ble_cc26xx_2_01_00_44423\Projects\ble\SimpleBLEPeripheral\CC26xx\Source\Application\GUA”路径下)
[cpp] view plain copy
- //******************************************************************************
- //name: GUA_Led.c
- //introduce: 香瓜自定义的LED驱动
- //author: 甜甜的大香瓜
- //email: 897503845@qq.com
- //QQ group 香瓜BLE之CC2640(557278427)
- //changetime: 2016.08.16
- //******************************************************************************
- #include
- #include
-
- #include
- #include
- #include
- #include
-
- #include "Board.h"
- #include "GUA_Led.h"
- /*********************宏定义************************/
- #ifndef U8
- typedef unsigned char U8;
- #endif
-
- /*********************内部变量************************/
- static PIN_State ledPins;
- static PIN_Handle hledPins = NULL;
-
- //IO配置
- PIN_Config ledPinsCfg[] =
- {
- Board_LED1 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
- Board_LED2 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
- Board_LED3 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
- Board_LED4 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
- PIN_TERMINATE
- };
-
- //******************************************************************************
- //name: GUA_Led_Set
- //introduce: 香瓜点灯驱动
- //parameter: led:HAL_LED_1、HAL_LED_2、HAL_LED_3、HAL_LED_4、HAL_LED_ALL
- // mode:HAL_LED_MODE_OFF、HAL_LED_MODE_ON、HAL_LED_MODE_FLASH、HAL_LED_MODE_TOGGLE
- //return: none
- //author: 甜甜的大香瓜
- //email: 897503845@qq.com
- //QQ group 香瓜BLE之CC2640(557278427)
- //changetime: 2016.08.16
- //******************************************************************************
- void GUA_Led_Set(U8 led, U8 mode)
- {
- U8 i = 0;
- U8 pin[4] = {Board_LED1, Board_LED2, Board_LED3, Board_LED4};
-
- //第一次使用时注册IO
- if(NULL == hledPins)
- {
- hledPins = PIN_open(&ledPins, ledPinsCfg);
- }
-
- //依次检测4个led是否有执行动作
- for(i = 0; i <= 3; i++)
- {
- if(led & (1 << i))
- {
- switch(mode)
- {
- case HAL_LED_MODE_OFF:
- {
- PIN_setOutputValue(hledPins, pin, 0);
- break;
- }
-
- case HAL_LED_MODE_ON:
- {
- PIN_setOutputValue(hledPins, pin, 1);
- break;
- }
-
- case HAL_LED_MODE_FLASH:
- {
- PIN_setOutputValue(hledPins, pin, 1);
- Task_sleep(10*1000/Clock_tickPeriod);
- PIN_setOutputValue(hledPins, pin, 0);
- break;
- }
-
- case HAL_LED_MODE_TOGGLE:
- {
- PIN_setOutputValue(hledPins, pin, !PIN_getOutputValue( pin));
- break;
- }
- }
- }
- }
- }
2)写一个LED驱动头文件GUA_Led.h(存放在“……\ble_cc26xx_2_01_00_44423\Projects\ble\SimpleBLEPeripheral\CC26xx\Source\Application\GUA”路径下)
[cpp] view plain copy
- //******************************************************************************
- //name: GUA_Led.h
- //introduce: 香瓜自定义的LED驱动头文件
- //author: 甜甜的大香瓜
- //email: 897503845@qq.com
- //QQ group 香瓜BLE之CC2640(557278427)
- //changetime: 2016.08.16
- //******************************************************************************
- #ifndef _GUA_LED_H_
- #define _GUA_LED_H_
-
- /*********************宏定义************************/
- //LEDS
- #define HAL_LED_1 0x01
- #define HAL_LED_2 0x02
- #define HAL_LED_3 0x04
- #define HAL_LED_4 0x08
- #define HAL_LED_ALL (HAL_LED_1 | HAL_LED_2 | HAL_LED_3 | HAL_LED_4)
-
- //Modes
- #define HAL_LED_MODE_OFF 0x00
- #define HAL_LED_MODE_ON 0x01
- #define HAL_LED_MODE_FLASH 0x02
- #define HAL_LED_MODE_TOGGLE 0x04
-
- /*********************函数声明************************/
- extern void GUA_Led_Set(unsigned char led, unsigned char mode);
-
- #endif
3)工程中添加GUA_Led.c和GUA_Led.h
4)在IAR设置中添加按键驱动源文件路径
[cpp] view plain copy
- $PROJ_DIR$/../../../Source/Application/GUA
2、修改协议栈LED对应引脚(Board.h中)
[cpp] view plain copy
- /* Leds */
- #define Board_LED_ON 1 /* LEDs on CC2650 are active high */
- #define Board_LED_OFF 0
- #define Board_LED1 IOID_25 /* RF2.11 */
- #define Board_LED2 IOID_27 /* RF2.13 */
- #define Board_LED3 IOID_7 /* RF1.2 */
- #define Board_LED4 IOID_0//IOID_6 /* RF1.4 */
由于开发板使用的LED4为IOID_0,而协议栈默认使用的是IOID_6,因此做如上修改。
3、应用层调用(simpleBLEperipheral.c中)
1)添加头文件
[cpp] view plain copy
- //GUA
- #include "GUA_Led.h"
- //GUA
2)添加测试代码(SimpleBLEPeripheral_init函数中)
[cpp] view plain copy
- //点灯
- GUA_Led_Set(HAL_LED_1, HAL_LED_MODE_ON); //LED1 亮
- GUA_Led_Set(HAL_LED_2, HAL_LED_MODE_ON); //LED2 亮
- GUA_Led_Set(HAL_LED_3, HAL_LED_MODE_ON); //LED3 亮
- GUA_Led_Set(HAL_LED_4, HAL_LED_MODE_ON); //LED4 亮
- GUA_Led_Set(HAL_LED_ALL, HAL_LED_MODE_OFF); //LED全灭
- GUA_Led_Set(HAL_LED_ALL, HAL_LED_MODE_ON); //LED全亮
- GUA_Led_Set(HAL_LED_ALL, HAL_LED_MODE_TOGGLE); //LED全反转一次
- GUA_Led_Set(HAL_LED_ALL, HAL_LED_MODE_FLASH); //LED全亮灭一次
6、注意事项
暂无
7、实验结果
用仿真器单步执行,可以发现LED的测试代码实际现象,与香瓜注释相一致。下图为LED全亮时的状态。