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

2023-05-16

在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.


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • popen使用方法及场景

    1 popen的应用场景 popen应用于执行shell命令 xff0c 并读取此命令的返值 xff0c 或者与执行的命令进行交互 2 popen的实现 popen 函数通过创建一个管道 xff0c 调用fork 产生一个子进程 xff0c
  • sscanf函数使用详解

    一 描述 sscanf通常被用来解析并转换字符串 xff0c 其格式定义灵活多变 xff0c 可以实现很强大的字符串解析功能 sscanf的原型 include lt stdio h gt int sscanf const char str
  • Linux通过系统函数设置系统时间

    一 描述 通过settimeofday 函数来设置系统时间 xff0c 这个函数设置的精度可以精确到微秒 include lt time h gt int settimeofday const struct timeval tv const
  • 用Eclipse完成C语言编程的几个简单步骤

    Eclipse是一款被广泛应用的开发工具 xff0c 最初它是为编写Java程序而设计的 xff0c 但由于它良好的架构并作为开源软件来发行 xff0c 有很多的公司和个人以它为基础开发了插件 xff0c 使得Eclipse有了越来越丰富的
  • 最适合程序员转行的10大职业

    三十而立 xff0c 源自 论语 为政 xff0c 说的是人到了30岁就应该去面对生活中的一切困难 而对于软件开发领域的从业者来说 xff0c 30岁 xff0c 却是一道槛 30岁以后 xff0c 适合程序员的工作到底是什么 专家和大家一
  • ROS2学习笔记(二)-- 多机通讯原理简介及配置方法

    在ROS1中由主节点 master 负责其它从节点的通信 xff0c 在同一局域网内通过设置主节点地址也可以实现多机通讯 xff0c 但是这种多机通讯网络存在一个严重的问题 xff0c 那就是所有从节点强依赖于主节点 xff0c 一旦运行主
  • C语言--“.”与“->”有什么区别?

    这虽然是个小问题 xff0c 但有时候很容易让人迷惑 xff0c 因为有的时候用混淆了 xff0c 程序编译不通过 下面说说我对它们的理解 一般情况下用 xff0c 只需要声明一个结构体 格式是 xff0c 结构体类型名 43 结构体名 然
  • C语言--函数指针的用法总结

    函数指针的由来 一个函数在编译时被分配一个入口地址 xff0c 这个入口地址就称为函数的指针 函数名代表函数的入口地址 xff0c 这一点和数组一样 我们可以用一个指针变量来存放这个入口地址 xff0c 然后通过该指针变量调用函数 如 xf
  • std::mutex 用法详解

    Mutex 又称互斥量 xff0c C 43 43 11中与 Mutex 相关的类 xff08 包括锁类型 xff09 和函数都声明在 lt mutex gt 头文件中 xff0c 所以如果你需要使用 std mutex xff0c 就必须
  • 成功解决TypeError: a bytes-like object is required, not 'str'

    解决问题 TypeError a bytes like object is required not 39 str 39 解决思路 问题出在python3 5和Python2 7在套接字返回值解码上有区别 python bytes和str两
  • 计算机网络笔记:字节序与比特序

    1 字节序 所谓字节序是指多字节数据在内存中的存储顺序 xff0c 通常有两种 xff1a 小端字节序 大端字节序 xff1b 小端字节序 xff1a 低位字节存放在低位地址 xff0c 高位字节存放在高位地址 xff1b 大端字节序 xf
  • 全网最全的Postman接口自动化测试!(菜鸟级攻略)

    一 背景 该篇文章针对已经掌握 Postman 基本用法的读者 xff0c 即对接口相关概念有一定了解 已经会使用 Postman 进行模拟请求的操作 当前环境 xff1a Window 7 64Postman 版本 xff08 免费版 x
  • 接口测试之Postman使用全指南(原来使用 Postman测试API接口如此简单)

    Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件 Postman背景介绍 用户在开发或者调试网络程序或者是网页B S模式的程序的时候是需要一些方法来跟踪网页请求的 xff0c 用户可以使用一些网络的监视工具比如
  • 常用Qt类的继承图

  • extern “C”{}的含义及解决的问题

    C 与C 43 43 程序连接问题 它们之间的连接问题主要是因为c c 43 43 编绎器对函数名译码的方式不能所引起的 xff0c 考虑下面两个函数 c int strlen char string c 43 43 int strlen
  • ROS2学习笔记(四)-- 用方向键控制小车行走

    简介 xff1a 在上一节的内容中 xff0c 我们通过ROS2的话题发布功能将小车实时视频信息发布了出来 xff0c 同时使用GUI工具进行查看 xff0c 在这一节内容中 xff0c 我们学习一下如何订阅话题并处理话题消息 xff0c
  • C++实现简单的HTTP客户端(阻塞方式)

    项目中用到的HTTP请求功能 xff0c 自己简单写了个客户端 xff0c 实现了POST方式 xff0c GET方式实现应该也很简单 xff08 空接口已经写好 xff1a 61 xff09 应该支持多线程 xff08 这个很重要 xff
  • WSAWaitForMultipleEvents()

    简述 xff1a 只要指定事件对象中的一个或全部处于有信号状态 xff0c 或者超时间隔到 xff0c 则返回 include lt winsock2 h gt DWORD WSAAPI WSAWaitForMultipleEvents D
  • WSAEnumNetworkEvents()

    WSAEnumNetworkEvents 简述 xff1a 检测所指定的套接口上网络事件的发生 include lt winsock2 h gt int WSAAPI WSAEnumNetworkEvents SOCKET s WSAEVE
  • WSASend()

    WSASend 简述 xff1a 在一个已连接的套接口上发送数据 include lt winsock2 h gt int WSAAPI WSASend SOCKET s LPWSABUF lpBuffers DWORD dwBufferC

