【BLE-CC2640】CC2640之LED

    xiaoxiao2026-02-23  5

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

    转载请注明原文地址: https://ju.6miu.com/read-1307309.html
    最新回复(0)