RISC-V技术论坛
直播中

性感的·

9年用户 28经验值
擅长:可编程逻辑 测量仪表 嵌入式技术 模拟技术 EMC/EMI设计 光电显示 存储技术 接口/总线/驱动 控制/MCU
私信 关注
[经验]

【泰凌微TLSR9系列开发套件试用体验】TLSR9 蓝牙BLE参数设置

  泰凌微的代码结构和Nrf52832的芯片代码差异性还是比较大的,很多代码define go to 你会发现是库,看不到底层代码了。经过一番学习后,总结几点共大家借鉴吧。对初学蓝牙的朋友还是有些帮助的,如果大神,就请直接划走吧。
BLE的设置大多都在app_att.c和app_att.h里面。
比如更改名字 在这个数组里更改 static const u8 my_devName[] = {'e','S','a','m','p','l','e'};
后面有函数会调用my_devName,这个数组
更改最大最小广播时间等参数my_periConnParameters 。同理,相比Nrf52832的代码来说,这并不是宏定义出来,大多数参数都是用结构体,或者数组来设置。Search,注意不要用Ctrl+F,使用Keil的朋友习惯了这个,Ctrl+F是只能在文件搜索的,无法在工程内搜索。
    基本这些蓝牙设置的参数,更改UUID UI,服务的添加,属性更改的东西都可以找到