随机推荐

  • 临界区

    本文假定您熟悉 Win32 C 43 43 和多线程处理 下载本文的代码 xff1a CriticalSections exe 415KB 摘要 临界区是一种防止多个线程同时执行一个特定代码节的机制 xff0c 这一主题并没有引起太多关注
  • glBegin()用法小结

    glBegin 用法小结 1 在glBegin 和glEnd 之间可调用的函数 函数 函数意义 glVertex 设置顶点坐标 glColor 设置当前颜色 glIndex 设置当前颜色表 glNormal 设置法向坐标 glEvalCoo
  • C++中的显式构造函数

    以两个C 43 43 的小例子来说明怎样通过使用显式构造函数来防止隐式转换 有如下一个简单的复数类 xff1a class ClxComplex public ClxComplex double dReal 61 0 0 double dI
  • 类中的static关键字

    面向对象的static关键字 xff08 类中的static关键字 xff09 1 静态数据成员 在类内数据成员的声明前加上关键字static xff0c 该数据成员就是类内的静态数据成员 先举一个静态数据成员的例子 可以看出 xff0c
  • VS2005 常用快捷键

    2007 04 10 15 32 VS2005 常用快捷键 仁者无敌 2006 08 02 20 20 16 Shift 43 Alt 43 Enter 切换全屏编辑 Ctrl 43 B T Ctrl 43 K K 切换书签开关 Ctrl
  • const

    面向对象是C 43 43 的重要特性 但是c 43 43 在c的基础上新增加的几点优化也是很耀眼的 就const直接可以取代c中的 define 以下几点很重要 学不好后果也也很严重 const 1 限定符声明变量只能被读 const in
  • ROS2学习笔记(五)-- ROS2命令行操作常用指令总结(一)

    简介 xff1a 在前面的章节中 xff0c 我们先简单学习了ROS2的话题发布和订阅 xff0c 两种操作都是通过python代码实现的 xff0c 而在实际应用过程中 xff0c 我们会经常用到命令行操作来辅助调试 xff0c 更进一步
  • Ubuntu16.04配置Carla第三方egg库

    背景 CARLA软件是英特尔公司主导的 xff0c 基于虚幻4游戏引擎 xff0c 用于自动驾驶仿真的一款开源仿真软件 xff0c 该软件可以模拟激光雷达 xff0c 摄像头等等自动驾驶中常用的传感器的行为以及获取传感器数据 xff0c 从
  • 串口通信校验方式(even,odd,space,mark)

    无校验 xff08 no parity xff09 奇校验 xff08 odd parity xff09 xff1a 如果字符数据位中 34 1 34 的数目是偶数 xff0c 校验位为 34 1 34 xff0c 如果 34 1 34 的
  • 更改Ubuntu默认python版本的两种方法

    更改Ubuntu默认python版本的两种方法 没找到原文地址 xff0c 作者写的很实用的方法 xff0c 赞一个 当你安装 Debian Linux 时 xff0c 安装过程有可能同时为你提供多个可用的 Python 版本 xff0c
  • Franka+Realsense D435i Ubuntu 20.04-easyHandeye 手眼标定

    使用Panda 43 realsense D435i 43 easyhandeye 43 ROS neotic 全流程记录 安装环节 安装ros安装libfranka安装moveit panda moveit config 安装 visp安
  • CMake教程Step2(添加库)

    CMake官方文档 参考官方cmake3 24教程翻译 https cmake org cmake help v3 24 guide tutorial index html https gitlab kitware com cmake cm
  • ROS rplidar_ros package使用相关说明

    rplidar ros wiki http wiki ros org rplidar ros SDK详解 xff0c 参考blog xff1a https blog csdn net qq 16775293 article details
  • wireshark能抓到数据,调试工具却收不到数据问题

    网上查找原因 xff0c 有各种说法 xff0c 其中有说关闭防火墙的 xff0c 抱着试一试的心态 xff0c 结果成功了 wireshark有数据 xff1a 关闭防火墙 xff1a NetAssist收到数据 xff1a
  • RTKLIB之RTKRCV

    1 options file option file can be saved from rtknavi exe modify the options file to fit for ubuntu system remember to ch
  • 连接跟踪子系统之AF_INET协议族钩子函数

    如笔记连接跟踪子系统之AF INET初始化所述 xff0c 为了支持连接跟踪子系统 xff0c AF INET协议族在4个HOOK点共注册了8个钩子函数 xff0c 每个HOOK点有两个 这些钩子函数可分为入口 xff08 PRE ROUT
  • UML建模详解(9)—Rose将C++代码自动生成UML类图详解

    一 类图 nbsp class diagram nbsp 即 c 中的 class 聚合 nbsp Aggregation nbsp 即我们c 中的引用 表现为 class 头文件中的一个或多个指针成员 组合 nbsp Compositio
  • ROS2学习笔记(十)-- ROS2 launch启动文件

    简介 xff1a 接触过ROS1的同学对launch肯定不陌生 xff0c 在ROS1中 xff0c 我们常用launch实现node和master同时启动 多节点同时启动配置等功能 xff0c ROS2中的launch也是用于多节点启动
  • C++vector的使用总结及常用vector操作

    一 C vector类为内置数组提供了一种替代表示 与string类一样 vector 类是随标准 C 引入的标准库的一部分 使用时需包含头文件 include lt vector gt 二 C vector类有两种使用方式 第一种 STL
  • cc2640 基于官方从机修改的通过手机实现蓝牙点灯例程

    在TI官方从机例程中的simpleBLEPeripheral c进行代码修改 添加引脚驱动头文件 xff1a include lt ti drivers pin PINCC26XX h gt PIN driver 添加全局变量 xff1a