本篇博文最后修改时间: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
香瓜单片机之职场交流群:450154342
五、硬件原理图
由上面的两张图可知:
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全亮时的状态。