TMS320F28027学习笔记二

28027软件I2C驱动MPU6050


重点:这部分代码由stm32f103的原四轴项目整体迁移。但是stm32的IO口可使能开漏输出,但包括28x系列的TI芯片只支持推挽输出。


解决方案: 对于SDA与SCL口:需在置高电平之后改变IO口方向为输入(读总线),而在置低电平前改变方向为输出(写总线)

当然在改变方向时需解除与开启保护(EALLOW与EDIS)

/******************************************************************************
                                                      宏定义
*******************************************************************************/

#define	SCL_H   	{GpioDataRegs.GPBSET.bit.GPIO33 = 1;I2C_delay(3);\
	                 EALLOW;GpioCtrlRegs.GPBDIR.bit.GPIO33=0;EDIS;}	          //SCL高电平
#define	SCL_L   	{EALLOW;GpioCtrlRegs.GPBDIR.bit.GPIO33=1;EDIS;\
                     GpioDataRegs.GPBCLEAR.bit.GPIO33 = 1;I2C_delay(3);}	  //SCL低电平
#define	SDA_H   	{GpioDataRegs.GPBSET.bit.GPIO32 = 1;I2C_delay(3);\
                     EALLOW;GpioCtrlRegs.GPBDIR.bit.GPIO32=0;EDIS;}	          //SDA高电平
#define	SDA_L   	{EALLOW;GpioCtrlRegs.GPBDIR.bit.GPIO32=1;EDIS;\
                     GpioDataRegs.GPBCLEAR.bit.GPIO32 = 1;I2C_delay(3);}	  //SDA低电平
#define	SDA_Read	GpioDataRegs.GPBDAT.bit.GPIO32                            //SDA读数据

其他I2C总线的读写都是通用协议(在不加延时情况下总线时钟约为400kHz)

附读出数据:

TMS320F28027学习笔记二_第1张图片


待续:1、280x系列的浮点计算库IQMATH的使用与时间测量(EKF滤波(如果可能实现),姿态解算...)

           2、 解决串口无法发送多位字节数据的问题

           3、解决MPU6050只有在烧写后第一次时才执行成功,后续复位调试初始化异常(这个很麻烦)

你可能感兴趣的:(TMS320F28027学习笔记二)