底层通信用了昨天写好的iic,今天结合官方资料成功读出所有指定寄存器的数据附上源码

include.h主要包括了一些stm32 IO控制的宏定义,具体参考正点原子所有例程中都有的sys.h头文件

inc

#ifndef __PX4FLOW_H
#define __PX4FLOW_H
#include "include.h"
//器件地址
#define PX4FLOW_ADDR  0x42
//寄存器宏定义,如果是2字节一个数据地址指的低字节位,高字节是低字节地址后一位,组合起来就是完整的数据  解释摘自官网

//不积分的数据
//记录总的创建的iic帧数
#define FRAME_COUNT_SUM     0x00                    //uint16_t counts created I2C frames [frames]
//X轴最新一帧所有像素移动和*10
#define PIXEL_FLOW_X_SUM    0x02                    //int16_t latest x flow measurement in pixels*10 [pixels]
//Y轴最新一帧所有像素移动和*10
#define PIXEL_FLOW_Y_SUM    0x04                    //int16_t latest y flow measurement in pixels*10 [pixels]
//X轴速度
#define FLOW_COMP_M_X       0x06                    //int16_t x velocity*1000 [meters/sec]
//Y轴速度
#define FLOW_COMP_M_Y       0x08                    //int16_t y velocity*1000 [meters/sec]
//光流图像质量
#define QUAL                0x0a                    //int16_t Optical flow quality / confidence [0: bad, 255: maximum quality]
//X轴陀螺仪速度
#define GYRO_X_RATE         0x0c                    //int16_t latest gyro x rate [rad/sec]
//Y轴陀螺仪速度
#define GYRO_Y_RATE         0x0e                    //int16_t latest gyro y rate [rad/sec]
//Z轴陀螺仪速度
#define GYRO_Z_RATE         0x10                    //int16_t latest gyro z rate [rad/sec]
//陀螺仪数据范围
#define GYRO_RANGE          0x12                    //uint8_t gyro range [0 .. 7] equals [50 deg/sec .. 2000 deg/sec]
//超声波数据上次更新时间到现在的时间间隔
#define SONAR_TIMESTAMP1     0x13                    //uint8_t time since last sonar update [milliseconds]
//地面距离  正值:已知距离,  负值:未知距离
#define GROUND_DISTANCE1    0x14                    //int16_t Ground distance in meters*1000 [meters]. Positive value: distance known.
                                                            //Negative value: Unknown distance
//积分后的数据地址
//上次读取数据后数据更新了多少次
#define FRAME_COUNT_SINCE_LAST_READOUT  0x16        //uint16_t number of flow measurements since last I2C readout [frames]
//自上次读取iic数据后 X轴速度积分后所得值
#define PIXEL_FLOW_X_INTEGRAL           0x18        //int16_t  accumulated flow in radians*10000 around x axis since last I2C readout [rad*10000]
//自上次读取iic数据后 Y轴速度积分后所得值
#define PIXEL_FLOW_Y_INTEGRAL           0x1a        //int16_t  accumulated flow in radians*10000 around y axis since last I2C readout [rad*10000]
//自上次读取iic数据后,X轴角速度积分值
#define GYRO_X_RATE_INTEGRAL            0x1c        //int16_t  accumulated gyro x rates in radians*10000 since last I2C readout [rad*10000]
//自上次读取iic数据后,Y轴角速度积分值
#define GYRO_Y_RATE_INTEGRAL            0x1e        //int16_t  accumulated gyro y rates in radians*10000 since last I2C readout [rad*10000]
//自上次读取iic数据后,Z轴角速度积分值
#define GYRO_Z_RATE_INTEGRAL            0x20        //int16_t  accumulated gyro z rates in radians*10000 since last I2C readout [rad*10000]
//上次和这次读取iic数据的时间间隔
#define INTEGRATION_TIMESPAN            0x22        //uint32_t accumulation timespan in microseconds since last I2C readout [microseconds]
//超声波数据上次更新时间到现在的时间间隔
#define SONAR_TIMESTAMP2                 0x26        //uint32_t time since last sonar update [microseconds]
//地面距离
#define GROUND_DISTANCE2                0x2a        //int16_t  Ground distance in meters*1000 [meters*1000]
//陀螺仪温度
#define GYRO_TEMPERATURE                0x2c        //int16_t  Temperature * 100 in centi-degrees Celsius [degcelsius*100]
//光流积分数据质量
#define QUALITY                         0x2e        //uint8_t averaged quality of accumulated flow values [0:bad quality;255: max quality]

