cc2640 基于官方从机修改的通过手机实现蓝牙点灯例程

来源:互联网 发布:mac safari添加插件 编辑:程序博客网 时间:2024/04/28 15:03

在TI官方从机例程中的simpleBLEPeripheral.c进行代码修改。



添加引脚驱动头文件:


#include <ti/drivers/pin/PINCC26XX.h>    //PIN driver


添加全局变量:

static PIN_Handle ledhandle=NULL;



在从机任务函数中添加 led on之后的代码。这里的代码是进行led灯初始化,四灯全亮。

 static void SimpleBLEPeripheral_taskFxn(UArg a0, UArg a1)
{
  // Initialize application
  SimpleBLEPeripheral_init();

//led on
  PIN_State ledstate={0};
 
  PIN_Config ledconfig[]=
      {
      
          Board_LED1| PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH| PIN_PUSHPULL | PIN_DRVSTR_MAX,   /* LED initially off             */
          Board_LED2| PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH| PIN_PUSHPULL | PIN_DRVSTR_MAX,     /* LED initially off             */
         Board_LED3| PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH| PIN_PUSHPULL | PIN_DRVSTR_MAX,     /* LED initially off             */
         Board_LED4| PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH| PIN_PUSHPULL | PIN_DRVSTR_MAX,     /* LED initially off             */
                         
       };
 
  ledhandle=PIN_open(&ledstate, ledconfig);

// Application main loop
  for (;;)
  {

        ................
 


如果只是硬件点灯,不需要手机进行控制,则不需要定义 ledhandle 这个变量。




其实在main函数第一行就有引脚的初始化定义:

Void main()
{
  PIN_init(BoardGpioInitTable);


我们跳到这个Table里,可以看到配置如下,上面的配置代码可以复制这里,也可以直接使用这个数组进行配置。

PIN_Config BoardGpioInitTable[] = {

    Board_LED1       | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW   | PIN_PUSHPULL | PIN_DRVSTR_MAX,     /* LED initially off             */
    Board_LED2       | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW   | PIN_PUSHPULL | PIN_DRVSTR_MAX,     /* LED initially off             */
    Board_LED3       | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW   | PIN_PUSHPULL | PIN_DRVSTR_MAX,     /* LED initially off             */
    Board_LED4       | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW   | PIN_PUSHPULL | PIN_DRVSTR_MAX,     /* LED initially off             */
    Board_KEY_SELECT | PIN_INPUT_EN  | PIN_PULLUP | PIN_HYSTERESIS,                             /* Button is active low          */
    Board_KEY_DOWN   | PIN_INPUT_EN  | PIN_PULLUP | PIN_HYSTERESIS,                             /* Button is active low          */
    Board_UART_TX    | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH   | PIN_PUSHPULL,                     /* UART TX pin at inactive level */
    PIN_TERMINATE                                                                               /* Terminate list                */
};


配置到这里,烧录到开发板之后,四灯全亮,但只是硬件点亮,还不能进行手机控制。




下面修改与手机通信的代码。

原理:GATT(通用属性规范)负责设备之间的通信,它有五个属性。这里通过手机端的BLE READER app修改CHAR1值 达到控制led灯亮灭。



在 SimpleBLEPeripheral_processCharValueChangeEvt 函数中添加红色高亮代码:


static void SimpleBLEPeripheral_processCharValueChangeEvt(uint8_t paramID)
{
#ifndef FEATURE_OAD
  uint8_t newValue;
 
  switch(paramID)
  {
    case SIMPLEPROFILE_CHAR1:
      SimpleProfile_GetParameter(SIMPLEPROFILE_CHAR1, &newValue);

      LCD_WRITE_STRING_VALUE("Char 1:", (uint16_t)newValue, 10, LCD_PAGE4);   
                   {
            if(newValue==2)
                {
                PIN_setOutputValue(ledhandle,Board_LED1, Board_LED_OFF);

            }
        else
        { PIN_setOutputValue(ledhandle,Board_LED1, Board_LED_ON);}

      }

         break;



到此为止,代码修改就结束了。


BLE READER 操作:点击相应蓝牙名连接之后,依次点击Beacon、Proximity,出现char读写界面。按上面的代码,写入2关闭led1,其余合法数字打开led1.




参考TI developer‘s  guide page62 and page 88.


1 0
原创粉丝点击