px4flow通过iic读取具体寄存器数据程序
底层通信用了昨天写好的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读取具体寄存器数据程序的更多相关文章
- stm32软件模拟IIC读取PX4FLOW光流传感器数据
这段时间在做全国光电设计大赛,用到了px4的px4flow光流传感器,用软件模拟iic读取数据不定期会导致px4flow死机,查了资料和光流的源码,发现这个光流用了stm32的硬件iic,所以对软件模 ...
- JAVA TcpServer端使用Scanner读取不到数据的解决办法
在使用JAVA进行Socket通信时,在Server端使用Scanner的nextLine()方法读取数据时,一直读取不到数据是因为Scanner是一个扫描器,它扫描数据都是去内存中一块缓冲区中进行扫 ...
- 我写的一个ExcelHelper通用类,可用于读取或生成数据
读取或生成EXCEL数据的方法有很多,一般常见的有: 1.通过OFFICE EXCEL组件,优点:读取与生成EXCEL文件方便,缺点:服务器上必须安装OFFICE软件,且进程无法及时释放 2.通过第三 ...
- VC6.0读取Excel文件数据
啰嗦一下:本人所在公司从事碟式斯特林太阳能发电设备的研发与销售.单台设备图如下: 工作原理如下:整个设备大致可分为五个部分, 1.服务器,负责气象.发电等数据存取,电.网连接等处理: 2.气象站,通过 ...
- Android读取JSON格式数据
Android读取JSON格式数据 1. 何为JSON? JSON,全称为JavaScript Object Notation,意为JavaScript对象表示法. JSON 是轻量级的文本数据交换格 ...
- Jlink使用技巧之读取STM32内部的程序
前言 上一篇Jlink系列文章介绍了如何使用J-Flash来下载Hex或Bin文件到单片机,具体可参考Jlink使用技巧之单独下载HEX文件到单片机,本篇文章介绍,如何使用JFlash来读取单片机的程 ...
- 20170711 通过阿里云与国家气象局合作的api读取历史辐照数据
一.概述 今天收到阿里云推送的试用通知,就迫不及待的申请了一个试用key,开始试用. 初步使用之后发现基本可用,至于最后是否适合商用还要看他的收费情况. 接口的使用 ...
- 【转载】 java利用snmp4j包来读取snmp协议数据(Manager端)
https://www.cnblogs.com/xdp-gacl/p/4187089.html http://doc.okbase.net/yuanfy008/archive/265663.html ...
- Windows store app[Part 1]:读取U盘数据
Windows 8系统下开发App程序,对于.NET程序员来说,需要重新熟悉下类库. 关于WinRT,引用一张网上传的很多的结构图: 图1 针对App的开发,App工作在系统划定的安全沙箱内,所以通过 ...
随机推荐
- poj 1691 图方块 end
#include<iostream> int m,n; typedef struct node { int upx,upy; int dox,doy; int c; }node; node ...
- DeepLearning学习(1)--多层感知机
想直接学习卷积神经网络,结果发现因为神经网络的基础较弱,学习起来比较困难,所以准备一步步学.并记录下来,其中会有很多摘抄. (一)什么是多层感知器和反向传播 1,单个神经元 神经网络的基本单元就是神经 ...
- Rust的力量
大约3年前,学习了一个星期的Go语言,然后就没有然后了. Go里面的有些东西设计很新颖,但是缺点也很明显. 上个周末,看了2个小时的Rust,我觉得Rust完全完胜Go语言. 再看Rust的定位,可以 ...
- Tcc学习笔记(二) 安装和配置
1.下载和编译 去repo.or.cz/tinycc.git下载最新的snapshot压缩包, 或者用git命令下载: git clone git://repo.or.cz/tinycc.git . ...
- Java基础之OOP
1. 类(类型)于对象 (1)面向过程的开发于面向对象开发的区别: 面向过程更重视流程化以及功能的开发,简单点来讲,就是按照固定的模式一步步按部就班的进行,最终达成一个功能的实现.这种模式叫做面向过程 ...
- Spring Framework------>version4.3.5.RELAESE----->Reference Documentation学习心得----->Spring Framework中web相关的知识(概述)
Spring Framework中web相关的知识 1.概述: 参考资料:官网documentation中第22小节内容 关于spring web mvc: spring framework中拥有自 ...
- 基于jquery封装的颜色下拉选择框
应同事要求,花了半个小时,写了一个简单的选择颜色的下拉框控件,可以控制输入框指示结果颜色 也贴出来,说不定哪天有用 if (typeof jQuery === 'undefined') { throw ...
- Webstorm官方最新版本for Mac版本 不用注册码/破坏原文件
首先,说明下我自己安装的时候看到网上无外乎两种方法: 下载别人封装好的安装包,把JetbrainsCrack.jar复制到/Applications/WebStorm.app/Contents/bin ...
- C# WinForm 中 MessageBox的使用详解
1.C# WinForm 中 MessageBox的使用详解:http://www.cnblogs.com/bq-blog/archive/2012/07/27/2611810.html
- linux python升级和ipython的安装
==CentOS 6.X 自带的python版本是 2.6 , 由于工作需要,很多时候需要2.7版本.所以需要进行版本升级.由于一些系统工具和服务是对 Python 有依赖的,所以升级 Python ...