精华内容
下载资源
问答
  • CC2541

    2016-05-11 15:44:35
    1、CC2541的协议栈用的是定时器几:定时器2
    1、CC2541的协议栈用的是定时器几:定时器2
    
    展开全文
  • CC2541.docx

    2021-03-01 15:44:33
    介绍了CC2541芯片以及关于CC2541功耗测试过程的翻译
  • cc2541中文数据手册及cc2541蓝牙源程序 发表于 2018-05-02 17:09:35 无线通信15人已加入 +加入圈子  cc2541概述  CC2541 是一款针对低能耗以及私有 2.4GHz 应用的功率优化的真正片载系统 (SoC) 解决方案。 ...

    cc2541中文数据手册及cc2541蓝牙源程序

    发表于 2018-05-02 17:09:35

    无线通信15人已加入

    +加入圈子

      cc2541概述

      CC2541 是一款针对低能耗以及私有 2.4GHz 应用的功率优化的真正片载系统 (SoC) 解决方案。 它使得使用低总体物料清单成本建立强健网络节点成为可能。 CC2541 将领先 RF 收发器的出色性能和一个业界标准的增强型 8051 MCU、系统内可编程闪存存储器、8kB RAM 和很多其它功能强大的特性和外设组合在一起。 CC2541 非常适合应用于需要超低能耗的系统。 这由多种不同的运行模式指定。 运行模式间较短的转换时间进一步使低能耗变为可能。

      CC2541器件特性

      射频:

      2.4GHz符合低能耗规范和私有的 RF 片载系统

      支持 250kbps,500kbps,1Mbps,2Mbps 的数据速率

      出色的链路预算,不使用外部前段而支持长距离应用

      高达 0dBm 的可编程输出功率

      出色的接收器灵敏度(1Mbps 时为 -94dBm),可选择性,和阻挡性能

      适合于针对符合世界范围内的无线电频率调节系统:ETSI EN 300 328 和 EN 300 440 2 类 (欧洲),FCC CFR47 15 部分(美国),和 ARIB STD-T66(日本)

      布局:

      极少的外部组件

      提供参考设计

      6mm × 6mm 方形扁平无引脚 (QFN)-40 封装

      与 CC2540 引脚兼容 (当不使用 USB 或者 I2C 时)

      低功率:

      工作模式 RX 低至:17.9mA

      工作模式 TX (0 dBm):18.2mA

      功率模式 1(4μs 唤醒):270μA

      功率模式 2(睡眠定时器打开):1μA

      功率模式 3(外部中断):0.5μs

      宽泛的电源电压范围 (2V - 3.6V)

      工作模式下TPS62730兼容低功率

      cc2541引脚图

    cc2541中文数据手册及cc2541蓝牙源程序

      CC2541的用途

      符合针对单模式蓝牙低能耗 (BLE) 解决方案的符合4.0 协议的堆栈;

      完全功率优化堆栈,包括控制器和主机GAP - 中心设备,外设,或者广播器(包括组合角色)属性协议 (ATT) / 通用属性配置文件 (GATT) – 客户端和服务器对称式对多重处理 (SMP) - AES-128 加密和解密L2CAP;

      示例应用和配置文件针对 GAP 中心和外围作用的一般应用距离临近,加速计,简单关键字,和电池 GATT 服务 BLE 软件栈内支持更多应用;

      多重配置选项单芯片配置,允许应用运行在 CC2541 上用于运行在一个外部微处理器上的网络处理器接口;

      BTool - 用于评估、开发和测试的视窗 (Windows)PC应用。

      CC2541原理图

    cc2541中文数据手册及cc2541蓝牙源程序

      CC2541与单片机的连接电路

      辅助电路板引出的管脚有GND.地线、VCC.3.3V、数据收发线RXD和TXD、流控线RIS 和CTS、使能信号线。 EN、复位信号线.RESET,其中BTEN即图3中的ON 信号,实际应用中将它与VCC 接在一起,其他的与单片机相连。

    cc2541中文数据手册及cc2541蓝牙源程序

      cc2541蓝牙源程序

    cc2541中文数据手册及cc2541蓝牙源程序
    cc2541中文数据手册及cc2541蓝牙源程序
    cc2541中文数据手册及cc2541蓝牙源程序
    cc2541中文数据手册及cc2541蓝牙源程序
    cc2541中文数据手册及cc2541蓝牙源程序

    展开全文
  • CC2541 OAD

    2017-05-17 08:07:16
    STM32 CC2541 OAD
  • CC2541 PWM

    2018-05-30 19:35:08
    CC2541 产生一路PWM,可扩展多路PWM。如果是AMOMCU可直接使用
  • CC2541.zip

    2020-07-24 08:56:11
    文件提供了蓝牙芯片CC2541的协议栈、编译器 demo、数据手册等资源,帮助初学者快速搭建环境,快速上手。
  • 智能手环CC2541

    2017-05-16 08:15:22
    蓝牙智能手环 CC2541
  • CC2541芯片

    2016-03-04 15:51:22
    这是一份CC2541的芯片引脚图以及功能,我们可以从中学习到很多芯片的用法
  • 蓝牙cc2541

    2014-12-15 16:47:35
    蓝牙开发资料cc2541要下载的 拿积分来
  • cc2541微信demo

    2016-07-01 23:41:17
    cc2541微信demo
  • CC2541资料

    2014-10-28 09:06:01
    cc2541相关资料,包括安卓、ios,app
  • CC254x-CC2540-CC2541库函数速查
  • CC2541开发者指南.pdf

    2020-04-11 21:18:25
    CC2541开发者指南
  • CC2541中文手册

    2018-09-04 09:49:17
    TI出品低功耗蓝牙芯片CC2541的中文数据手册,方便开发人员进行开发。
  • CC2541 ibeacon固件

    2014-06-02 09:28:48
    CC2541的ibeacon固件,用于CC2541和CC2540的ibeacon开发,室内定位技术
  • CC2541主动连接

    2019-04-24 20:21:45
    CC2541与从机通信程序,将接受的信息显示在显示屏,就是将从机传感器采集到的数据通过透传方式给主机,主机显示从机传感器采集到的数据
  • CC2541中文数据手册.pdf

    2021-04-10 09:24:40
    CC2541中文数据手册
  • 如果 CC2540 上的 USB 未启用并且 CC2541 上的 I2C/ 额外 I/O 未启用,那么 CC2541 与 CC2540 在 6-mm x 6-mm 方形扁平无引脚 (QFN)40 封装内引脚兼容。 与 CC2540 相比,CC2541 提供更低 RF 流耗。 CC2541 没有 CC...
  • cc2541中文数据手册

    热门讨论 2014-03-17 18:31:27
    cc2541中文数据手册,描述了TI的cc2541芯片
  • cc2541 BLE DEMO

    2015-07-30 18:54:20
    cc2541 BLE DEMO 代码参考
  • CC2540 CC2541蓝牙开发板实验例程软件工程源码20个合集: 41软件例程-.Mpu6050六轴传感器 CC2540 CC2541软件例程-.PIR人体红外传感器 CC2540 CC2541软件例程-.外部中断-按键检测 CC2540 CC2541软件例程-.系统睡眠...
  • CC2541CC2541之HAL层KEY分析

    千次阅读 2016-12-23 14:06:58
    CC2541之HAL层KEY分析在CC2541BLE协议栈中,KEY测试是由HAL层来进行抽象和管理的。关于按键的的测试代码和配置主要集中在hal_drivers.c 、hal_drivers.h 、hal_key.c、hal_key.h、hal_board_cfg.h几个文件中。

    CC2541之HALKEY分析

    CC2541BLE协议栈中,KEY测试是由HAL层来进行抽象和管理的。关于按键的的测试代码和配置主要集中在hal_drivers.chal_drivers.hhal_key.chal_key.hhal_board_cfg.hOnboard.c几个文件中。
    初始化:
    main函数HAL层的KEY初始化主要是调用HalDriverInit();InitBoard( OB_READY );,代码如下:

    int main(void)
    {
        /* Initialize hardware */
        HAL_BOARD_INIT();
    
        // Initialize board I/O
        InitBoard( OB_COLD );
    
        /* Initialze the HAL driver */
        HalDriverInit(); 
    
        // Final board initialization
        InitBoard( OB_READY );
    
        /* Initialize NV system */
        osal_snv_init();
    
        /*Initialize LL*/
        /* Initialize the operating system x*/
        osal_init_system();
    
        /* Enable interrupts */
        HAL_ENABLE_INTERRUPTS();
    
        // Final board initialization
        InitBoard( OB_READY );
    
        #if defined ( POWER_SAVING )
        osal_pwrmgr_device( PWRMGR_BATTERY );
    
        #if defined (WDT_USED)
        WD_INIT();
        #endif
    
        /* Start OSAL */  
        osal_start_system(); // No Return from here
    
        return 0;
    }

    hal_drivers.cHalDriverInit()定义如下,其中调用HalKeyInit();进行按键的初始化处理,代码如下:

    void HalDriverInit (void)
    {
      /* TIMER */
    #if (defined HAL_TIMER) && (HAL_TIMER == TRUE)
    #endif
    
      /* ADC */
    #if (defined HAL_ADC) && (HAL_ADC == TRUE)
      HalAdcInit();
    #endif
    
      /* DMA */
    #if (defined HAL_DMA) && (HAL_DMA == TRUE)
      // Must be called before the init call to any module that uses DMA.
      HalDmaInit();
    #endif
    
      /* AES */
    #if (defined HAL_AES) && (HAL_AES == TRUE)
      HalAesInit();
    #endif
    
      /* LCD */
    #if (defined HAL_LCD) && (HAL_LCD == TRUE)
      HalLcdInit();
    #endif
    
      /* LED */
    #if (defined HAL_LED) && (HAL_LED == TRUE)
      HalLedInit();
    #endif
    
      /* UART */
    #if (defined HAL_UART) && (HAL_UART == TRUE)
      HalUARTInit();
    #endif
    
      /* KEY */
    #if (defined HAL_KEY) && (HAL_KEY == TRUE)
      HalKeyInit();
    #endif
    
      /* HID */
    #if (defined HAL_HID) && (HAL_HID == TRUE)
      usbHidInit();
    #endif
    
    #if (defined HAL_BAT) && (HAL_BAT == TRUE)
      //HalBatteryInit();
    #endif
    }
    

    hal_key.c中的HalKeyInit( void )定义如下:

    变量说明:

    • halKeySavedKeys在轮训模式下用于保存上次按键的状态。
    • pHalKeyProcessFunction用于回调处理的函数指针。初始化时,指向为NULL,其结构如下:

      • 定义:static halKeyCBack_t pHalKeyProcessFunction;
      • 类型: typedef void (*halKeyCBack_t) (uint8 keys, uint8 state);
    • HalKeyConfigured按键配置参数,初始化为FALSE

    void HalKeyInit( void )
    {
      halKeySavedKeys = 0;  // Initialize previous key to 0.
    
      #if defined ( CC2540_MINIDK )
      HAL_KEY_SW_1_SEL &= ~(HAL_KEY_SW_1_BIT);    /* Set pin function to GPIO */
      HAL_KEY_SW_1_DIR &= ~(HAL_KEY_SW_1_BIT);    /* Set pin direction to Input */
      HAL_KEY_SW_2_SEL &= ~(HAL_KEY_SW_2_BIT);    /* Set pin function to GPIO */
      HAL_KEY_SW_2_DIR &= ~(HAL_KEY_SW_2_BIT);    /* Set pin direction to Input */
      #else
      HAL_KEY_SW_6_SEL &= ~(HAL_KEY_SW_6_BIT);    /* Set pin function to GPIO */
      HAL_KEY_SW_6_DIR &= ~(HAL_KEY_SW_6_BIT);    /* Set pin direction to Input */
      HAL_KEY_SW_7_SEL &= ~(HAL_KEY_SW_7_BIT);    /* Set pin function to GPIO*/
      HAL_KEY_SW_7_DIR &= ~(HAL_KEY_SW_7_BIT);    /* Set pin direction to Input*/
      #endif
      #endif
    
      /* Initialize callback function */
      pHalKeyProcessFunction  = NULL;
    
      /* Start with key is not configured */
      HalKeyConfigured = FALSE;
    }
    

    OnBoard.c中:InitBoard(uint8 level)函数中选择了按键的触发方式(中断方式、非中断方式);HalKeyConfig( OnboardKeyIntEnable, OnBoard_KeyCallback);配置按键服务,传入参数包括中断的是否使能参数以及回调函数。代码如下:
    变量说明:
    OnboardKeyIntEnable:按键中断的方式的使能开关。赋值HAL_KEY_INTERRUPT_DISABLE非中断方式(即轮训的方式),赋值HAL_KEY_INTERRUPT_ENABLE中断方式

    void InitBoard( uint8 level )
    {
      if ( level == OB_COLD )
      {
        osal_int_disable( INTS_ALL );
        HalLedSet( HAL_LED_ALL, HAL_LED_MODE_OFF );
      }
      else//!OB_COLD
      {
          OnboardKeyIntEnable = HAL_KEY_INTERRUPT_ENABLE;
          HalKeyConfig( OnboardKeyIntEnable, OnBoard_KeyCallback);
      }
    }

    hal_key.c中的HalKeyConfig (bool interruptEnable, halKeyCBack_t cback)用于传入按键方式参数(中断方式或者非中断方式),以及传入回调函数。
    变量说明:
    Hal_KeyIntEnable用于记录按键的的方式(中断方式和非中断方式)。
    pHalKeyProcessFunction:指向回调函数,上述已经有提到。

    void HalKeyConfig (bool interruptEnable, halKeyCBack_t cback)
    {
      /* Enable/Disable Interrupt or */
      Hal_KeyIntEnable = interruptEnable;
    
      /* Register the callback fucntion */
      pHalKeyProcessFunction = cback;
    
      /* Determine if interrupt is enable or not */
      if (Hal_KeyIntEnable)
      {
           #if defined ( CC2540_MINIDK )
               /* Rising/Falling edge configuratinn */
               PICTL |= HAL_KEY_SW_1_EDGEBIT;   /* Set the edge bit to set falling edge to give int */
               HAL_KEY_SW_1_ICTL |= HAL_KEY_SW_1_ICTLBIT; /* enable interrupt generation at port */
               HAL_KEY_SW_1_IEN |= HAL_KEY_SW_1_IENBIT;   /* enable CPU interrupt */
               HAL_KEY_SW_1_PXIFG = ~(HAL_KEY_SW_1_BIT); /* Clear any pending interrupt */
               HAL_KEY_SW_2_ICTL |= HAL_KEY_SW_2_ICTLBIT; /* enable interrupt generation at port */
               HAL_KEY_SW_2_IEN |= HAL_KEY_SW_2_IENBIT;   /* enable CPU interrupt */
               HAL_KEY_SW_2_PXIFG = ~(HAL_KEY_SW_2_BIT); /* Clear any pending interrupt */
           #else
                /* *************************
                *   Interrupt configuration:
                * - Enable interrupt generation at the port
                * - Enable CPU interrupt
                * - Clear any pending interrupt
                ***************************/
               HAL_KEY_SW_6_ICTL |= HAL_KEY_SW_6_ICTLBIT;//Port0_1
               HAL_KEY_SW_6_PXIFG = ~(HAL_KEY_SW_6_BIT); //flag  BV(1)
               HAL_KEY_SW_7_ICTL |= HAL_KEY_SW_7_ICTLBIT;//Port1_0
               HAL_KEY_SW_7_PXIFG = ~(HAL_KEY_SW_7_BIT); //flag  BV(0);
           #endif // !CC2540_MINIDK
    
          /* Do this only after the hal_key is configured - to work with sleep stuff */
          if (HalKeyConfigured == TRUE)
          {
              osal_stop_timerEx(Hal_TaskID, HAL_KEY_EVENT);  /* Cancel polling if active */
          }
      }
      else    /* Interrupts NOT enabled */
      {
         #if defined ( CC2540_MINIDK )
             HAL_KEY_SW_1_ICTL &= ~(HAL_KEY_SW_1_ICTLBIT); /* don't generate interrupt */
             HAL_KEY_SW_1_IEN &= ~(HAL_KEY_SW_1_IENBIT);   /* Clear interrupt enable bit */
             HAL_KEY_SW_2_ICTL &= ~(HAL_KEY_SW_2_ICTLBIT); /* don't generate interrupt */
             HAL_KEY_SW_2_IEN &= ~(HAL_KEY_SW_2_IENBIT);   /* Clear interrupt enable bit */
         #else
             //HAL_KEY_SW_6_ICTL &= ~(HAL_KEY_SW_6_ICTLBIT); /* don't generate interrupt */
             //HAL_KEY_SW_6_IEN &= ~(HAL_KEY_SW_6_IENBIT);   /* Clear interrupt enable bit */
             //HAL_KEY_SW_BIT_ICTL &= ~HAL_KEY_SW_ICTLBIT;
         #endif  // !CC2540_MINIDK
          osal_set_event(Hal_TaskID, HAL_KEY_EVENT);
      }
    
      /* Key now is configured */
      HalKeyConfigured = TRUE;
    }
    

    按键触发的处理:
    hal_key.c中断处理函数halProcessKeyInterrupt (void),如果按键触发了函数中会触发HAL_KEY_EVENT的任务的处理:

    void halProcessKeyInterrupt (void)
    {
      bool valid=FALSE;
    
    #if defined ( CC2540_MINIDK )
          if( HAL_KEY_SW_1_PXIFG & HAL_KEY_SW_1_BIT) /* Interrupt Flag has been set by SW1 */
          {
            HAL_KEY_SW_1_PXIFG = ~(HAL_KEY_SW_1_BIT); /* Clear Interrupt Flag */
            valid = TRUE;
          }
          if (HAL_KEY_SW_2_PXIFG & HAL_KEY_SW_2_BIT)  /* Interrupt Flag has been set by SW2 */
          {
            HAL_KEY_SW_2_PXIFG = ~(HAL_KEY_SW_2_BIT); /* Clear Interrupt Flag */
            valid = TRUE;
          }
    #else
          if(HAL_KEY_SW_6_PXIFG&HAL_KEY_SW_6_BIT)
          {
            HAL_KEY_SW_6_PXIFG = ~(HAL_KEY_SW_6_BIT); /*Clear Interrupt Flag */
            valid = TRUE;
          }
          if(HAL_KEY_SW_7_PXIFG&HAL_KEY_SW_7_BIT) 
          { 
               HAL_KEY_SW_7_PXIFG = ~(HAL_KEY_SW_7_BIT); /*Clear Interrupt Flag*/
            valid = TRUE;
          }
    #endif
      //ev_queue_event(EV_KEY_1_PRESS);//this section is removed by tony 20160617
      if (valid)
      {
        osal_start_timerEx (Hal_TaskID, HAL_KEY_EVENT, HAL_KEY_DEBOUNCE_VALUE);//25ms
      }
    }
    

    hal_drivers.c中关于HAL_KEY_EVENT任务的处理:

      if (events & HAL_KEY_EVENT)
      {
        #if (defined HAL_KEY) && (HAL_KEY == TRUE)
        /* Check for keys */
        HalKeyPoll();
        /* if interrupt disabled, do next polling */
        #if 1
        if (!Hal_KeyIntEnable)
        {
            // if(lcd_sleep_flag == 1)
            {
               osal_start_timerEx( Hal_TaskID, HAL_KEY_EVENT, 200);
            }       
        }
        #endif
        #endif
        return events ^ HAL_KEY_EVENT;
      }
    

    hal_key.c

    void HalKeyPoll (void)
    {
      uint8 keys = 0;
      uint8 notify = 0;
    #if defined (CC2540_MINIDK)
      if (!(HAL_KEY_SW_1_PORT & HAL_KEY_SW_1_BIT))    /* Key is active low */
      {
        keys |= HAL_KEY_SW_1;
      }
      if (!(HAL_KEY_SW_2_PORT & HAL_KEY_SW_2_BIT))    /* Key is active low */
      {
        keys |= HAL_KEY_SW_2;
      }
    #else
      if(!(HAL_KEY_SW_6_PORT & HAL_KEY_SW_6_BIT)){
         keys |= HAL_KEY_1;
      }
      if(!(HAL_KEY_SW_7_PORT&HAL_KEY_SW_7_BIT)){
         keys |= HAL_KEY_2;
      } 
      //keys = read_adc_key_value();
    #endif
      /* If interrupts are not enabled, previous key status and current key status
       * are compared to find out if a key has changed status.
       */ 
      if (!Hal_KeyIntEnable)
      {
         if (keys == halKeySavedKeys){    
           /* Exit - since no keys have changed */
           return;
         }else{
           notify = 1;
         }
      }
      else
      {
         /* Key interrupt handled here */
         if (keys){
           notify = 1;
         }
      }
    
      /* Store the current keys for comparation next time */
      halKeySavedKeys = keys;
    
      /* Invoke Callback if new keys were depressed */
      if (notify && (pHalKeyProcessFunction))
      {
        (pHalKeyProcessFunction) (keys, HAL_KEY_STATE_NORMAL);
      }
    }
    
    展开全文
  • CC2530 CC2540_CC2541的几个常用寄存器说明,中文说明
  • TIcc2541封装

    2015-12-28 20:47:27
    TIcc2541封装库,包括原理图的PCB
  • CC2541蓝牙温度计

    2018-08-01 23:18:05
    CC2541开发的蓝牙温度计代码,OSAL系统,有说明 。
  • CC2541 元件库

    2016-10-20 14:05:28
    TI CC2541芯片,含官方原理图、PCB封装,可以直接导入到Altium Desingner 直接画原理图和生成PCB图
  • CC2541Keyfob开发板资料

    2014-10-30 15:20:43
    CC2541开发资料 keyfob开发板资料 CC2541datasheet
  • cc2541透传demo

    2018-07-01 18:35:59
    cc2541透传demo,用于实现ble连接手机通过串口与电脑串口进行通信

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,169
精华内容 467
关键字:

cc2541