【BLE】CC2541之新手常见问题集

本篇博文最后修改时间:2017年05月22日,19:53。

一、简介

本文集合了香瓜整理的CC2541的新手常见问题,不断更新

二、版权声明

1)作者:甜甜的大香瓜

2)声明:喝水不忘挖井人,转载请注明出处。

3)纠错/业务合作:897503845@qq.com

4)香瓜BLE之CC2541群:127442605

5)本文出处:原创连载资料《简单粗暴学蓝牙4.0(CC2541篇)》

6)完整开源资料下载地址(电脑端打开):

opengua.taobao.com

7)香瓜CC2541开发板套件购买:

opengua.taobao.com

三、新手问题集

********************准备阶段问题集*******************

1.2.0、做蓝牙4.0开发需要购买哪些设备?

答:

购买链接:

https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-16963296341.20.4bd9530f74gtWx&id=568345353562

1、产品介绍

1)开发板(必备)

板载 LED、按键、蜂鸣器、串口等外设,用于学习蓝牙通信与控制。

2)仿真器/下载器(必备)

可连接开发板与电脑,将电脑的编译文件下载进开发板里。也可在线仿真实时看代码运行情

况。

3)OLED显示屏(选购)

可以插在开发板上,主要用来显示当前连接或断开等状态信息。

4)USB Dongle抓包工具(选购)

几乎每个蓝牙工程师人手一个。有线通信用的是示波器抓取波形看信号,而蓝牙通信则用

usb dongle 在空中抓取广播包、通信包。相比于昂贵的示波器,USB Dongle 相当便宜。

注意以下几点:

①USB Dongle里可选择两种常用固件之一:抓包(配套电脑软件 packet sniffer,作为主从

机之外的第三方来抓取主从机通信数据)、btool(配套电脑软件 btool,可将 USB Dongle作

为电脑端的蓝牙主机,并能查看到收发指令)。香瓜店铺默认下载的是抓包固件。

②它的核心芯片是蓝牙 4.0 的 CC2540,所以它能抓取蓝牙 4.0。

③更换固件需要 CC254x的仿真器 CC Debugger 来更换。(btool功能不常用,一般情况可不必更换固件)

5)传感器套件(选购)

内含:声音传感器、MPU6050、DHT11、继电器、RGB 灯、人体传感器。

这几个常用传感器,让你进一步学习如何用 CC2640R2F 控制外设。

2、针对不同 开发目的的推荐套餐

1)手机与 CC254X开发板的通信

开发板(必备)+仿真器(必备)+OLED(选购)+USB Dongle(选购)+传感器套件(选

购)

2)两块 CC254X开发板之间的通信

2*开发板(必备)+1*仿真器(必备)+2*OLED(强烈推荐)+USB Dongle(选购)+传感

器套件(选购)

1.2.1、新手入门,有什么学习资源吗?

答:

1)香瓜CC254X开发板购买地址

淘宝店铺:opengua.taobao.com

2)开发资源(必装软件+书籍)

opengua.taobao.com

3)学习博客

①甜甜的大香瓜(已停更博客)甜甜的大香瓜-CSDN博客

②红-萝卜:红-萝-卜-CSDN博客

③ziye334:LOFTER(乐乎) - 让兴趣,更有趣

4)TI官网

①CC2541相关资料界面:

CC2541 数据表、产品信息和支持 | 德州仪器 TI.com.cn

②蓝牙技术支持版块:

蓝牙论坛 - Bluetooth - E2E™ 设计支持

5)好文推荐

①《BLE sniffer guide》:http://processors.wiki.ti.com/index.php/BLE_sniffer_guide

②《如何测量BLE的功耗》:

如何测量BLE的功耗(点击率最高的应用报告之一) - 蓝牙论坛 - Bluetooth - E2E™ 设计支持

③《关于CC2530存储器映射的讨论》:

关于CC2530存储器映射的讨论-CSDN博客

④《CC2540/CC2541进入PM3深度休眠的条件及其休眠机制的剖析》:

CC2540/CC2541进入PM3深度休眠的条件及其休眠机制的剖析_cc2541深度休眠后重启-CSDN博客

