你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

请问如何使用stm32的硬件I2C读写HMC5883L?

[复制链接]
wzh598 提问时间:2018-4-17 14:40 /
请问如何使用stm32的硬件I2C读写HMC5883L?
收藏 评论2 发布时间:2018-4-17 14:40

举报

2个回答
feixiang20 回答时间:2018-4-17 23:35:32
去参考下基于STM32 的硬件 I2C 读取 MPU6050 数据,关于STM32f103 的硬件IIC I2C 调试心得,关于HMC5883L驱动书写及调试的总结,HMC5883L手册总结与经验分析 详解,调试hmc5883l,为什么i2c发送字节是这么写,等文章,

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

hungchieh1029 回答时间:2018-5-3 11:07:22
附上讀寫EEPROM的代碼,你再試著去改成HMC5883L的讀寫方式

I2C_HandleTypeDef hi2c_eeprom;

void MX_I2C_EEPROM_Init(void)
{
  hi2c_eeprom.Instance             = EEPROM_I2Cx;
  hi2c_eeprom.Init.ClockSpeed      = I2C_SPEEDCLOCK;
  hi2c_eeprom.Init.DutyCycle       = I2C_DUTYCYCLE;
  hi2c_eeprom.Init.OwnAddress1     = 0;
  hi2c_eeprom.Init.AddressingMode  = I2C_ADDRESSINGMODE_7BIT;
  hi2c_eeprom.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
  hi2c_eeprom.Init.OwnAddress2     = 0;
  hi2c_eeprom.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
  hi2c_eeprom.Init.NoStretchMode   = I2C_NOSTRETCH_DISABLE;
  HAL_I2C_Init(&hi2c_eeprom);
}

void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c)
{
  GPIO_InitTypeDef GPIO_InitStruct;
  if(hi2c->Instance==EEPROM_I2Cx)
  {  

    EEPROM_I2C_RCC_CLK_ENABLE();        
    EEPROM_I2C_GPIO_CLK_ENABLE();
   
    /**I2C1 GPIO Configuration   
    PB6     ------> I2C1_SCL
    PB7     ------> I2C1_SDA
    */
    GPIO_InitStruct.Pin = EEPROM_I2C_SCL_PIN|EEPROM_I2C_SDA_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(EEPROM_I2C_GPIO_PORT, &GPIO_InitStruct);
  }
}

void I2C_EEPROM_WriteByte(uint16_t Addr, uint8_t Reg, uint8_t Value)
{
  HAL_StatusTypeDef status = HAL_OK;
  
  status = HAL_I2C_Mem_Write(&hi2c_eeprom, Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT, &Value, 1, I2cxTimeout);

  if(status != HAL_OK)
  {
    I2C_EEPROM_Error();
  }
}

uint8_t I2C_EEPROM_Readbyte(uint16_t Addr, uint8_t Reg)
{
  HAL_StatusTypeDef status = HAL_OK;
  uint8_t value = 0;
  
  status = HAL_I2C_Mem_Read(&hi2c_eeprom, Addr, Reg, I2C_MEMADD_SIZE_8BIT, &value, 1, I2cxTimeout);

  if(status != HAL_OK)
  {
    I2C_EEPROM_Error();
  }
  return value;
}

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版