|
【KW41Z】FXOS8700CQ (3D加速度计+3D磁力计)
[复制链接]
本帖最后由 dvd1478 于 2017-5-14 14:27 编辑
FXOS8700CQ 包含了3D加速度计+3D磁力计。
原理图上的电路图如下所示:
值得注意的是使用I2C接口
在使用姿态传感器的,一定要对轴方向的了解。下面是加速度仪、磁力仪 轴的方向
其相关手册如下:
FXOS8700CQ.pdf
(2.21 MB, 下载次数: 40)
普通的I2C本来没有什么好说,不过有一个很有意义的东西。
I2C的总线释放代码,利用的I2C协议中发送一个不可以存在的地址码,令总线上所有的I2C设备都进行待机状态。以达到同步
- void BOARD_I2C_ReleaseBus(void)
- {
- uint8_t i = 0;
- gpio_pin_config_t pin_config;
- port_pin_config_t i2c_pin_config = {0};
- /* Config pin mux as gpio */
- i2c_pin_config.pullSelect = kPORT_PullUp;
- i2c_pin_config.mux = kPORT_MuxAsGpio;
- pin_config.pinDirection = kGPIO_DigitalOutput;
- pin_config.outputLogic = 1U;
- CLOCK_EnableClock(kCLOCK_PortC);
- PORT_SetPinConfig(I2C_RELEASE_SCL_PORT, I2C_RELEASE_SCL_PIN, &i2c_pin_config);
- PORT_SetPinConfig(I2C_RELEASE_SDA_PORT, I2C_RELEASE_SDA_PIN, &i2c_pin_config);
- GPIO_PinInit(I2C_RELEASE_SCL_GPIO, I2C_RELEASE_SCL_PIN, &pin_config);
- GPIO_PinInit(I2C_RELEASE_SDA_GPIO, I2C_RELEASE_SDA_PIN, &pin_config);
- /* Drive SDA low first to simulate a start SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据,初始化时已经拉高*/
- GPIO_WritePinOutput(I2C_RELEASE_SDA_GPIO, I2C_RELEASE_SDA_PIN, 0U);
- i2c_release_bus_delay();
- /* Send 9 pulses on SCL and keep SDA high */
- for (i = 0; i < 9; i++) /*9bit 原因 不必要等待应答/非应答信号*/
- { /* SCL 低电平时,SDA可以变化;在SCL上升沿锁存SDA,SCL高电平传输数据*/
- GPIO_WritePinOutput(I2C_RELEASE_SCL_GPIO, I2C_RELEASE_SCL_PIN, 0U);
- i2c_release_bus_delay();
- GPIO_WritePinOutput(I2C_RELEASE_SDA_GPIO, I2C_RELEASE_SDA_PIN, 1U);
- i2c_release_bus_delay();
- GPIO_WritePinOutput(I2C_RELEASE_SCL_GPIO, I2C_RELEASE_SCL_PIN, 1U);
- i2c_release_bus_delay();
- i2c_release_bus_delay();
- }
- /* Send stop SCL 为高电平时,SDA 由低电平向高电平跳变,结束传送数据 */
- GPIO_WritePinOutput(I2C_RELEASE_SCL_GPIO, I2C_RELEASE_SCL_PIN, 0U);
- i2c_release_bus_delay();
- GPIO_WritePinOutput(I2C_RELEASE_SDA_GPIO, I2C_RELEASE_SDA_PIN, 0U);
- i2c_release_bus_delay();
- GPIO_WritePinOutput(I2C_RELEASE_SCL_GPIO, I2C_RELEASE_SCL_PIN, 1U);
- i2c_release_bus_delay();
- GPIO_WritePinOutput(I2C_RELEASE_SDA_GPIO, I2C_RELEASE_SDA_PIN, 1U);
- i2c_release_bus_delay();
- }
复制代码
|
|