本文最后修改时间: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下载器购买链接:
四、实验前提
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文件夹下
添加文件过程中,选项选择如下
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的测试代码实际现象,与香瓜注释相一致。