WXK
2025-05-22 e7101a7064d3e6da5a946d64bb0e43a77377e2f0
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,11 +486,18 @@
    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线输出
      IIC2_SDA_OUT();     //sda线输出
    SDA_1;
//      delay_us(10);
    SCL_1;
@@ -500,7 +509,7 @@
//产生IIC停止信号
void IIC2_Stop(void)
{
//      IIC2_SDA_OUT();//sda线输出
      IIC2_SDA_OUT();//sda线输出
    SCL_0;
//      delay_us(10);
    SDA_0;//STOP:when CLK is high DATA change form low to high
@@ -515,16 +524,14 @@
//等待应答信号到来
//返回值: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);
IIC2_SDA_IN();
    SDA_1;
    delay_us(6);
   delay_us(15);
    SCL_1;
    delay_us(6);
   delay_us(15);
    while(IIC2_READ_SDA)
    {
@@ -535,7 +542,6 @@
            return 1;
        }
    }
    gpio_pin_set_dir(SDA_PIN , GPIO_DIR_OUT, 1);
    SCL_0;//时钟输出0
    return 0;
}
@@ -543,7 +549,7 @@
void IIC2_Ack(void)
{
    SCL_0;
//   IIC2_SDA_OUT();
   IIC2_SDA_OUT();
    SDA_0;
    delay_us(10);
    SCL_1;
@@ -554,7 +560,7 @@
void IIC2_NAck(void)
{
    SCL_0;
//   IIC2_SDA_OUT();
   IIC2_SDA_OUT();
    SDA_1;
    delay_us(10);
    SCL_1;
@@ -570,7 +576,7 @@
void IIC2_Send_Byte(uint8_t txd)
{
    uint8_t t;
//      IIC2_SDA_OUT();
      IIC2_SDA_OUT();
    SCL_0;//拉低时钟开始数据传输
    for(t=0; t<8; t++)
    {
@@ -595,7 +601,7 @@
uint8_t IIC2_Read_Byte(unsigned char ack)
{
    unsigned char i,receive=0;
//   IIC2_SDA_IN();//SDA设置为输入
   IIC2_SDA_IN();//SDA设置为输入
    for(i=0; i<8; i++ )
    {
        SCL_0;