你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
积分商城
每日签到
请问如何使用stm32的硬件I2C读写HMC5883L?
[复制链接]
wzh598
提问时间:2018-4-17 14:40 /
请问如何使用stm32的硬件I2C读写HMC5883L?
赞
0
收藏
0
评论
2
分享
发布时间:2018-4-17 14:40
举报
请先
登录
后回复
2个回答
feixiang20
回答时间:2018-4-17 23:35:32
a0a.1 32b0c
去参考下基于STM32 的硬件 I2C 读取 MPU6050 数据,关于STM32f103 的硬件IIC I2C 调试心得,关于HMC5883L驱动书写及调试的总结,HMC5883L手册总结与经验分析 详解,调试hmc5883l,为什么i2c发送字节是这么写,等文章,
评分
参与人数
1
蝴蝶豆
+3
收起
理由
zero99
+ 3
查看全部评分
赞
0
评论
回复
支持
反对
hungchieh1029
回答时间:2018-5-3 11:07:22
a0a.1 32b0c
附上讀寫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;
}
赞
0
评论
回复
支持
反对
所属标签
相似问题
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
评分
查看全部评分
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;
}