| | |
| | | void IIC2_Init(void) |
| | | { |
| | | GPIO_InitTypeDef GPIO_InitStructure= {0}; |
| | | __HAL_RCC_GPIOA_CLK_ENABLE(); |
| | | GPIO_InitStructure.Pin = GPIO_PIN_2|GPIO_PIN_3; |
| | | |
| | | GPIO_InitStructure.Pin = SDA_Pin; |
| | | GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_OD ; //推挽输出 |
| | | GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH; |
| | | HAL_GPIO_Init(GPIOA, &GPIO_InitStructure); |
| | | HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2|GPIO_PIN_3,GPIO_PIN_SET); //PB6,PB7 输出高 |
| | | 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,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() |
| | | { |
| | |
| | | |
| | | uint8_t lisid,response; |
| | | uint8_t lisidtemp; |
| | | |
| | | LIS3DH_WriteReg(LIS3DH_CTRL_REG1, 0x37); /* CTRL_REG1(20h): ??sensor,???????? ODR 25HZ */ |
| | | 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???????? */ |
| | | LIS3DH_WriteReg(LIS3DH_INT1_THS, 0x01); /* INT1_THS(32h): ?????? 0x10: 16*2(FS) 0x20: 32*16(FS) */ |
| | | LIS3DH_WriteReg(LIS3DH_INT1_DURATION, 0x01); /* INT1_DURATION(33h): 1LSB=1/ODR ??ODR=100HZ ??1LSB=10ms ???? 1s,??100->0x64 */ |
| | | 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, (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 */ |
| | | //LIS3DH_WriteReg(0x20, 0x5f); /* CTRL_REG1(20h): Start sensor at ODR 100Hz Low-power mode */ |
| | | // Read ID |
| | | LIS3DH_GetWHO_AM_I(&lisidtemp); |
| | | // lisid=(uint16_t)lisidtemp; |