⑤《BLE 包结构及传输速率》:

http://blog.csdn.net/mov2012/article/details/16368441#userconsent#

⑥《CC2541 128bit UUID 官方教程有错修改方法》:

http://blog.csdn.net/a13306058739/article/details/50402767?locationNum=8&fps=1#userconsent#

1.2.2、新手入门,如何学习较快?

答:

所谓“磨刀不误砍柴工”,该看的书要看,书不在多,看完任何一本都可入门。

该跑的例程要跑,多自己想办法解决问题,仅靠问别人来学习,那是像驴一样被鞭策前进。

香瓜提供一种学习方法:

1)阅读《简单粗暴学蓝牙4.0(CC2541篇)》、《低功耗蓝牙开发权威指南》、TI官方资料、《Core_v4.0》、《蓝牙4.0BLE开发完全手册》。

2)把香瓜开发板的初级到高级的例程全部跑完。

3)技术群、论坛中多交流,不局限于提问,多帮助他人。

4)将技术知识写成博客分享给大家,让大家一起阅读、测试你的博客,一起完善你的博客。

5)做项目。

1.2.3、怎么样的手机才支持蓝牙4.0、蓝牙5?

答:

1、蓝牙4.0

软硬件方面同时达到以下要求:

1)软件上:安卓4.3版本以上。

2)硬件上:支持蓝牙4.0。

注:苹果手机iphone4S开始支持蓝牙4.0。

2、蓝牙5

个别最新手机已支持硬件蓝牙5,如:小米6。

软件是否支持蓝牙5暂不明了。

1.2.4、什么是蓝牙的主机、从机?

答:类似于电台广播(从机)与收音机(主机),一个电台广播能让多个收音机接收到。

同样的,蓝牙从机也可以发出一定范围内(一般是几十米以内)的蓝牙广播信号,此时周边的蓝牙主机都能接收到蓝牙从机的广播信息。

除此之外,蓝牙主机还能与蓝牙从机一对一连接,连接之后可进行加密或不加密的数据通信。

1.2.5、蓝牙能否一主多从、一从多主?

答:

可以分时地实现一主多从,即表面上看起来是一个主机能控制3个从机,实际上是快速地依次连接、通信、断开3个从机。

可以不连接地实现一从多主,也就是从机广播、主机接收广播信息。

1.2.6、蓝牙主从机通信的方式有几种?

答:两种,一种非连接方式、一种连接方式。

非连接方式(单向传输):从机广播数据,主机接收。

连接方式(双向传输):主机连接从机,主从机可互传数据。

1.2.7、蓝牙信号是否会受到干扰?

答:是的,因为蓝牙信号、WIFI信号等都是在2.4GHz,所以周边如果有大量蓝牙设备、WIFI设备,或者有墙壁等阻碍物,蓝牙信号都会受到影响。

1.2.8、如何调整蓝牙通信的距离?

答:

1)软件调整:可通过软件来设置蓝牙的发射功率,发射功率越大,距离越远。

2)硬件调整:

①天线的选择(粗调):天线有pcb天线、陶瓷天线、外置天线等,简单来说体积越大、价格越高的天线信号越好。

②(微调):天线电路的阻抗匹配要调到最优。

1.2.9、是不是蓝牙通信距离越远越好?

答:不是。要根据你的项目来选择合适的距离。

例如防丢器最适合周边10米以内,如果蓝牙距离过远,可能钱包丢了100米防丢器才在手机上报警。

1.2.10、BLE跟蓝牙什么关系?

答:简单地说,蓝牙(Bluetooth)分为两种,大数据量的蓝牙和小数据量的蓝牙。

1)大数据量的蓝牙,叫传统蓝牙或者经典蓝牙(Classic Bluetooth),它牺牲功耗换取数据量。如:蓝牙耳机、蓝牙音箱。

2)小数据量的蓝牙,就是BLE(Bluetooth Low Energy),它具有低至uA级别的功耗优势,常用在简单的控制领域。如蓝牙灯、蓝牙窗帘、蓝牙小车、蓝牙门锁。

经典蓝牙和BLE是不能相互通信的,因为是两种不同的协议。

