本篇博文最后修改时间: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全亮时的状态。
