From e3d28cbb2bbf0c65af4d3d57e649f7ef0a6cbdb6 Mon Sep 17 00:00:00 2001 From: zhyinch <zhyinch@gmail.com> Date: 星期六, 13 八月 2022 21:50:01 +0800 Subject: [PATCH] 1 --- Drivers/ExternlDrivers/lis3dh_driver.c | 65 +++++++++++++++++++++++++++++--- 1 files changed, 58 insertions(+), 7 deletions(-) diff --git a/Drivers/ExternlDrivers/lis3dh_driver.c b/Drivers/ExternlDrivers/lis3dh_driver.c index ccf5b24..bdccc84 100644 --- a/Drivers/ExternlDrivers/lis3dh_driver.c +++ b/Drivers/ExternlDrivers/lis3dh_driver.c @@ -67,14 +67,58 @@ void IIC2_Init(void) { GPIO_InitTypeDef GPIO_InitStructure= {0}; - __HAL_RCC_GPIOA_CLK_ENABLE(); - GPIO_InitStructure.Pin = SCL_Pin|SDA_Pin; + + GPIO_InitStructure.Pin = SDA_Pin; + GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_OD ; //推挽输出 + GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH; + HAL_GPIO_Init(SDA_GPIO_Port, &GPIO_InitStructure); + + GPIO_InitStructure.Pin = SCL_Pin; GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_OD ; //推挽输出 GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(SCL_GPIO_Port, &GPIO_InitStructure); - HAL_GPIO_WritePin(SCL_GPIO_Port,SCL_Pin|SDA_Pin,GPIO_PIN_SET); //PB6,PB7 输出高 + + HAL_GPIO_WritePin(SCL_GPIO_Port,SCL_Pin,GPIO_PIN_SET); //PB6,PB7 输出高 + HAL_GPIO_WritePin(SDA_GPIO_Port,SDA_Pin,GPIO_PIN_SET); } - +uint8_t LIS3DH_ReadReg(uint8_t Reg, uint8_t* Data); +void LIS3DH_Check(void) +{ +u8 error = 0,temp; + + LIS3DH_ReadReg(LIS3DH_CTRL_REG1,&temp); + if(temp!=0x57) + {error=1;} + + LIS3DH_ReadReg(LIS3DH_CTRL_REG2,&temp); + if(temp!=0x03) + {error=1;} + + LIS3DH_ReadReg(LIS3DH_CTRL_REG3,&temp); + if(temp!=0x40) + {error=1;} + + LIS3DH_ReadReg(LIS3DH_CTRL_REG4,&temp); + if(temp!=0x08) + {error=1;} + + LIS3DH_ReadReg(LIS3DH_INT1_CFG,&temp); + if(temp!=0xaa) + {error=1;} + + LIS3DH_ReadReg(LIS3DH_INT1_THS,&temp); + if(temp!=g_com_map[IMU_THRES]) + {error=1;} + + LIS3DH_ReadReg(LIS3DH_INT1_DURATION,&temp); + if(temp!=g_com_map[IMU_DUARTION]) + {error=1;} + + if(error==1) + { + SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; + } +} void LIS3DH_Data_Init() { @@ -82,16 +126,23 @@ uint8_t lisid,response; uint8_t lisidtemp; - + IIC2_Init(); LIS3DH_WriteReg(LIS3DH_CTRL_REG1, 0x57); /* CTRL_REG1(20h): ??sensor,???????? ODR 25HZ */ LIS3DH_WriteReg(LIS3DH_CTRL_REG2, 0x03); /* CTRL_REG2(21h): IA1?IA2 ?????? bc */ LIS3DH_WriteReg(LIS3DH_CTRL_REG3, 0x40); /* CTRL_REG3(22h): 0x80 ???????INT_1 INT_2 */ LIS3DH_WriteReg(LIS3DH_CTRL_REG4, 0x08); /* CTRL_REG4(23h): ???,????,???+/-2G,?????? */ LIS3DH_WriteReg(LIS3DH_INT1_CFG, 0xaa); /* INT1_CFG(30h): ??,6D X/Y/Z???????? */ - g_com_map[IMU_THRES]=1; + if(g_com_map[IMU_THRES]>20||g_com_map[IMU_THRES] == 0) + { + g_com_map[IMU_THRES] = 1; + } + if(g_com_map[IMU_DUARTION]>20||g_com_map[IMU_DUARTION]==0) + { + g_com_map[IMU_DUARTION] = 2; + } LIS3DH_WriteReg(LIS3DH_INT1_THS, (uint8_t)g_com_map[IMU_THRES]); /* INT1_THS(32h): ?????? 0x10: 16*2(FS) 0x20: 32*16(FS) */ - LIS3DH_WriteReg(LIS3DH_INT1_DURATION, 0x02); /* INT1_DURATION(33h): 1LSB=1/ODR ??ODR=100HZ ??1LSB=10ms ???? 1s,??100->0x64 */ + LIS3DH_WriteReg(LIS3DH_INT1_DURATION, (uint8_t)g_com_map[IMU_DUARTION]); /* INT1_DURATION(33h): 1LSB=1/ODR ??ODR=100HZ ??1LSB=10ms ???? 1s,??100->0x64 */ /* Start sensor */ //LIS3DH_WriteReg(0x20, 0x5f); /* CTRL_REG1(20h): Start sensor at ODR 100Hz Low-power mode */ // Read ID -- Gitblit v1.9.3