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