【CC2640R2F】香瓜CC2640R2F之LED

本文最后修改时间:2017年11月13日 15:00

 

一、本节简介

本节以simple_peripheral工程为例,介绍如何用协议栈中的LED。

 

二、实验平台

1)CC2640R2F平台

①协议栈版本:CC2640R2 SDK v1.40.00.45

②编译软件:CCS7.3.0.00019

③硬件平台:香瓜CC2640R2F开发板

④仿真器:香瓜XDS100V3下载器


三、版权声明

1)作者:甜甜的大香瓜

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

3)纠错/业务合作:897503845@qq.com

4)香瓜BLE之CC2640R2F群:557278427

5)本文出处:原创连载资料《简单粗暴学蓝牙5》

6)完整开源资料下载地址(电脑端打开):

https://shop217632629.taobao.com/?spm=2013.1.1000126.d21.hd2o8i

7)香瓜CC2640R2F开发板购买链接:

https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4023-16963296339.8.21bfc58419sWKt&id=558653143169

8)香瓜XDS100V3下载器购买链接:

https://item.taobao.com/item.htm?spm=a230r.1.14.1.1d150040zvJBco&id=558356989143&ns=1&abbucket=6#detail


四、实验前提

1、在进行本文步骤前,请先阅读以下章节:

1)《简单粗暴学蓝牙5》的“第一章至第四章”章节​。

2)《PIN.h File Reference》:

file:///C:/ti/simplelink_cc2640r2_sdk_1_40_00_45/docs/tidrivers/doxygen/html/_p_i_n_8h.html

 

2、在进行本文步骤前,请先实现以下章节:

1)《简单粗暴学蓝牙5》的“第三章 软件的安装及使用”章节。

 

五、基础知识

暂无


六、硬件原理

1、原理图



由上面两图可知,

名称

引脚

控制方法

LED1

DIO_25

高电平亮、低电平灭

LED2

DIO_27

高电平亮、低电平灭

LED3

DIO_7

高电平亮、低电平灭

LED4

DIO_0

高电平亮、低电平灭

注:SFM16是拨码开关。

2、开发板对应位置


需将拨码开关的左1(VCC)、右4(LED1)、右3(LED2)、右2(LED3)、右1(LED4)按键上拨。


七、实验步骤

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

1)写一个LED驱动GUA_Led.c(存放在“……\simplelink_cc2640r2_sdk_1_40_00_45\examples\rtos\CC2640R2_LAUNCHXL\ble5stack\simple_peripheral\src\app\GUA”路径下)

//**********************************************************************
//name:         GUA_Led.c        
//introduce:    香瓜自定义的LED驱动   
//author:       甜甜的大香瓜      
//email:        897503845@qq.com   
//QQ group:     香瓜BLE之CC2640R2F(557278427)
//shop:
//https://shop217632629.taobao.com/?spm=2013.1.1000126.d21.hd2o8i
//changetime:   2017.10.17
//**********************************************************************
#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 <ti/drivers/PIN.h>

#include "GUA_Led.h"

/*********************宏定义************************/   
//LEDS
#define GUA_LED1     PIN_ID(25)
#define GUA_LED2     PIN_ID(27)
#define GUA_LED3     PIN_ID(7)
#define GUA_LED4     PIN_ID(0)

/*********************内部变量************************/  
static PIN_State  sGUA_LedPins;
static PIN_Handle sGUA_HledPins = NULL;

//IO配置
PIN_Config bGUA_LedPinsCfg[] =
{
    GUA_LED1 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
    GUA_LED2 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
    GUA_LED3 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
    GUA_LED4 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
    PIN_TERMINATE
};