//读指定寄存器指定字节数数据
u8 flow_read_data(u8 addr,u8 reg,u8 len,u8 *buf);
//读8位无符号数据
uint8_t     readu8_date(u8 addr,u8 reg);
//读16位无符号数据
uint16_t    readu16_date(u8 addr,u8 reg);
//读16位有符号数据
int16_t     reads16_date(u8 addr,u8 reg);
//读32位无符号数据
uint32_t    readu32_date(u8 addr,u8 reg);

#endif

src

#include "px4flow.h"
#include "include.h"
#include "myiic.h"

//读指定寄存器指定字节数数据
u8 flow_read_data(u8 addr,u8 reg,u8 len,u8 *buf)
{
    IIC_Start();
    IIC_Send_Byte((addr<<)|);//发送器件地址+写命令
    if(IIC_Wait_Ack())    //等待应答
    {
        IIC_Stop();
        ;
    }
    IIC_Send_Byte(reg);    //写寄存器地址
    IIC_Wait_Ack();        //等待应答
    IIC_Start();
    IIC_Send_Byte((addr<<)|);//发送器件地址+读命令
    IIC_Wait_Ack();        //等待应答
    while(len)
    {
        )*buf=IIC_Read_Byte();//读数据,发送nACK
        );        //读数据,发送ACK
        len--;
        buf++;
    }
    IIC_Stop();    //产生一个停止条件
    ;
}
//读8位无符号数据
uint8_t     readu8_date(u8 addr,u8 reg)
{
    u8 buff[];
    uint8_t date;
    flow_read_data(addr,reg,,buff);
    date = buff[];
    return date;
}
//读16位无符号数据
uint16_t    readu16_date(u8 addr,u8 reg)
{
    u8 buff[];
    uint16_t date;
    flow_read_data(addr,reg,,buff);
    date = buff[] <<  | buff[];
    return date;

}
//读16位有符号数据
int16_t     reads16_date(u8 addr,u8 reg)
{
    u8 buff[];
    int16_t date;
    flow_read_data(addr,reg,,buff);
    date = buff[] <<  | buff[];
    return date;
}
//读32位无符号数据
uint32_t    readu32_date(u8 addr,u8 reg)
{
    u8 buff[];
    int16_t date;
    flow_read_data(addr,reg,,buff);
    date = buff[] <<  | buff[] <<  | buff[] <<  | buff[];
    return date;
}

