[资料分享] BLE-CC2640--CC2640之LED

fish001   2017-7-25 08:34 楼主

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全亮时的状态。




回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复