三轴传感器
PA4~7都不能作为其他用处,三周传感器需要使用到这四个引脚资源
当然,如果不用中断,也可以只结PA4,5,PA6,7可接到温度传感器和温湿度传感器。
这个外设的通信协议也是I2C跟我们之前说到的E2PROM一样,所以我们就轻车熟路了。
主要是以下两点:
更改I2C驱动里的SDA和SCL引脚
正确配置三轴传感器
修改I2C的引脚定义:
i2c.c:
#define I2C_PORT GPIOA
#define SDA_Pin GPIO_Pin_5
#define SCL_Pin GPIO_Pin_4
void i2c_init()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = SDA_Pin | SCL_Pin;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(I2C_PORT, &GPIO_InitStructure);
}
需要手写的驱动代码
u8 alz[3] ;
void LIS302DL_Write(unsigned char reg,unsigned char info)
{
I2CStart();
I2CSendByte(0x38);
I2CWaitAck();
I2CSendByte(reg);
I2CWaitAck();
I2CSendByte(info);
I2CWaitAck();
I2CStop();
}
uint8_t LIS302DL_Read(uint8_t address)
{
unsigned char val;
I2CStart();
I2CSendByte(0x38);
I2CWaitAck();
I2CSendByte(address);
I2CWaitAck();
I2CStart();
I2CSendByte(0x39);
I2CWaitAck();
val = I2CReceiveByte();
I2CSendNotAck();
I2CStop();
return(val);
}
u8* Lis302DL_Output(void)
{
if((LIS302DL_Read(0x27) & 0x08) != 0)
{
alz[0] = (LIS302DL_Read(0x29));
alz[1] = (LIS302DL_Read(0x2B));
alz[2] = (LIS302DL_Read(0x2D));
}
return alz;
}
void memeinit()
{
MEMEWRITE(0x20,0x47);
MEMEWRITE(0x21,0x00);
MEMEWRITE(0x22,0xc1);
MEMEWRITE(0x32,0x28);
MEMEWRITE(0x33,40);
MEMEWRITE(0x30,0x10);
}
uint8_t LIS302DL_Check(void)
{
if(LIS302DL_Read(0x0f))
{
return 1;
}
else
{
return 0;
}
}
在main()函数中使用,并在LCD上打印出三个轴的角度:
int main()
{
u8 *p;
u8 str1[20];
...
i2c_init();
LIS302DL_Config();
if(LIS302DL_Check() == 1)
{
LCD_DisplayStringLine(Line1, (u8 *)" MEMS STATUS: OK");
}
else
{
LCD_DisplayStringLine(Line1, (u8 *)" MEMS STATUS: ERROR");
}
while(1)
{
p=Lis302DL_Output();
LCD_ClearLine(Line2);
sprintf(str1," X= %d ",(int)p[0]);
LCD_DisplayStringLine(Line2, str1);
LCD_ClearLine(Line3);
sprintf(str1," Y= %d ",(int)p[1]);
LCD_DisplayStringLine(Line3, str1);
LCD_ClearLine(Line4);
sprintf(str1," Z= %d ",(int)p[2]);
LCD_DisplayStringLine(Line4, str1);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)