1.2.11、手机中的蓝牙是经典蓝牙还是BLE?

答:手机中的蓝牙芯片一般是双模芯片,即支持经典蓝牙,也支持BLE。

一般手机自带的蓝牙操作界面,都仅支持经典蓝牙。(不同手机厂商会做不同的定制,不是绝对)。

所以香瓜建议大家在开发BLE产品过程中,不要使用手机自带的蓝牙操作界面,直接使用支持BLE的app。

1.2.12、手机BLE能作从机广播吗?

答:

可以。但市面上大部分BLE app都是作主机的,你需要安装作从机的BLE app才能广播数据。

1)苹果手机:使用lightblue。(既支持主机、又支持从机)

2)安卓手机:无,需要找app工程师定制。

1.2.13、主机、从机、客户端、服务器是什么关系?

答:

主机与从机是蓝牙底层的概念,主动发起连接的设备都是主机,被连接的设备则是从机。例如:手机(主机)主动连接蓝牙灯(从机)。

客户端与服务器是上层(GATT层)的概念,客户端往往需要从服务器获取数据。例如:手机(客户端)获取蓝牙灯(服务器)的亮灭情况。

一般来说,主机都是客户端,从机都是服务器。

但也有些例外,例如蓝牙手表(从机、客户端)和手机(主机、服务器),当手机来电时,手机会主动把电话号码“通知”给手表。

之所以要明确四者的关系,是因为我们在开发过程中,要明晰主机才有发起连接的权利、服务器才有使用notify函数的权利,所以不要惊讶于为什么主机可以使用notify函数,因为此时主机是服务器罢了。

1.2.14、手机端有什么蓝牙app好用吗?

答:

见《简单粗暴学蓝牙4.0(CC2541篇)》的“第三章 软件的安装及使用”章节。

1.2.15、BLE的认证是怎么回事?

答:

如果产品上有蓝牙logo,则要BQB认证。

如果要出货到美国,要FCC认证。

如果要出货到欧洲,要CE认证。

*******************开发阶段问题集********************

1.3.1、为何有时固件端更新了代码,手机APP端却看不到现象?

答:

手机可能缓存了之前固件的数据(在更新过固件之后,都需要清除手机端的缓存!!!),因此要清除缓存,清除缓存的方法如下:

方法一:关闭app、关闭蓝牙总开关、打开蓝牙总开关、打开app。

方法二:手机重启。

1.3.2、蓝牙广播停止、蓝牙通信断开的原因是什么?

答:

蓝牙通信跟你打电话是一样的:假设你跟朋友打电话,互相说话的间隔是3秒一句话,超过30秒无人接听就会挂断。

此时如果你突然离开1分钟去上厕所,给你打电话的人必然会挂断电话。

因为你的上厕所时间超过了对方愿意等待的时间。

反过来看你的蓝牙通信会断开,说明你的事件处理时间已经超过了“连接间隔+超时时间”。

你要么缩小事件处理时间,要么增大“连接间隔+超时时间”

1.3.3、为什么有些工程会异常(打开时软件崩溃退出、编译没错而仿真却出错、使用别人的工程出错)?

答:

很可能是移动过了文件夹导致了IAR查找不到了文件路径。

要养成好的习惯,拿到别人的工程,要做以下两步:

1)将整个工程文件夹放到“无中文、简短”的路径下,如“E:\”。

2)打开工程后rebuild all。

1.3.4、为什么我的串口收发不正常、串口乱码??

答:

阅读《简单粗暴学蓝牙4.0(CC2541篇)》的《CC2541之串口收发》。

1.3.5、为什么有些函数中有些变量前加void?

答:

这是防止编译警告。去掉这一句,IAR会警告这个id没被使用。

1.3.6、为什么看到别人代码中使用notify时,用到的特征值句柄为0x002E、0x0035,哪里来的?

答:

数值为多少对我们程序员来说并不重要,我们只需要能获取到这个值就可以了。

阅读《简单粗暴学蓝牙4.0(CC2541篇)》的《CC2541之notify》

1.3.7、为什么看到别人代码中使用GATT_Notification(0, &pReport, FALSE)的连接句柄是0?

答:

数值为多少对我们程序员来说并不重要,我们只需要能获取到这个值就可以了。

阅读《简单粗暴学蓝牙4.0(CC2541篇)》的《CC2541之notify》

1.3.8、CC2541的工程能下到CC2540中、CC2540的工程能下到CC2541中吗?

答:

不能。

但是同一个文件夹下的CC2541和CC2540的代码是通用的。假设已经开发好了CC2541工程,此时想做一个CC2540工程,只需要:

1)打开同文件夹下的CC2540工程。

2)将CC2540工程中的IAR配置设置得与CC2541工程完全一致。(比如预编译宏一致、添加头文件路径一致、添加的驱动一致)。

1.3.9、为什么我的packet sniffer抓不到通信数据包?

答:蓝牙4.0BLE cc2540 usb-dongle的 SmartRF Packet Sniffer 抓取数据方法 【原创,多图】_cc2540 usb dongle-CSDN博客

1.3.10、CC2541通信时一个数据包最多能传几个字节?

答:

20个应用数据+几个底层数据。

1.3.11、CC2540和CC2541有什么区别?

答:

见《简单粗暴学蓝牙4.0(CC2541篇)》的《CC2541之与CC2540的区别》。

1.3.12、从机怎么给主机发送数据?

答:

见《简单粗暴学蓝牙4.0(CC2541篇)》的《CC2541之notify》。

1.3.13、为什么我的按键按了没反应?

答:

见《简单粗暴学蓝牙4.0(CC2541篇)》的《CC2541之按键》。

1.3.14、我用HalLedSet函数开led,为什么有时会闪烁?

答:

如果开启了低功耗,在主轮询期间会间歇性进入低功耗,在HalSleep.c中的halSleep函数内会短暂关闭led。(调用的是“HalLedEnterSleep();”)

解决闪烁问题的两种方法:

1)不使用低功耗。

2)在iar设置中先“HAL_LED=FALSE”,然后直接对寄存器操作。

1.3.15、为什么手机自带的蓝牙软件扫描不到CC2541的广播?

答:

支持蓝牙4.0的手机的蓝牙大多数都是双模的,也就是支持CC2541这类的BLE蓝牙,还支持蓝牙耳机这种大数据类型的传统蓝牙。

而自带的蓝牙软件就是可搜索蓝牙耳机,而不能搜索到BLE,因为他们协议不一样。

如果想搜索到CC2541,需要下载一个支持BLE的APP来搜索。

1.3.16、为什么2541flash只有256K,却能下载大于256K的hex?

答:

因为实际下载进2541的flash里的是bin文件。hex可以理解为“包头数据+bin+校验数据”(详情自行百度),总之hex比bin大,hex大小约为bin的2倍多一些。

1.3.17、如何查看工程的bin大小?

答:

1)生成bin文件后查看:生成bin的方法请参考论坛上方的香瓜博客,《CC2541之OAD》。

2)在IAR的编译信息中查看:

点击iar上方的Tools——Options进行下图的设置,然后rebuild all。就可以看到代码中实际的flash使用情况。

1.3.18、CC2541是否能同时使用两个串口?

答:

可以,一个使用dma方式,一个使用isr方式。

1.3.19、在香瓜开发板上如何点亮oled?

答:

香瓜开发板的lcd与ti的oled不一样,所以需要拿香瓜开发板的oled驱动替换掉协议栈的oled驱动。

见《简单粗暴学蓝牙4.0(CC2541篇)》的《CC2541之oled》。

1.3.20、使用BTool软件时显示超时,是怎么回事?

答:

见《简单粗暴学蓝牙4.0(CC2541篇)》的《CC2541之BTool》。

1.3.21、进行修改了CC2541端的名称、修改了CC2541端的特征值等操作,为什么手机上显示的仍然是之前的显示数据?

答:

原因是app缓存了这些数据。在更新过CC2541的代码之后,都需要清除手机端的缓存!!!

常用几种清缓存的方法:

1)关闭app、关闭蓝牙总开关、打开蓝牙总开关、打开app。

2)手机重启。

1.3.22、CC2540、CC2541都能作为packet sniffer的抓包工具,进行抓包吗?

答:

