1 使用simple Link的库,同时提供了丰富的源码。只是只提供了IAR的代码,所以需要先安装和使用IAR for 8051.
IAR的产品相对和KEIl相比更新周期比较长,因此遇到的兼容问题少一些,不过也有一个问题,就是厂家器件库的更新慢一些。keil用PackInstaller。不过因为CC2541是一个比较生命周期长的产品,所以用老一些版本的IAR同样可以。就开发的角度,使用正版会获得更多的支持,因此开发阶段还是要支持正版的。毕竟TI已经提供了免费的开发栈了,这个是花费更多时间,而且会有助于通过蓝牙认证的。如果,希望了解工程结构,那么用试用版也是完全可以的,30天的使用版就可以的。
导入工程项目空间
其中有很多对应的范例,选择keyfob demo,这里就列出了全部的代码。
2 源码分析
2.1 蓝牙基础库
根据蓝牙4.1的协议,固化了PROFILES,以及对应的HAL硬件层的定义。其中加速度传感器的定义如下:
在前面的评测中,加速度的service写入1则启动x轴的传感器数据读取,写入0则关闭,
2.2 开发板的资源访问
开发板使用的传感器硬件是BMA250,还有BUZZ,都在APP部分中应用,
如buzz的硬件定义是GPIO的定义
void buzzerInit(void) { #if defined ( CC2540_MINIDK )// Buzzer connected at P1_6// We will use Timer 3 Channel 0 at alternate location 2// Channel 0 will toggle on compare with 0 and counter will// count in up/down mode to T3CC0.PERCFG |= 0x20;// Timer 3 Alternate location 2P1DIR |= 0x40;// P1_6 = outputP1SEL |= 0x40;// Peripheral function on P1_6T3CTL &= ~0x10;// Stop timer 3 (if it was running)T3CTL |= 0x04;// Clear timer 3T3CTL &= ~0x08;// Disable Timer 3 overflow interruptsT3CTL |= 0x03;// Timer 3 mode = 3 - Up/DownT3CCTL0 &= ~0x40;// Disable channel 0 interruptsT3CCTL0 |= 0x04;// Ch0 mode = compareT3CCTL0 |= 0x10;// Ch0 output compare mode = toggle on compare #endif }
2.3 用户程序
主程序是启动了TI的实时操作系统,这样避免了常见的8051中的完全用loop轮询的访问方式,只要启动相应的任务就可以快速定义项目。
对应于蓝牙协议栈等,都可以隔离,直接访问API,自定义对应的UUID和services等。
int main(void) {/* Initialize hardware */HAL_BOARD_INIT();// Initialize board I/OInitBoard( OB_COLD );/* Initialze the HAL driver */HalDriverInit();/* Initialize NV system */osal_snv_init();/* Initialize LL *//* Initialize the operating system */osal_init_system();/* Enable interrupts */HAL_ENABLE_INTERRUPTS();// Final board initializationInitBoard( OB_READY );#if defined ( POWER_SAVING )osal_pwrmgr_device( PWRMGR_BATTERY );#endif/* Start OSAL */osal_start_system(); // No Return from herereturn 0; }
启动时钟后进入节能模式。
对应于线程的设定和主要的参数以及device Name等都是在keyfobdemo.c中定义,这个也是嵌入用户代码的位置。
对于理解蓝牙协议的运用方式,可以直接快速开发,进一步的了解可以仔细阅读提供的软件开发导则,里面有很多API和详细的参数说明。
3 在完成后,可以直接编译,就可以生成可执行文件HEX。
这次build中止,主要是因为在编译的过程中,代码超过了测试版的4k限制。使用30天测试版就可以顺利完成编译的过程。在output目录下生成hex文件
user4544030:
程序跑有OSAL系统?
user6155536:
谢谢楼主的分析,学习了
lospring:
谢谢分享,项目创建的流程很详细,希望楼主多多分享,最好有具体的项目成品
user5324490:
谢谢分享,代码解析给的挺详细的。
user5324490:
谢谢分享,代码解析给的挺详细的。期待更新
user6155536:
谢谢分享,项目创建流程很清晰
user5367733:
测试版原来还有4K限制,谢谢楼主分享!
user3883604:
楼主分享的流程很详细,期待更多代码测评!