底层通信用了昨天写好的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. VS 2008 快捷键

    注释代码:<Ctrl+K,C>取消注释:<Ctrl+K,U> 封装字段(生成get.set方法): <Ctrl+R,E> 定位大括号范围:光标放在其中一个括号的位置 ...

  2. 有关Select option 元素

    动态添加option元素以及option元素被选中方法: function getType() { ); shadowCoverTipAdd("加载中,请稍候.."); $.aja ...

  3. Ansible学习笔记

    一.Ansible简介 Ansible是一种agentless(基于ssh),可实现批量配置.命令执行和控制,基于Python实现的自动化运维工具. 其特性有: ①模块化:通过调用相关模块,完成指定任 ...

  4. iOS手机功能汇总

    开发中经常会调用手机功能,今天来汇总一下,若有不足欢迎大家指出,下面分别介绍如下功能 : 电话 短信 邮件 通讯录 定位 跳转应用 跳转App Store 打开其他文件 电话 调用电话有下图两种不同样 ...

  5. 升级到macos sierra xcode8 requires additional components to support runing and debugging choose Install to add required components

    升级到macos sierra xcode8 报提示:requires additional components to support runing and debugging choose Ins ...

  6. jQuery Mobile 工具栏

    jQuery Mobile 工具栏 工具栏元素常被放置于页眉和页脚中 - 以实现"已访问"的导航: 标题栏 页眉通常会包含页眉标题/LOGO 或一到两个按钮(通常是首页.选项或搜索 ...

  7. python学习之——splinter介绍

    Splinter是什么: 是一个用 Python 编写的 Web 应用程序进行验收测试的工具. Splinter执行的时候会自动打开你指定的浏览器,访问指定的URL,然后你所开发的模拟的任何行为,都会 ...

  8. asp.net web api返回图片至前端

    var response = Request.CreateResponse(HttpStatusCode.OK); response.Content = new ByteArrayContent(da ...

  9. spring filter拦截器

    实现的功能:判断用户是否已登录,未登录用户禁止访问任何页面或action,自动跳转到登录页面.比较好的做法是不管什么人都不能直接访问jsp页面,要访问就通过action,这样就变成了一个实实在在的权限 ...

  10. CSS换行文本溢出显示省略号,多行

    首先,div部分 <body> <div>多行的显示该如何解决呢,后面经过一番google后,我找到了chrome的一个API可以解决上面提到的需求-webkit-line-c ...