b6cfc5702105a7b70bd83e61f926f10.png
快速go to define 的快捷键是Ctrl+鼠标左键。
下面来讲一下app的设置
  1. /********************************************************************************************************
  2. * @file        app_config.h
  3. *
  4. * @brief        This is the header file for BLE SDK
  5. *
  6. * @author        BLE GROUP
  7. * @date        2020.06
  8. *
  9. * [url=home.php?mod=space&uid=1930556]@par[/url]     Copyright (c) 2020, Telink Semiconductor (Shanghai) Co., Ltd. ("TELINK")
  10. *          All rights reserved.
  11. *
  12. *          Redistribution and use in source and binary forms, with or without
  13. *          modification, are permitted provided that the following conditions are met:
  14. *
  15. *              1. Redistributions of source code must retain the above copyright
  16. *              notice, this list of conditions and the following disclaimer.
  17. *
  18. *              2. Unless for usage inside a TELINK integrated circuit, redistributions
  19. *              in binary form must reproduce the above copyright notice, this list of
  20. *              conditions and the following disclaimer in the documentation and/or other
  21. *              materials provided with the distribution.
  22. *
  23. *              3. Neither the name of TELINK, nor the names of its contributors may be
  24. *              used to endorse or promote products derived from this software without
  25. *              specific prior written permission.
  26. *
  27. *              4. This software, with or without modification, must only be used with a
  28. *              TELINK integrated circuit. All other usages are subject to written permission
  29. *              from TELINK and different commercial license may apply.
  30. *
  31. *              5. Licensee shall be solely responsible for any claim to the extent arising out of or
  32. *              relating to such deletion(s), modification(s) or alteration(s).
  33. *
  34. *          THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
  35. *          ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  36. *          WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  37. *          DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER BE LIABLE FOR ANY
  38. *          DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  39. *          (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  40. *          LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  41. *          ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  42. *          (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  43. *          SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  44. *
  45. *******************************************************************************************************/
  46. #pragma once



  47. /////////////////// FEATURE SELECT /////////////////////////////////
  48. /**
  49. *  [url=home.php?mod=space&uid=2666770]@Brief[/url]  Feature select in bLE Sample project
  50. */
  51. #define BLE_APP_PM_ENABLE                                        1
  52. #define PM_DEEPSLEEP_RETENTION_ENABLE                1
  53. #define TEST_CONN_CURRENT_ENABLE            0 //test connection current, disable UI to have a pure power
  54. #define APP_SECURITY_ENABLE                              1
  55. #define APP_DIRECT_ADV_ENABLE                                1
  56. #define BLE_OTA_SERVER_ENABLE                                1
  57. #define BATT_CHECK_ENABLE                                        0



  58. /**
  59. *  @brief  flash firmware check
  60. */
  61. #define FLASH_FIRMWARE_CHECK_ENABLE                        0


  62. /**
  63. *  @brief  firmware signature check
  64. */
  65. #define FIRMWARES_SIGNATURE_ENABLE                        0



  66. /**
  67. *  @brief  DEBUG  Configuration
  68. */
  69. #define UART_PRINT_DEBUG_ENABLE                          0
  70. #define DEBUG_GPIO_ENABLE                                        0
  71. #define JTAG_DEBUG_DISABLE                                        0



  72. /**
  73. *  @brief  UI Configuration
  74. */
  75. #define UI_LED_ENABLE                                           1
  76. #define UI_BUTTON_ENABLE                                        0
  77. #if (TEST_CONN_CURRENT_ENABLE) //test current, disable keyboard
  78.                 #define        UI_KEYBOARD_ENABLE                        0
  79. #else
  80.                 #define        UI_KEYBOARD_ENABLE                        1
  81. #endif



  82. //SAMPLE SELECT EVK BOARD
  83. #if (UI_KEYBOARD_ENABLE)   // if test pure power, kyeScan GPIO setting all disabled
  84.                 //---------------  KeyMatrix PB2/PB3/PB4/PB5 -----------------------------
  85.                 #define        MATRIX_ROW_PULL                                        PM_PIN_PULLDOWN_100K
  86.                 #define        MATRIX_COL_PULL                                        PM_PIN_PULLUP_10K

  87.                         #define        KB_LINE_HIGH_VALID                                0   //dirve pin output 0 when keyscan, scanpin read 0 is valid



  88.                         #define                        CR_VOL_UP                                0xf0  ////
  89.                         #define                        CR_VOL_DN                                0xf1


  90.                         /**
  91.                          *  @brief  Normal keyboard map
  92.                          */
  93.                         #define                KB_MAP_NORMAL        {        {CR_VOL_DN,                VK_1},         
  94.                                                                                         {CR_VOL_UP,                VK_2}, }



  95.                         //////////////////// KEY CONFIG (EVK board) ///////////////////////////
  96.                         #define  KB_DRIVE_PINS  {GPIO_PC2, GPIO_PC0}
  97.                         #define  KB_SCAN_PINS   {GPIO_PC3, GPIO_PC1}

  98.                         //drive pin as gpio
  99.                         #define        PC2_FUNC                                AS_GPIO
  100.                         #define        PC0_FUNC                                AS_GPIO

  101.                         //drive pin need 100K pulldown
  102.                         #define        PULL_WAKEUP_SRC_PC2                MATRIX_ROW_PULL
  103.                         #define        PULL_WAKEUP_SRC_PC0                MATRIX_ROW_PULL

  104.                         //drive pin open input to read gpio wakeup level
  105.                         #define PC2_INPUT_ENABLE                1
  106.                         #define PC0_INPUT_ENABLE                1

  107.                         //scan pin as gpio
  108.                         #define        PC3_FUNC                                AS_GPIO
  109.                         #define        PC1_FUNC                                AS_GPIO

  110.                         //scan  pin need 10K pullup
  111.                         #define        PULL_WAKEUP_SRC_PC3                MATRIX_COL_PULL
  112.                         #define        PULL_WAKEUP_SRC_PC1                MATRIX_COL_PULL

  113.                 //scan pin open input to read gpio level
  114.                 #define PC3_INPUT_ENABLE                1
  115.                 #define PC1_INPUT_ENABLE                1

  116.         #if (UI_LED_ENABLE)
  117.                 /**
  118.                  *  @brief  Definition gpio for led
  119.                  */
  120.                 #define        GPIO_LED_WHITE                        GPIO_PB6
  121.                 #define        GPIO_LED_GREEN                        GPIO_PB5
  122.                 #define        GPIO_LED_BLUE                        GPIO_PB4
  123.                 #define GPIO_LED_RED                        GPIO_PB7
  124.                 #define LED_ON_LEVAL                         1                 //gpio output high voltage to turn on led

  125.                 #define PB7_FUNC                                AS_GPIO
  126.                 #define PB6_FUNC                                AS_GPIO
  127.                 #define PB5_FUNC                                AS_GPIO
  128.                 #define PB4_FUNC                                AS_GPIO

  129.                 #define        PB7_OUTPUT_ENABLE                1
  130.                 #define        PB6_OUTPUT_ENABLE                1
  131.                 #define PB5_OUTPUT_ENABLE                1
  132.                 #define        PB4_OUTPUT_ENABLE                1
  133.         #endif


  134. #elif (UI_BUTTON_ENABLE)
  135.                 //SAMPLE SELECT DONGLE BOARD
  136.                 #undef  PM_DEEPSLEEP_RETENTION_ENABLE
  137.                 #define PM_DEEPSLEEP_RETENTION_ENABLE                                0    //dongle demo no need deepSleepRetention
  138.                 //---------------  Button -------------------------------
  139.                 /**
  140.                  *  @brief  Definition gpio for button detection
  141.                  */
  142.                 #define        SW1_GPIO                                GPIO_PB2
  143.                 #define        SW2_GPIO                                GPIO_PB3
  144.                 #define PB2_FUNC                                AS_GPIO
  145.                 #define PB3_FUNC                                AS_GPIO
  146.                 #define PB2_INPUT_ENABLE                1
  147.                 #define PB3_INPUT_ENABLE                1
  148.                 #define PULL_WAKEUP_SRC_PB2     PM_PIN_PULLUP_10K
  149.                 #define PULL_WAKEUP_SRC_PB3     PM_PIN_PULLUP_10K

  150.         #if (UI_LED_ENABLE)
  151.                 /**
  152.                  *  @brief  Definition gpio for led
  153.                  */
  154.                 //---------------  LED ----------------------------------
  155.                 #define        GPIO_LED_RED                        GPIO_PB4
  156.                 #define        GPIO_LED_WHITE                        GPIO_PB1
  157.                 #define        GPIO_LED_GREEN                        GPIO_PB0
  158.                 #define        GPIO_LED_BLUE                        GPIO_PB7
  159.                 #define        GPIO_LED_YELLOW                        GPIO_PB5

  160.                 #define PB4_FUNC                                AS_GPIO
  161.                 #define PB1_FUNC                                AS_GPIO
  162.                 #define PB0_FUNC                                AS_GPIO
  163.                 #define PB7_FUNC                                AS_GPIO
  164.                 #define PB5_FUNC                                AS_GPIO

  165.                 #define        PB4_OUTPUT_ENABLE                1
  166.                 #define        PB1_OUTPUT_ENABLE                1
  167.                 #define PB0_OUTPUT_ENABLE                1
  168.                 #define        PB7_OUTPUT_ENABLE                1
  169.                 #define        PB5_OUTPUT_ENABLE                1

  170.                         #define LED_ON_LEVAL                         1                 //gpio output high voltage to turn on led
  171.         #endif
  172. #endif




  173. /////////////////// DEEP SAVE FLG //////////////////////////////////
  174. #define USED_DEEP_ANA_REG                   DEEP_ANA_REG1 //u8,can save 8 bit info when deep
  175. #define        LOW_BATT_FLG                                            BIT(0) //if 1: low battery
  176. #define CONN_DEEP_FLG                            BIT(1) //if 1: conn deep, 0: adv deep
  177. #define IR_MODE_DEEP_FLG                                         BIT(2) //if 1: IR mode, 0: BLE mode
  178. #define LOW_BATT_SUSPEND_FLG                                BIT(3) //if 1 : low battery, < 1.8v



  179. #if (BATT_CHECK_ENABLE)
  180. #define VBAT_CHANNEL_EN                                                0

  181. #if VBAT_CHANNEL_EN
  182.         /**                The battery voltage sample range is 1.8~3.5V    **/
  183. #else
  184.         /**         if the battery voltage > 3.6V, should take some external voltage divider        **/
  185.         #define GPIO_BAT_DETECT                                GPIO_PB0
  186.         #define PB0_FUNC                                                AS_GPIO
  187.         #define PB0_INPUT_ENABLE                                0
  188.         #define PB0_OUTPUT_ENABLE                                0
  189.         #define PB0_DATA_OUT                                        0
  190.         #define ADC_INPUT_PIN_CHN                                ADC_GPIO_PB0
  191. #endif
  192. #endif




  193. #if (JTAG_DEBUG_DISABLE)//2-wire jtag mode

  194. #define PE6_FUNC                        AS_GPIO
  195. #define PE7_FUNC                        AS_GPIO

  196. #define PE6_INPUT_ENABLE        0
  197. #define PE7_INPUT_ENABLE        0

  198. #endif



  199. /////////////////////////////////////// PRINT DEBUG INFO ///////////////////////////////////////
  200. #if (UART_PRINT_DEBUG_ENABLE)
  201.         //the baud rate should not bigger than 115200 when MCU clock is 16M)
  202.         //the baud rate should not bigger than 1000000 when MCU clock is 24M)
  203.         #define PRINT_BAUD_RATE                             115200
  204.         #define DEBUG_INFO_TX_PIN                           GPIO_PC6
  205.         #define PULL_WAKEUP_SRC_PC6                         PM_PIN_PULLUP_10K
  206.         #define PC6_OUTPUT_ENABLE                                 1
  207.         #define PC6_DATA_OUT                             1 //must
  208. #endif


  209. /**
  210. *  @brief  Definition for gpio debug
  211. */
  212. #if(DEBUG_GPIO_ENABLE)


  213.         #define GPIO_CHN0                                                        GPIO_PE1
  214.         #define GPIO_CHN1                                                        GPIO_PE2
  215.         #define GPIO_CHN2                                                        GPIO_PA0
  216.     #define GPIO_CHN3                                                        GPIO_PA4
  217.         #define GPIO_CHN4                                                        GPIO_PA3
  218.         #define GPIO_CHN5                                                        GPIO_PB0
  219.         #define GPIO_CHN6                                                        GPIO_PB2
  220.         #define GPIO_CHN7                                                        GPIO_PE0

  221.         #define GPIO_CHN8                                                        GPIO_PA2
  222.         #define GPIO_CHN9                                                        GPIO_PA1
  223.         #define GPIO_CHN10                                                        GPIO_PB1
  224.         #define GPIO_CHN11                                                        GPIO_PB3


  225.         #define GPIO_CHN12                                                        GPIO_PC7
  226.         #define GPIO_CHN13                                                        GPIO_PC6
  227.         #define GPIO_CHN14                                                        GPIO_PC5
  228.         #define GPIO_CHN15                                                        GPIO_PC4


  229.         #define PE1_OUTPUT_ENABLE                                        1
  230.         #define PE2_OUTPUT_ENABLE                                        1
  231.         #define PA0_OUTPUT_ENABLE                                        1
  232.         #define PA4_OUTPUT_ENABLE                                        1
  233.         #define PA3_OUTPUT_ENABLE                                        1
  234.         #define PB0_OUTPUT_ENABLE                                        1
  235.         #define PB2_OUTPUT_ENABLE                                        1
  236.         #define PE0_OUTPUT_ENABLE                                        1

  237.         #define PA2_OUTPUT_ENABLE                                        1
  238.         #define PA1_OUTPUT_ENABLE                                        1
  239.         #define PB1_OUTPUT_ENABLE                                        1
  240.         #define PB3_OUTPUT_ENABLE                                        1
  241.         #define PC7_OUTPUT_ENABLE                                        1
  242.         #define PC6_OUTPUT_ENABLE                                        1
  243.         #define PC5_OUTPUT_ENABLE                                        1
  244.         #define PC4_OUTPUT_ENABLE                                        1


  245.         #define DBG_CHN0_LOW                gpio_write(GPIO_CHN0, 0)
  246.         #define DBG_CHN0_HIGH                gpio_write(GPIO_CHN0, 1)
  247.         #define DBG_CHN0_TOGGLE                gpio_toggle(GPIO_CHN0)
  248.         #define DBG_CHN1_LOW                gpio_write(GPIO_CHN1, 0)
  249.         #define DBG_CHN1_HIGH                gpio_write(GPIO_CHN1, 1)
  250.         #define DBG_CHN1_TOGGLE                gpio_toggle(GPIO_CHN1)
  251.         #define DBG_CHN2_LOW                gpio_write(GPIO_CHN2, 0)
  252.         #define DBG_CHN2_HIGH                gpio_write(GPIO_CHN2, 1)
  253.         #define DBG_CHN2_TOGGLE                gpio_toggle(GPIO_CHN2)
  254.         #define DBG_CHN3_LOW                gpio_write(GPIO_CHN3, 0)
  255.         #define DBG_CHN3_HIGH                gpio_write(GPIO_CHN3, 1)
  256.         #define DBG_CHN3_TOGGLE                gpio_toggle(GPIO_CHN3)
  257.         #define DBG_CHN4_LOW                gpio_write(GPIO_CHN4, 0)
  258.         #define DBG_CHN4_HIGH                gpio_write(GPIO_CHN4, 1)
  259.         #define DBG_CHN4_TOGGLE                gpio_toggle(GPIO_CHN4)
  260.         #define DBG_CHN5_LOW                gpio_write(GPIO_CHN5, 0)
  261.         #define DBG_CHN5_HIGH                gpio_write(GPIO_CHN5, 1)
  262.         #define DBG_CHN5_TOGGLE                gpio_toggle(GPIO_CHN5)
  263.         #define DBG_CHN6_LOW                gpio_write(GPIO_CHN6, 0)
  264.         #define DBG_CHN6_HIGH                gpio_write(GPIO_CHN6, 1)
  265.         #define DBG_CHN6_TOGGLE                gpio_toggle(GPIO_CHN6)
  266.         #define DBG_CHN7_LOW                gpio_write(GPIO_CHN7, 0)
  267.         #define DBG_CHN7_HIGH                gpio_write(GPIO_CHN7, 1)
  268.         #define DBG_CHN7_TOGGLE                gpio_toggle(GPIO_CHN7)
  269.         #define DBG_CHN8_LOW                gpio_write(GPIO_CHN8, 0)
  270.         #define DBG_CHN8_HIGH                gpio_write(GPIO_CHN8, 1)
  271.         #define DBG_CHN8_TOGGLE                gpio_toggle(GPIO_CHN8)
  272.         #define DBG_CHN9_LOW                gpio_write(GPIO_CHN9, 0)
  273.         #define DBG_CHN9_HIGH                gpio_write(GPIO_CHN9, 1)
  274.         #define DBG_CHN9_TOGGLE                gpio_toggle(GPIO_CHN9)
  275.         #define DBG_CHN10_LOW                gpio_write(GPIO_CHN10, 0)
  276.         #define DBG_CHN10_HIGH                gpio_write(GPIO_CHN10, 1)
  277.         #define DBG_CHN10_TOGGLE        gpio_toggle(GPIO_CHN10)
  278.         #define DBG_CHN11_LOW                gpio_write(GPIO_CHN11, 0)
  279.         #define DBG_CHN11_HIGH                gpio_write(GPIO_CHN11, 1)
  280.         #define DBG_CHN11_TOGGLE        gpio_toggle(GPIO_CHN11)
  281.         #define DBG_CHN12_LOW                gpio_write(GPIO_CHN12, 0)
  282.         #define DBG_CHN12_HIGH                gpio_write(GPIO_CHN12, 1)
  283.         #define DBG_CHN12_TOGGLE        gpio_toggle(GPIO_CHN12)
  284.         #define DBG_CHN13_LOW                gpio_write(GPIO_CHN13, 0)
  285.         #define DBG_CHN13_HIGH                gpio_write(GPIO_CHN13, 1)
  286.         #define DBG_CHN13_TOGGLE        gpio_toggle(GPIO_CHN13)
  287.         #define DBG_CHN14_LOW                gpio_write(GPIO_CHN14, 0)
  288.         #define DBG_CHN14_HIGH                gpio_write(GPIO_CHN14, 1)
  289.         #define DBG_CHN14_TOGGLE        gpio_toggle(GPIO_CHN14)
  290.         #define DBG_CHN15_LOW                gpio_write(GPIO_CHN15, 0)
  291.         #define DBG_CHN15_HIGH                gpio_write(GPIO_CHN15, 1)
  292.         #define DBG_CHN15_TOGGLE        gpio_toggle(GPIO_CHN15)
  293. #else
  294.         #define DBG_CHN0_LOW
  295.         #define DBG_CHN0_HIGH
  296.         #define DBG_CHN0_TOGGLE
  297.         #define DBG_CHN1_LOW
  298.         #define DBG_CHN1_HIGH
  299.         #define DBG_CHN1_TOGGLE
  300.         #define DBG_CHN2_LOW
  301.         #define DBG_CHN2_HIGH
  302.         #define DBG_CHN2_TOGGLE
  303.         #define DBG_CHN3_LOW
  304.         #define DBG_CHN3_HIGH
  305.         #define DBG_CHN3_TOGGLE
  306.         #define DBG_CHN4_LOW
  307.         #define DBG_CHN4_HIGH
  308.         #define DBG_CHN4_TOGGLE
  309.         #define DBG_CHN5_LOW
  310.         #define DBG_CHN5_HIGH
  311.         #define DBG_CHN5_TOGGLE
  312.         #define DBG_CHN6_LOW
  313.         #define DBG_CHN6_HIGH
  314.         #define DBG_CHN6_TOGGLE
  315.         #define DBG_CHN7_LOW
  316.         #define DBG_CHN7_HIGH
  317.         #define DBG_CHN7_TOGGLE
  318.         #define DBG_CHN8_LOW
  319.         #define DBG_CHN8_HIGH
  320.         #define DBG_CHN8_TOGGLE
  321.         #define DBG_CHN9_LOW
  322.         #define DBG_CHN9_HIGH
  323.         #define DBG_CHN9_TOGGLE
  324.         #define DBG_CHN10_LOW
  325.         #define DBG_CHN10_HIGH
  326.         #define DBG_CHN10_TOGGLE
  327.         #define DBG_CHN11_LOW
  328.         #define DBG_CHN11_HIGH
  329.         #define DBG_CHN11_TOGGLE
  330.         #define DBG_CHN12_LOW
  331.         #define DBG_CHN12_HIGH
  332.         #define DBG_CHN12_TOGGLE
  333.         #define DBG_CHN13_LOW
  334.         #define DBG_CHN13_HIGH
  335.         #define DBG_CHN13_TOGGLE
  336.         #define DBG_CHN14_LOW
  337.         #define DBG_CHN14_HIGH
  338.         #define DBG_CHN14_TOGGLE
  339.         #define DBG_CHN15_LOW
  340.         #define DBG_CHN15_HIGH
  341.         #define DBG_CHN15_TOGGLE
  342. #endif  //end of DEBUG_GPIO_ENABLE



  343. #include "vendor/common/default_config.h"
基础的官网的demo基本在这里,可以通过宏定义在屏蔽或开启编译,具体的事件是如何调度的,通过仿真也是非常容易理解了。到了这里,基本使用这款芯片完成底层驱动都没问题的。希望Telink的名气越来越大,以后更多产品都用到Telink的芯片吧。为国产芯片点赞。

更多回帖

发帖
×
20
完善资料,
赚取积分