From 8b868b30a8979ac643983cdb4b891a8b3b6c78aa Mon Sep 17 00:00:00 2001 From: zhangbo <zhangbo@qq.com> Date: 星期五, 23 五月 2025 18:08:25 +0800 Subject: [PATCH] V1.23 修改uint8 步数 --- keil/include/drivers/lis3dh_driver.c | 251 +++++++++++++++++++++++++++---------------------- 1 files changed, 138 insertions(+), 113 deletions(-) diff --git a/keil/include/drivers/lis3dh_driver.c b/keil/include/drivers/lis3dh_driver.c index 0d2639b..e01b3b8 100644 --- a/keil/include/drivers/lis3dh_driver.c +++ b/keil/include/drivers/lis3dh_driver.c @@ -165,19 +165,21 @@ } -//void delay_us(uint32_t nTimer) -//{ -// uint32_t i=0; -// for(i=0;i<nTimer;i++){ -// __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); -// __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); -// __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); -// __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); -// __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); -// __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); -// __NOP();__NOP();__NOP();__NOP(); -// } -//} +static void delay_us(uint32_t nTimer) +{ + uint32_t i=0; + for(i=0;i<nTimer;i++){ + __NOP(); + __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); + __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); + __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); + __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); + __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); + __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); + + + } +} AxesRaw_t lis2dhdata; //OLED初始化IIC @@ -198,7 +200,7 @@ io_pin_mux_set(SCL_PIN, IO_FUNC0); gpio_pin_set_dir(SDA_PIN , GPIO_DIR_OUT, 1); -// io_open_drain_set(SDA_PIN, 1); + //io_open_drain_set(SDA_PIN, 1); io_pull_set(SDA_PIN , IO_PULL_UP, IO_PULL_UP_LEVEL2);//输出高阻态 gpio_pin_set_dir(SCL_PIN , GPIO_DIR_OUT, 1); @@ -212,18 +214,37 @@ void Accelerometer_Init() { - LIS3DH_GetWHO_AM_I(&lisidtemp); - lisid=(uint16_t)lisidtemp; +// LIS3DH_GetWHO_AM_I(&lisidtemp); +// lisid=(uint16_t)lisidtemp; - if(lisid == 0x33) - { - LIS3DH_Data_Init(); - } - else - { - g_com_map[IMU_ENABLE]=0; - } - +// if(lisid == 0x33) +// { +// LIS3DH_Data_Init(); +// } +// else +// { +// g_com_map[IMU_ENABLE]=0; +// } + lisid = mir3da_ReadOneByte(REG_CHIP_ID); + + if(lisid == 0x13) + { + mir3da_init(); + } + else + { + LIS3DH_GetWHO_AM_I(&lisidtemp); + lisid=(uint16_t)lisidtemp; + + if(lisid == 0x33) + { + LIS3DH_Data_Init(); + } + else + { + g_com_map[IMU_ENABLE]=0; + } + } } void mir3da_init() @@ -484,131 +505,135 @@ return acc_g; } - +void IIC2_SDA_OUT() +{ +gpio_pin_set_dir(SDA_PIN , GPIO_DIR_OUT, 1); +} +void IIC2_SDA_IN() +{ +gpio_pin_set_dir(SDA_PIN,GPIO_DIR_IN,1); //SDA设置为输入等待接收端的应答信号 +} //产生IIC起始信号 void IIC2_Start(void) { -// IIC2_SDA_OUT(); //sda线输出 - SDA_1; + IIC2_SDA_OUT(); //sda线输出 + SDA_1; +// delay_us(10); + SCL_1; // delay_us(10); - SCL_1; -// delay_us(10); - SDA_0;//START:when CLK is high,DATA change form high to low - delay_us(10); - SCL_0;//钳住I2C总线,准备发送或接收数据 -} + SDA_0;//START:when CLK is high,DATA change form high to low + delay_us(10); + SCL_0;//钳住I2C总线,准备发送或接收数据 +} //产生IIC停止信号 void IIC2_Stop(void) { -// IIC2_SDA_OUT();//sda线输出 - SCL_0; + IIC2_SDA_OUT();//sda线输出 + SCL_0; // delay_us(10); - SDA_0;//STOP:when CLK is high DATA change form low to high - delay_us(10); - SCL_1; + SDA_0;//STOP:when CLK is high DATA change form low to high + delay_us(10); + SCL_1; // delay_us(10); - SDA_1;//发送I2C总线结束信号 - delay_us(10); + SDA_1;//发送I2C总线结束信号 + delay_us(10); } //等待应答信号到来 //返回值:1,接收应答失败 // 0,接收应答成功 - uint8_t IIC2_Wait_Ack(void) { - uint8_t ucErrTime=0; -// IIC2_SDA_IN(); //SDA设置为输入 - gpio_pin_set_dir(SDA_PIN , GPIO_DIR_IN, 1); - SDA_1; - delay_us(6); - SCL_1; - delay_us(6); + uint8_t ucErrTime=0; +IIC2_SDA_IN(); + SDA_1; + delay_us(15); + SCL_1; + delay_us(15); - while(IIC2_READ_SDA) - { - ucErrTime++; - if(ucErrTime>250) - { - IIC2_Stop(); - return 1; - } - } - gpio_pin_set_dir(SDA_PIN , GPIO_DIR_OUT, 1); - SCL_0;//时钟输出0 - return 0; -} + while(IIC2_READ_SDA) + { + ucErrTime++; + if(ucErrTime>250) + { + IIC2_Stop(); + return 1; + } + } + SCL_0;//时钟输出0 + return 0; +} //产生ACK应答 void IIC2_Ack(void) { - SCL_0; -// IIC2_SDA_OUT(); - SDA_0; - delay_us(10); - SCL_1; - delay_us(10); - SCL_0; + SCL_0; + IIC2_SDA_OUT(); + SDA_0; + delay_us(10); + SCL_1; + delay_us(10); + SCL_0; } -//不产生ACK应答 +//不产生ACK应答 void IIC2_NAck(void) { - SCL_0; -// IIC2_SDA_OUT(); - SDA_1; - delay_us(10); - SCL_1; - delay_us(10); - SCL_0; + SCL_0; + IIC2_SDA_OUT(); + SDA_1; + delay_us(10); + SCL_1; + delay_us(10); + SCL_0; } //IIC发送一个字节,WRITE //返回从机有无应答 //1,有应答 -//0,无应答 +//0,无应答 void IIC2_Send_Byte(uint8_t txd) -{ - uint8_t t; -// IIC2_SDA_OUT(); - SCL_0;//拉低时钟开始数据传输 - for(t=0; t<8; t++) - { - if((txd&0x80)>>7) - { - SDA_1; - } - else - { - SDA_0; - } - txd <<= 1; - delay_us(10); - SCL_1; - delay_us(10); - SCL_0; - delay_us(10); - } -} +{ + uint8_t t; + IIC2_SDA_OUT(); + SCL_0;//拉低时钟开始数据传输 + for(t=0;t<8;t++) + { + if((txd&0x80)>>7) + { + SDA_1; + } + else + { + SDA_0; + } + txd <<= 1; + delay_us(10); + SCL_1; + delay_us(10); + SCL_0; + delay_us(10); + } +} -//读1个字节,ack=1时,发送ACK,ack=0,发送nACK +//读1个字节,ack=1时,发送ACK,ack=0,发送nACK uint8_t IIC2_Read_Byte(unsigned char ack) { - unsigned char i,receive=0; -// IIC2_SDA_IN();//SDA设置为输入 - for(i=0; i<8; i++ ) - { - SCL_0; - delay_us(10); - SCL_1; - receive<<=1; - if(IIC2_READ_SDA)receive++; - delay_us(5); - } + unsigned char i,receive=0; + IIC2_SDA_IN();//SDA设置为输入 + for(i=0;i<8;i++ ) + { + SCL_0; + delay_us(10); + SCL_1; + receive<<=1; + if(IIC2_READ_SDA)receive++; + delay_us(5); + } if (!ack) IIC2_NAck();//发送nACK else - IIC2_Ack(); //发送ACK + IIC2_Ack(); //发送ACK return receive; } -- Gitblit v1.9.3