//**********************************************************************
//name:         GUA_Led_Set
//introduce:    香瓜点灯驱动
//parameter:    nGUA_Led_No:GUA_LED_NO_1、GUA_LED_NO_2、GUA_LED_NO_3、
//              GUA_LED_NO_4、GUA_LED_NO_ALL
//              nGUA_Mode:GUA_LED_MODE_OFF、GUA_LED_MODE_ON、
//              GUA_LED_MODE_FLASH、GUA_LED_MODE_TOGGLE
//return:       none
//author:       甜甜的大香瓜
//email:        897503845@qq.com
//QQ group:     香瓜BLE之CC2640R2F(557278427)
//shop:
//https://shop217632629.taobao.com/?spm=2013.1.1000126.d21.hd2o8i
//changetime:   2017.10.17
//**********************************************************************
void GUA_Led_Set(GUA_U8 nGUA_Led_No, GUA_U8 nGUA_Mode)
{
    GUA_U8 nGUA_I = 0;
    GUA_U8 nbGUA_Pin[4] = {GUA_LED1, GUA_LED2, GUA_LED3, GUA_LED4};

    //第一次使用时注册IO
    if(NULL == sGUA_HledPins)
    {
        sGUA_HledPins = PIN_open(&sGUA_LedPins, bGUA_LedPinsCfg);
    }

    //依次检测4个led是否有执行动作
    for(nGUA_I = 0; nGUA_I <= 3; nGUA_I++)
    {
        if(nGUA_Led_No & (1 << nGUA_I))
        {
            //执行模式
            switch(nGUA_Mode)
            {
                //关灯模式
                case GUA_LED_MODE_OFF:
                {
                    PIN_setOutputValue(sGUA_HledPins, nbGUA_Pin[nGUA_I], 0);
                    break;
                }

                //开灯模式
                case GUA_LED_MODE_ON:
                {
                    PIN_setOutputValue(sGUA_HledPins, nbGUA_Pin[nGUA_I], 1);
                    break;
                }

                //先亮后灭一次
                case GUA_LED_MODE_FLASH:
                {
                    PIN_setOutputValue(sGUA_HledPins, nbGUA_Pin[nGUA_I], 1);
                    Task_sleep(10*1000/Clock_tickPeriod);
                    PIN_setOutputValue(sGUA_HledPins, nbGUA_Pin[nGUA_I], 0);
                    break;
                }

                //反转一次
                case GUA_LED_MODE_TOGGLE:
                {
                    PIN_setOutputValue(sGUA_HledPins, nbGUA_Pin[nGUA_I], !PIN_getOutputValue(nbGUA_Pin[nGUA_I]));
                    break;
                }
            }
        }
    }
}

2)写一个LED驱动头文件GUA_Led.h(存放在“……\simplelink_cc2640r2_sdk_1_40_00_45\examples\rtos\CC2640R2_LAUNCHXL\ble5stack\simple_peripheral\src\app\GUA”路径下)

//**********************************************************************
//name:         GUA_Led.h        
//introduce:    香瓜自定义的LED驱动头文件
//author:       甜甜的大香瓜      
//email:        897503845@qq.com   
//QQ group:     香瓜BLE之CC2640R2F(557278427)
//shop:
//https://shop217632629.taobao.com/?spm=2013.1.1000126.d21.hd2o8i
//changetime:   2017.09.20
//**********************************************************************
#ifndef _GUA_LED_H_
#define _GUA_LED_H_

/*********************宏定义************************/ 
//类型宏
#ifndef GUA_U8
typedef unsigned char GUA_U8;
#endif

//LEDS
#define GUA_LED_NO_1            0x01
#define GUA_LED_NO_2            0x02
#define GUA_LED_NO_3            0x04
#define GUA_LED_NO_4            0x08
#define GUA_LED_NO_ALL          (GUA_LED_NO_1 | GUA_LED_NO_2 | GUA_LED_NO_3 | GUA_LED_NO_4)

//Modes
#define GUA_LED_MODE_OFF        0x00
#define GUA_LED_MODE_ON         0x01
#define GUA_LED_MODE_FLASH      0x02
#define GUA_LED_MODE_TOGGLE     0x04

/*********************函数声明************************/ 
extern void GUA_Led_Set(GUA_U8 nGUA_Led_No, GUA_U8 nGUA_Mode);

#endif


2、工程中添加GUA_Led.c和GUA_Led.h

注:拖拽至CCS工程的Application文件夹下


添加文件过程中,选项选择如下




3、应用层调用
1)添加头文件(simple_peripheral.c中)

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

2)添加测试代码(simple_peripheral.c的SimpleBLEPeripheral_init函数末尾中)

//GUA
  //点灯
  GUA_Led_Set(GUA_LED_NO_1, GUA_LED_MODE_ON);           //LED1 亮
  GUA_Led_Set(GUA_LED_NO_2, GUA_LED_MODE_ON);           //LED2 亮
  GUA_Led_Set(GUA_LED_NO_3, GUA_LED_MODE_ON);           //LED3 亮
  GUA_Led_Set(GUA_LED_NO_4, GUA_LED_MODE_ON);           //LED4 亮
  GUA_Led_Set(GUA_LED_NO_ALL, GUA_LED_MODE_OFF);        //LED全灭
  GUA_Led_Set(GUA_LED_NO_ALL, GUA_LED_MODE_ON);         //LED全亮
  GUA_Led_Set(GUA_LED_NO_ALL, GUA_LED_MODE_TOGGLE);     //LED全反转一次
  GUA_Led_Set(GUA_LED_NO_ALL, GUA_LED_MODE_FLASH);      //LED全亮灭一次
//GUA

八、注意事项
暂无

九、实验结果
用仿真器单步执行,可以发现LED的测试代码实际现象,与香瓜注释相一致。














评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值