本文根据一周CC2541笔记汇总得来——

适合概览和知识快速索引——

全部链接:

中级教程-OSAL操作系统\OSAL操作系统-实验01 OSAL初探

【插入】SourceInsight-工程建立方法

中级教程-OSAL操作系统(OSAL系统解基本套路)

中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系统驱动层和应用层不一样~

中级教程-OSAL操作系统(ADC-光敏电阻)

OSAL操作系统-实验16 串口波特率扩展

OSAL操作系统-实验17 AT命令初步

OSAL操作系统-实验20 模拟IIC通信+硬件IIC(Mpu6050)

OSAL 操作系统-实验 23 PWM 输出(改变占空比)

OSAL 操作系统-实验 24 看门狗 WachDog

OSAL操作系统-实验25 SNV内部Flash数据读写

OSAL 操作系统-实验 29 系统睡眠等级研究

OSAL 操作系统-实验 31 从机广播功率修改

一、AT命令初步(17)

AT 命令式通过串口来通信的

串口一有数据就会调用回调函数,为了防止回调函数被频繁调用,采用(延时+数据长度控制,即:超出某一时间或者超出某一长度就调用 NPI_ReadTransport(buffer,numBytes); 读取一定数据)

第224行将串口收到的数据调用AT指令处理函数进行处理:

 // AT 命令处理 函数
bool simpleBLE_AT_CMD_Handle(uint8 * pBuffer, uint16 length)
{
bool ret = TRUE;
char strTemp[64]; // 1、测试
if((length == 4) && str_cmp(pBuffer, "AT\r\n", 4))//AT
{
sprintf(strTemp, "OK\r\n");
NPI_WriteTransport((uint8 * )strTemp, osal_strlen(strTemp));
}
// 2、设置LED1的亮灭
else if((length == 9) && str_cmp(pBuffer, "AT+LED", 6))
{
/*
Para: 0 ~ 1
AT+LED0\r\n: 关灯
AT+LED1\r\n: 开灯
Default: 0
*/
switch(pBuffer[6])
{
case '?':
sprintf(strTemp, "OK+Get:%d\r\n", g_LED1);
NPI_WriteTransport((uint8 * )strTemp, osal_strlen(strTemp));
break;
case '0':
g_LED1 = 0;
HalLedSet(HAL_LED_1, HAL_LED_MODE_OFF); // 关闭led1
sprintf(strTemp, "OK+Set0\r\n");
NPI_WriteTransport((uint8 * )strTemp, osal_strlen(strTemp));
break;
case '1':
g_LED1 = 1;
HalLedSet(HAL_LED_1, HAL_LED_MODE_ON); // 点亮led1
sprintf(strTemp, "OK+Set1\r\n");
NPI_WriteTransport((uint8 * )strTemp, osal_strlen(strTemp));
break;
default:
ret = FALSE;
break;
}
}
else
{
sprintf(strTemp, "ERROR\r\n");
NPI_WriteTransport((uint8 * )strTemp, osal_strlen(strTemp)); ret = FALSE;
} return ret;
}

258 行, AT\r\n 为测试命令,

  业界几乎所有的 AT 命令模块第一条 AT 命令都是这一条,用于测试模块连接是否正常。

 
264~288 行,我们编写了一个用于点灯的 AT 命令:
  AT+LED?\r\n: 查询灯的开关状态
  AT+LED0\r\n: 关灯
  AT+LED1\r\n: 开灯
 
总结:整体比较简单就是将串口数据创送给AT指令处理函数处理,串口数据接收采用一定技巧
 
 
二、模拟IIC通信+硬件IIC(Mpu6050)20

Cc2541 有硬件 iic 功能,但 cc2540 并没有硬件 iic 功能

 
Description:    This file contains code that is common to all sensor drivers.
在 Hal_sensor.c  ti 已经实现了 cc2541 得硬件 iic 驱动,我们使用就行。
 
simpleBLETest.c中,编写的对 mpu6050 的访问函数。
 
 
 
以上两个函数,实现的是对mpu6050 的寄存器的读写操作
 
 
 
以上两个文件,实现的是gpio 模拟 iic 的时序,并封装模拟 iic 的读写函数。
 
在Iic.h中我们定义了 P1.5 与 P1.6 作为 iic的SCL与SDA:
 
 
总结:IIC和MPU6050都封装的很好。协议栈是个好东西,方便移植!!!是个宝库!

 
上面是IIC的模拟实现,其硬件实现使用起来更简单:

在simpleBLETest.c直接将MPU6050的设备地址传送给I2C初始化函数就可以了,然后就直接调用读写函数进行读写!

未完~关注我的cc2541分类