CC2540可以,CC2541不可以。TI没提供2541的抓包hex。

1.3.23、CC2541被手机连接上以后,是否还能广播数据让其他设备搜到?

答:

连接状态下可再广播,但需要IAR设置中修改宏成PLUS_BROADCASTER。

阅读《简单粗暴学蓝牙4.0(CC2541篇)》的《CC2541之连接时广播》。

1.3.24、32M、32K外部晶振能不能省略?

答:

1)需要用到蓝牙功能时,32M外部晶振不能省略。

2)需要用到低功耗时,32K外部晶振不能省略。

阅读《简单粗暴学蓝牙4.0(CC2541篇)》的《CC2541之32.768kHZ外部晶振》。

1.3.25、CC2541的OSAL中使用的定时器是哪个定时器?

答:

timer2。

1.3.26、协议栈中的SimpleBLECentral例程,如何修改才能搜索周围的ble设备(如手环等)?

答:

SimpleBLECentral例程在扫描时做了扫描过滤。

1)如果想把所有设备添加进来,把simpleBLEFindSvcUuid函数的使用注释掉即可。

2)如果想增加一个UUID的从机设备,添加:

else if(simpleBLEFindSvcUuid(……))//新的UUID

{

//增加设备

}

可阅读《简单粗暴学蓝牙4.0(CC2541篇)》的《CC2541之解析simpleBLECentralEventCB》加强理解。

1.3.27、CC2541的RF工作频率是多少?

答:

CC2540:RF frequency range 2402~2480MHz。

CC2541:RF frequency range 2379~2496MHz。

1.3.28、CC2541的adc采样位有几位?

答:

12bit,最高位为符号位,实际有效采样为11bit。

1.3.29、CC2541从机如何获取主机MAC地址?

答:

在simplebleperipheral.c中有:

uint8_t peerAddress[B_ADDR_LEN];

GAPRole_GetParameter(GAPROLE_CONN_BD_ADDR, peerAddress);

1.3.30、主机端接收灵敏度如何设置?

答:

1.3.31、ANCS是什么?

答:

苹果通知中心(Apple Notification Center Service, ANCS)。

1)CC2541是从机,IOS是主机且不需要app。

2)CC2541是客户端、IOS是服务器。

3)ANCS必须要绑定(不一定要密码)。

4)基本步骤如下:

①CC2541广播。

②IOS连接。

③绑定过程。

④CC2541扫描IOS的服务和特征值。

⑤CC2541打开IOS的notify开关。

⑥IOS有来电时,发送notify消息提醒包给CC2541。

⑦CC2541发送读取电话的指令给IOS。

⑧IOS返回电话数据。

1.3.32、CC2541从机的广播间隔拉长为3S,导致CC2541主机连接很慢,怎么解决?

答:

可以在CC2541主机端开启高速扫描:

TI的GAPCentralRole_EstablishLink连接函数的第一个参数,false改为ture。

1.3.33、simpleBLEcentral工程连接simpleBLEperipheral后,发现服务很慢,如何解决?

答:

工程在连接之后默认为延时1S才去发现服务,可以缩短这个时间。

1.3.34、如何知道一块CR1632(120mAh)在自己的设备上能用多久?

答:

1)使用示波器测试设备电流以及电流持续时间。

2)通过测得的数据,算出电流平均值。

例如:1秒1次RF通信、RF通信持续1ms,其中RF通信时电流有18ma,其他时间段为10uA。

那么电流平均值=1秒内总电流/1秒=(18000uA*0.001S+10uA*0.999S)/1S=28uA。

3)计算有效电池电量

例如:CC2541有效电压是2V以上,CR1632是额定电压3V,因此CR1632的120mAh对于CC2541都是有效电池电量。

4)计算使用时长=有效电池电量/电流平均值=120mAh/28uA=120000uAh/28uA=4285.7h=178.6天。

1.3.35、如果从机申请更新参数失败了,会执行什么操作?

答:

GAPRole_SendUpdateParam函数中的最后一个形参,即是更新参数失败后的执行操作。

它一共有3个选项(无动作、重发、断开连接):

#define GAPROLE_NO_ACTION                    0 // Take no action upon unsuccessful parameter updates 

