工程文件参考——CubeMX+STM32F4+FreeRTOS+IIC实现JY901通讯


# 前言

本文主要提供F4系列芯片针对JY901芯片的通讯库,供各位参考


JY901芯片提供的库函数是没有F4芯片的资料的,我对着提供的F1芯片模拟IIC通讯改了一些,使用F4硬件IIC系统实现通讯效果
开发者留意下使用iic的地址,0x50要左移一位
(作者泪奔,调试一下午没出结果就因为这个)
文件LobotServoController.h、bool.h请保存到include文件夹中
文件LobotServoController.c请保存到source文件夹中

代码实现

JY901.h

#ifndef JY901_H
#define JY901_H

#define SAVE 			0x00
#define CALSW 		0x01
#define RSW 			0x02
#define RRATE			0x03
#define BAUD 			0x04
#define AXOFFSET	0x05
#define AYOFFSET	0x06
#define AZOFFSET	0x07
#define GXOFFSET	0x08
#define GYOFFSET	0x09
#define GZOFFSET	0x0a
#define HXOFFSET	0x0b
#define HYOFFSET	0x0c
#define HZOFFSET	0x0d
#define D0MODE		0x0e
#define D1MODE		0x0f
#define D2MODE		0x10
#define D3MODE		0x11
#define D0PWMH		0x12
#define D1PWMH		0x13
#define D2PWMH		0x14
#define D3PWMH		0x15
#define D0PWMT		0x16
#define D1PWMT		0x17
#define D2PWMT		0x18
#define D3PWMT		0x19
#define IICADDR		0x1a
#define LEDOFF 		0x1b
#define GPSBAUD		0x1c

#define YYMM				0x30
#define DDHH				0x31
#define MMSS				0x32
#define MS					0x33
#define AX					0x34
#define AY					0x35
#define AZ					0x36
#define GX					0x37
#define GY					0x38
#define GZ					0x39
#define HX					0x3a
#define HY					0x3b
#define HZ					0x3c			
#define Roll				0x3d
#define Pitch				0x3e
#define Yaw					0x3f
#define TEMP				0x40
#define D0Status		0x41
#define D1Status		0x42
#define D2Status		0x43
#define D3Status		0x44
#define PressureL		0x45
#define PressureH		0x46
#define HeightL			0x47
#define HeightH			0x48
#define LonL				0x49
#define LonH				0x4a
#define LatL				0x4b
#define LatH				0x4c
#define GPSHeight   0x4d
#define GPSYAW      0x4e
#define GPSVL				0x4f
#define GPSVH				0x50
      
#define DIO_MODE_AIN 0
#define DIO_MODE_DIN 1
#define DIO_MODE_DOH 2
#define DIO_MODE_DOL 3
#define DIO_MODE_DOPWM 4
#define DIO_MODE_GPS 5			

typedef struct
{
	float a[3],w[3],h[3],Angle[3];
}JY901_Angle;

void JY901_RDDat(JY901_Angle *IMUx);

#endif

JY901.c

#include "JY901.h"
#include "stm32f401xc.h"
#include "i2c.h"
#include "usbd_cdc_if.h"

unsigned char chrTemp[30];


JY901_Angle IMU;

void ShortToChar(short sData,unsigned char cData[])
{
	cData[0]=sData&0xff;
	cData[1]=sData>>8;
}
short CharToShort(unsigned char cData[])
{
	return ((short)cData[1]<<8)|cData[0];
}


void JY901_RDDat(JY901_Angle *IMUx)
{
	//HAL_I2C_Mem_Read(&hi2c1, 0x50, AX, I2C_MEMADD_SIZE_8BIT, &chrTemp[0] , 24, 10);
	//HAL_I2C_Mem_Read(&hi2c1, 0x78, AX, I2C_MEMADD_SIZE_8BIT, &chrTemp[0] , 24, 10);
	HAL_I2C_Mem_Read(&hi2c1, 0x50<<1, AX, I2C_MEMADD_SIZE_8BIT, &chrTemp[0] , 24, 0xff);
	(*IMUx).a[0] = (float)CharToShort(&chrTemp[0])/32768*16;
	(*IMUx).a[1] = (float)CharToShort(&chrTemp[2])/32768*16;
	(*IMUx).a[2] = (float)CharToShort(&chrTemp[4])/32768*16;
	(*IMUx).w[0] = (float)CharToShort(&chrTemp[6])/32768*2000;
	(*IMUx).w[1] = (float)CharToShort(&chrTemp[8])/32768*2000;
	(*IMUx).w[2] = (float)CharToShort(&chrTemp[10])/32768*2000;
	(*IMUx).h[0] = CharToShort(&chrTemp[12]);
	(*IMUx).h[1] = CharToShort(&chrTemp[14]);
	(*IMUx).h[2] = CharToShort(&chrTemp[16]);
	(*IMUx).Angle[0] = (float)CharToShort(&chrTemp[18])/32768*180;
	(*IMUx).Angle[1] = (float)CharToShort(&chrTemp[20])/32768*180;
	(*IMUx).Angle[2] = (float)CharToShort(&chrTemp[22])/32768*180;	
}
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值