OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7109|回复: 1

CubeMX生成的i2c不工作

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
25
金钱
25
注册时间
2015-10-26
在线时间
0 小时
发表于 2015-10-26 12:46:48 | 显示全部楼层 |阅读模式
5金钱
不知道在这里提问合适不,因为用的不是原子哥的板子。
我用的是STM32F401RE,使用cubeMX生成keil工程后,发现i2c不工作。
main中关键函数如下:
[mw_shl_code=c,true]/* USER CODE BEGIN 1 */ HAL_StatusTypeDef i2cStatus1, i2cStatus2; /* USER CODE END 1 */ /* MCU Configuration----------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* Configure the system clock */ SystemClock_Config(); /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_I2C1_Init(); lcd_init(); /* USER CODE BEGIN 2 */ uint8_t data1 = 0x17; i2cStatus1 = HAL_I2C_IsDeviceReady(&hi2c1, 0x5a, 3000, 1000);[/mw_shl_code]

i2cStatus1 返回error。
然后我调试过程中发现,HAL_I2C_IsDeviceReady函数执行过程很诡异,经过函数内如下一段代码后(I2C_CR1_START = 0x100),CR1还是0x1,而没有变成0x101.但是DR变成了0x5A(DevAddress=0x5A)。这里我就很困惑了,为啥CR1经过了hi2c->Instance->CR1 |= I2C_CR1_START;语句值却没有变化呢?
[mw_shl_code=c,true]do { /* Generate Start */ hi2c->Instance->CR1 |= I2C_CR1_START; /* Wait until SB flag is set */ if(I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_SB, RESET, Timeout) != HAL_OK) { return HAL_TIMEOUT; } /* Send slave address */ hi2c->Instance->DR = I2C_7BIT_ADD_WRITE(DevAddress); …… //more code[/mw_shl_code]


我的cubemx配置如下,请大家也帮我看看有没有啥问题,其中PA0/1/4/5/6是控制LCD的。


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-11-1 23:26:10 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-25 12:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表