#define GAPROLE_RESEND_PARAM_UPDATE          1 // Continue to resend request until successful update 

#define GAPROLE_TERMINATE_LINK               2 // Terminate link upon unsuccessful parameter updates 

1.3.36、为什么我用GAPRole_GetParameter(GAPROLE_CONN_ADDR,peerAddress)获取主机(手机)的mac地址后,每次重启后mac地址就变了?

答:

由于手机安全机制,不会以真实mac地址去连接蓝牙设备。但cc2541作为从机可从绑定信息中获取真实的mac地址,参考代码如下:

idx = gapBondMgrResolvePrivateAddr( pDevAddr );

if ( (idx < GAP_BONDINGS_MAX) && (pResolvedAddr) )

{

        VOID gapBondMgrGetPublicAddr( idx, pResolvedAddr );

}

break;

1.3.37、如何将多个hex合成一个hex?

答:

1)写多个 hex 进芯片里。

2)用flash programmer从芯片里读出1个hex。

此时这个hex就是合成好的的hex,方便用于需烧写多个hex的量产。

1.3.38、蓝牙从机设备生产时该如何测试?

答:

蓝牙从机设备内部增加测试指令,用于测试的手机使用测试app,不停地连接、发送测试指令、断开从机,收到测试指令的从机关闭广播一段时间。

1.3.39、packet sniffer如何过滤出某个设备的广播包信息?

答:

【BLE4.0】Packet sniffer 过滤广播MAC地址_蓝牙抓包 mac 地址过滤-CSDN博客

1.3.40、假设特征值6的数据长度是20,如何能让app发送少于20字节数据给CC2541?

答:

默认是只允许发指定字节的,可通过如下方法修改:

1.3.41、已有CC2541工程,如何在CC2540芯片中使用?

答:

CC2541工程是不能直接下载到CC2540芯片中的,但我们可以以CC2541工程做一个同样功能的CC2540工程。

如上图,在同一个文件夹下有CC2540和CC2541工程,并且这两个工程所用到的源文件全部都是一致的。

1、打开两个IAR,分别打开CC2541工程、CC2540工程

2、对比两个工程,在CC2540工程中添加CC2541中已添加的驱动文件

3、分别点开两个工程的option设置(快捷键alt+F7)

如上图,右键-options。

4、参考CC2541中的路径、预编译宏,在CC2540的option设置中修改,如下图

5、rebuild all工程,此时CC2540工程即与CC2541具备一样的功能(特殊的IIC和USB等硬件差异功能例外),可以直接下载进CC2540芯片中了。

1.3.42、如何用flash programmer下载代码?

答:

1、硬件连接:电脑-香瓜cc debugger下载器-香瓜CC254X开发板

2、打开flash programmer

3、

注意第二个红框显示当前连接的模块芯片为CC2541,第三个红框要选择要下载的CC2541代码(不能是CC2540代码)。

然后最后最下面那个红框是烧写,点击后显示OK即可。

1.3.43、低功耗怎么做?低功耗串口又怎么做?

答:

如上图所示,低功耗一共有3个档次,PM3是最低功耗档。一般我们所说的低功耗主要为PM2和PM3两个档。

可以简单理解为:

1)PM2为半睡眠模式,此模式下有广播、可连接。

2)PM3为全睡眠模式,此模式下无广播、不可连接。主要通过按键中断来唤醒(当然也可通过复位)。

注意几点:

1)如果你的设备需要低功耗,则需要32K外部晶振,否则由于内部32K的RC震荡电路的时钟不准确,会导致唤醒后的蓝牙连接会断开。

2)唤醒后会进行晶振切换,此过程需要时间。因此唤醒后不要马上来使用外设,可调用个定时器延时(具体要多久,可用示波器查看晶振切换时间,香瓜猜想是几十ms)后使用。

1、以TI提供的官方从机代码为例,介绍如何进入PM2和PM3

1)工程的宏定义里要有“POWER_SAVING”。

注:只要开启了这个低功耗宏,协议栈就会自动控制是否进入低功耗。此时由于只有定时器的周期事件,因此协议栈会在PM2,功耗大概几十ua~几百ua。