4、CC2541芯片中级教程-OSAL操作系统(简单AT指令实现+IIC软件和硬件实现驱动MPU6050)的更多相关文章

  1. 2、CC2541芯片中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系统驱动层和应用层不一样~

    本文根据一周CC2541笔记汇总得来—— 适合概览和知识快速索引—— 全部链接: 中级教程-OSAL操作系统\OSAL操作系统-实验01 OSAL初探 [插入]SourceInsight-工程建立方法 ...

  2. 5、CC2541芯片中级教程-OSAL操作系统(PWM+看门狗)

    本文根据一周CC2541笔记汇总得来—— 适合概览和知识快速索引—— 全部链接: 中级教程-OSAL操作系统\OSAL操作系统-实验01 OSAL初探 [插入]SourceInsight-工程建立方法 ...

  3. 3、CC2541芯片中级教程-OSAL操作系统(ADC光敏电阻和修改串口波特率)

    本文根据一周CC2541笔记汇总得来—— 适合概览和知识快速索引—— 全部链接: 中级教程-OSAL操作系统\OSAL操作系统-实验01 OSAL初探 [插入]SourceInsight-工程建立方法 ...

  4. 1、CC2541蓝牙4.0芯片中级教程——基于OSAL操作系统的运行流程了解+定时器和串口例程了解

    本文根据一周CC2541笔记汇总得来—— 适合概览和知识快速索引—— 全部链接: 中级教程-OSAL操作系统\OSAL操作系统-实验01 OSAL初探 [插入]SourceInsight-工程建立方法 ...

  5. STM32 OSAL操作系统抽象层的移植

    文章目录 什么是 OSAL? 源码安装 Linux 上OSAL的移植 STM32上OSAL的移植 关键点 测试代码 结语 附件 什么是 OSAL? 今天同学忽然问我有没有搞过OSAL,忽然间一头雾水, ...

  6. 最适合入门的Laravel中级教程(二)用户认证

    之前的初级教程主要是学习简单的增删改查: 接着的中级教程的目标是在初级教程的基础上能写出更复杂更健壮的程序: 我们先来学习 laravel 的用户认证功能: 在现代网站中基本都有用户系统: 而我们每开 ...

  7. 最适合入门的Laravel中级教程(一)

    Laravel 是一个全栈框架: 我们使用 Laravel 开发业务常见有 3 个方向: 前端页面和后端逻辑混合的应用 主要是面向对 SEO 有需求的项目: 比如说新闻资讯博客文章等: 一般在控制器中 ...

  8. PS教程:20个新鲜出炉的 Photoshop 中级教程

    Photoshop 实例教程是提高 Photoshop 技能的最佳学习途径.今天,我向大家分享最新20个 Photoshop 进阶教程,提高你的图片处理技巧,制作时尚的效果.这些教程可以帮助把你的想法 ...

  9. CC2541连接BTool教程

    一.简介 本篇介绍如何基于Smart RF(主芯片CC2541).Smart RF(主芯片CC2540).Usb Dongle,来使用软件BTool. 本篇暂时只介绍如何连接,不介绍如何使用BTool ...

随机推荐

  1. 在网页程序或Java程序中调用接口实现短信猫收发短信的解决方案

    方案特点: 在网页程序或Java程序中调用接口实现短信猫收发短信的解决方案,简化软件开发流程,减少各应用系统相同模块的重复开发工作,提高系统稳定性和可靠性. 基于HTTP协议的开发接口 使用特点在网页 ...

  2. Notepad++列编辑模式

    先按住alt,选中列,再上下左右拖动编辑即可:再次点击左键即可取消.

  3. the fifth class

      1.实际比背景长,怎么做到的? 2个父级一个做头背景一个做尾背景 2.2层,每次自带背景上下是覆盖关系,如何做到 2层?,子浮动 3.标签 4.border可覆盖:margin-bottom 为负 ...

  4. UI Automation Test

    UI Automation test is based on the windows API. U can find the UI Automation MSDN file from http://m ...

  5. JavaScript对UNIX时间戳的转换

    <script type="text/javascript"> var timestamp = '1479886513'; var d = new Date(times ...

  6. Win7 64位命令行编译cuda及设置Windows显卡响应时间

    在开始菜单中找到Visual Studio 2013 >> Visual Studio Tools 选择86或64版本的VC命令提示符环境,我用的 VS2013 x86 Native To ...

  7. 动画总结(UIView的动画)

    Main.storyboard ViewController.m // //  ViewController.m //  8A08.动画总结 // //  Created by huan on 16/ ...

  8. 黑马程序员_Java基础:反射机制(Reflection)总结

    ------- android培训.java培训.期待与您交流! ---------- 反射在java中有非常重大的意义,它是一种动态的相关机制,可以于运行时加载.探知.使用编译期间完全未知的clas ...

  9. python基础整理笔记(六)

    一. 关于hashlib模块的一些注意点 hashlib模块用于加密相关的操作,代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512, MD ...

  10. 数据库SQLite

    一.数据库 在项目开发中,通常都需要对数据进行离线缓存的处理,如新闻数据的离线缓存等.离线缓存一般都是把数据保存到项目的沙盒中.有以下几种方式: 归档:NSKeyedArchiver 偏好设置:NSU ...