From e7101a7064d3e6da5a946d64bb0e43a77377e2f0 Mon Sep 17 00:00:00 2001
From: WXK <287788329@qq.com>
Date: 星期四, 22 五月 2025 18:11:43 +0800
Subject: [PATCH] 1.22,提交,待测试,给张博先修改

---
 keil/include/drivers/lis3dh_driver.c |  208 ++++++++++++++++++++++++++-------------------------
 1 files changed, 107 insertions(+), 101 deletions(-)

diff --git a/keil/include/drivers/lis3dh_driver.c b/keil/include/drivers/lis3dh_driver.c
index b22121f..7a4a0fb 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
@@ -484,131 +486,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