2)在PM2基础上,关闭定时器周期事件、关闭广播,即可进入PM3,功耗大概在小几十ua以内,理论在10ua左右。

2、低功耗串口的使用

CC2540 低功耗串口, POWER_SAVING 模式 下 串口 0 的使用 - 所长 - 博客园

1.3.44、IIC的两个引脚如何作为普通IO口使用?

答:

I2CWC |= (1<<7);  //引脚设置为GPIO功能

//I2CWC &= ~(1 << 1) ;  //SCL OUTPUT

//I2CWC |= (1 << 1) ;  //SCL INPUT

//I2CWC &= ~(1 << 0) ;  //SDAL OUTPUT

//I2CWC |= (1 << 0) ;  //SDA INPUT

//I2CIO &= ~(1 << 1) ;  //SCL 0

//I2CIO |= (1 << 1) ;  //SCL 1

//I2CIO &= ~(1 << 0) ;  //SDAL 0

//I2CIO |= (1 << 0) ;  //SDA 1

上述代码为香瓜的未测试代码,需读者自行测试。

具体需要配置为输入还是输出,可自行去掉注释符号。

注意这两个IO口没有中断功能。

1.3.45、串口波特率如何修改?

答:

1.3.46、如何使用串口1收发?

答:

添加宏定义:

HAL_UART_DMA=2

这样会映射到串口1的alt2引脚P16(TX)和P17(RX)上。

1.3.47、编译时提示警告信息“Warning[Pe1665]: concatenation with "=" in macro "HAL_CONFIG_IO_OUTPUT_PREP" does not create a valid token”?

答:

1、双击任意一条警告,跳转到警告的语句后,右键go to definition of。

2、删除下图中的两处“##”

备:这里的##是C语言宏定义的一种写法,它起连接的作用,即将##和传入的参数一一对应起来组合成一个新的关键字。

***************仿真器CC Debugger问题集*****************

1.4.1、下载线需要几根?如何连接?

答:

见《简单粗暴学蓝牙4.0(CC2541篇)》的《CC2541之CC Debugger》。

*****************开发工具问题集**********************

1.5.1、IAR版本与协议栈版本该如何选择?

答:

建议使用如下对应关系:

1)iar8.10.4可以使用1.3.2的协议栈

2)iar8.20.2可以使用1.3.2和1.4.0的协议栈

3)iar9.10可以使用1.4.1的协议栈

注:当高版本的iar(如9.10版本)使用低版本协议栈(如1.4.0版本),可作如下图的修改来达到编译通过。

1.5.2、为什么有时候IAR中设置不了断点?

答:

IAR断点最多设置3个。可以点击view-breakpoint,将已有的断点全部删除后,重新设置不超过3个的断点。

1.5.3、仿真状态下,为什么查看的变量值看不到?

答:

因为变量被优化了,只需关闭IAR优化后,再次仿真,即可通过watch窗口查看变量值。

1.5.4、为什么工程中有些是灰色的文件?

答:

IAR中的文件都可以选择“编译”或“不编译”。打叉的文件是不编译的,如果工程中需要编译它,可以点击该文件右键——Options——把Exclude form build的勾去除。

1.5.5、工程中的“CC2541DK-MINI Keyfob”是什么?

答:

iar允许在一个工程中自定义多个配置,用于同一套代码对不同板子的快速切换。

“CC2541DK-MINI Keyfob”就是TI公司的一块开发板对应的工程配置,我们通常会选择“CC2541”这个配置(推荐)。

1.5.6、IAR打开工程时出现“The project file’SimpleBLEPeripheral’is in an old format……”是怎么回事?

答:

这是你使用的iar版本,比目前打开的工程所使用的iar版本更高,选“是”即可。

*************香瓜CC254X开发板问题集***************

1.6.1、香瓜CC254X核心板的各个引脚是什么?

答:

GND

3.3V

核心板正面

RESET

P00

P22

P21

P01

P02

P20

P17

P03

P04

P16

P15

P05

P06

P14

P13

P07

P10

D+/SCL

D-/SDA

P11

P12

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

甜甜的大香瓜

谢谢你的支持^_^

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值