px4flow通过iic读取具体寄存器数据程序的更多相关文章

  1. stm32软件模拟IIC读取PX4FLOW光流传感器数据

    这段时间在做全国光电设计大赛,用到了px4的px4flow光流传感器,用软件模拟iic读取数据不定期会导致px4flow死机,查了资料和光流的源码,发现这个光流用了stm32的硬件iic,所以对软件模 ...

  2. JAVA TcpServer端使用Scanner读取不到数据的解决办法

    在使用JAVA进行Socket通信时,在Server端使用Scanner的nextLine()方法读取数据时,一直读取不到数据是因为Scanner是一个扫描器,它扫描数据都是去内存中一块缓冲区中进行扫 ...

  3. 我写的一个ExcelHelper通用类,可用于读取或生成数据

    读取或生成EXCEL数据的方法有很多,一般常见的有: 1.通过OFFICE EXCEL组件,优点:读取与生成EXCEL文件方便,缺点:服务器上必须安装OFFICE软件,且进程无法及时释放 2.通过第三 ...

  4. VC6.0读取Excel文件数据

    啰嗦一下:本人所在公司从事碟式斯特林太阳能发电设备的研发与销售.单台设备图如下: 工作原理如下:整个设备大致可分为五个部分, 1.服务器,负责气象.发电等数据存取,电.网连接等处理: 2.气象站,通过 ...

  5. Android读取JSON格式数据

    Android读取JSON格式数据 1. 何为JSON? JSON,全称为JavaScript Object Notation,意为JavaScript对象表示法. JSON 是轻量级的文本数据交换格 ...

  6. Jlink使用技巧之读取STM32内部的程序

    前言 上一篇Jlink系列文章介绍了如何使用J-Flash来下载Hex或Bin文件到单片机,具体可参考Jlink使用技巧之单独下载HEX文件到单片机,本篇文章介绍,如何使用JFlash来读取单片机的程 ...

  7. 20170711 通过阿里云与国家气象局合作的api读取历史辐照数据

    一.概述     今天收到阿里云推送的试用通知,就迫不及待的申请了一个试用key,开始试用.     初步使用之后发现基本可用,至于最后是否适合商用还要看他的收费情况.           接口的使用 ...

  8. 【转载】 java利用snmp4j包来读取snmp协议数据(Manager端)

    https://www.cnblogs.com/xdp-gacl/p/4187089.html http://doc.okbase.net/yuanfy008/archive/265663.html ...

  9. Windows store app[Part 1]:读取U盘数据

    Windows 8系统下开发App程序,对于.NET程序员来说,需要重新熟悉下类库. 关于WinRT,引用一张网上传的很多的结构图: 图1 针对App的开发,App工作在系统划定的安全沙箱内,所以通过 ...

随机推荐

  1. 使用Docker Image跑Gitlab

    下载gitlab docker镜像 docker pull gitlab/gitlab-ce:latest 启动gitlab服务 sudo docker run --detach \ --hostna ...

  2. 大毕设-MATLAB-滤波器的实现

    在工程实际中遇到的信号经常伴有噪声,为了消除或减弱噪声,提取有用信号,必须进行滤波,能实现滤波功能的系统称为滤波器.严格地讲,滤波器可以定义为对已知的激励提供规定响应的系统,响应的要求可以在时域或频域 ...

  3. oracle 字符串

    oracle获取字符串长度函数length()和hengthb() lengthb(string)计算string所占的字节长度:返回字符串的长度,单位是字节 length(string)计算stri ...

  4. Myeclipse2016部署tomcat服务(别的服务类似)配置环境

    1.在工具MyEclipse的项目管理菜单中,右单机找Properties或者快捷键alt+enter,(或者直接搜索Runtimes)myEclipse/Targeted Runtimes 2.ne ...

  5. windows与linux之间文件的传输方式总结(转)

    当然,windows与linux之间文件的传输的两种方式有很多,这里就仅仅列出工作中遇到的,作为笔记: 方法一:安装SSH Secure Shell Client客户端 安装即可登录直接拖拉到linu ...

  6. JavaWeb 学习008-今日问题(非空验证尚未解决) 2016-12-2

    1. 学生模块list页面 不能正常跳转 说是找不到stuid属性,但是我在entity里面和数据库建表的属性就是stuid:Grade模块代码一样,却可以正常运行 这是什么问题? <c:for ...

  7. Java重点之小白解析--浅谈数据流形式图片上载

    文档上载,上载也不知道哪个大神(混球)起的名字,读起来怪怪的,反正平时我只读上传. 闲话少说,直入主题.先等等这两天做文件上传,都快把宝宝折磨疯了,不会呀,各种查呀,最可悲的是废了老大功夫学会了传送文 ...

  8. mysql常见命令

    1.进入mysql:mysql -u root -p 2.允许远程访问: mysql -u root –p mysql>use mysql; mysql>update user set h ...

  9. js ShowDialogModal 关闭子页面并刷新父页面,保留查询条件

    不知道大家有没有碰到类似的问题,当时的你是什么思路来处理这个问题呢?是url,session,cookie,还是…… 今天笔者就遇到了这个问题,当时的想法如:url,session,cookie都尝试 ...

  10. ThinkPHP 3.2.3 文件上传时间目录问题

    上传文件的代码如下 在上传文件的时候会默认生成时间目录, 但是有些时候,并不想生成时间目录,而是储存在我们自己定义的目录下,可以这样做: 只需要添加 $upload->autoSub = fal ...