【BLE-CC2640】CC2640之LED

本篇博文最后修改时间:2017年06月02日,11:03。


一、简介

本文简介如何在simpleBLEperipheral工程中控制LED。


二、实验平台

协议栈版本:ble_cc26xx_2_01_00_44423

编译软件:IAR Embedded Workbench for ARM Version 7.40

硬件平台:CC26xxDK开发板

仿真器:XDS100V3(香瓜)


版权声明

博主:甜甜的大香瓜

声明:喝水不忘挖井人,转载请注明出处。

原文地址:http://blog.csdn.NET/feilusia

联系方式:897503845@qq.com

香瓜BLE之CC2541群:127442605

香瓜BLE之CC2640群:557278427

香瓜BLE之Android群:541462902

香瓜单片机之STM8/STM32群:164311667
香瓜单片机之Linux群:512598061
香瓜单片机之职场交流群:450154342
甜甜的大香瓜的小店(淘宝店):https://shop217632629.taobao.com/?spm=2013.1.1000126.d21.hd2o8i

四、 实验前提
1、在进行本文步骤前,请先 阅读 以下博文:
暂无

2、在进行本文步骤前,请先 实现以下博文:
暂无


五、硬件原理图



由上面的两张图可知:

1、IO口为高电平时,LED亮;IO口为低电平时,LED灭。

2、

LED1——DIO_25

LED2——DIO_27

LED3——DIO_7

LED4——DIO_0

注:SFM16是拨码开关。


六、实验步骤

1、编写并添加自定义的LED驱动

1)写一个LED驱动GUA_Led.c(存放在“……\ble_cc26xx_2_01_00_44423\Projects\ble\SimpleBLEPeripheral\CC26xx\Source\Application\GUA”路径下)

//******************************************************************************        
//name:         GUA_Led.c        
//introduce:    香瓜自定义的LED驱动   
//author:       甜甜的大香瓜      
//email:        897503845@qq.com   
//QQ group      香瓜BLE之CC2640(557278427) 
//changetime:   2016.08.16 
//******************************************************************************
#include <string.h>
#include <stdio.h>

#include <ti/sysbios/knl/Task.h>
#include <ti/sysbios/knl/Clock.h>
#include <ti/sysbios/knl/Semaphore.h>
#include <ti/sysbios/knl/Queue.h>

#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[i], 0);
          break;          
        }

        case HAL_LED_MODE_ON:
        {
          PIN_setOutputValue(hledPins, pin[i], 1);
          break;          
        }

        case HAL_LED_MODE_FLASH:
        {
          PIN_setOutputValue(hledPins, pin[i], 1);   
          Task_sleep(10*1000/Clock_tickPeriod);
          PIN_setOutputValue(hledPins, pin[i], 0);
          break;          
        }        

        case HAL_LED_MODE_TOGGLE:
        {
          PIN_setOutputValue(hledPins, pin[i], !PIN_getOutputValue( pin[i])); 
          break;          
        }      
      }
    }
  }
}

2)写一个LED驱动头文件GUA_Led.h(存放在“……\ble_cc26xx_2_01_00_44423\Projects\ble\SimpleBLEPeripheral\CC26xx\Source\Application\GUA”路径下)

//******************************************************************************        
//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设置中添加按键驱动源文件路径

$PROJ_DIR$/../../../Source/Application/GUA

2、修改协议栈LED对应引脚(Board.h中)

/* 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)添加头文件

//GUA
#include "GUA_Led.h"  
//GUA 

2)添加测试代码(SimpleBLEPeripheral_init函数中)

  //点灯
  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全亮灭一次

七、注意事项

暂无


八、实验结果

用仿真器单步执行,可以发现LED的测试代码实际现象,与香瓜注释相一致。下图为LED全亮时的状态。













  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值