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

CubeMX生成的i2c不工作

[复制链接]
潇潇雨歇pku 提问时间:2015-10-26 08:42 /
刚开始学STM32,,用的是STM32F401RE,使用cubeMX生成keil工程后,发现i2c不工作。
main中关键函数如下:
  1. /* USER CODE BEGIN 1 */
  2. HAL_StatusTypeDef i2cStatus1, i2cStatus2;
  3. /* USER CODE END 1 */

  4. /* MCU Configuration----------------------------------------------------------*/

  5. /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  6. HAL_Init();

  7. /* Configure the system clock */
  8. SystemClock_Config();

  9. /* Initialize all configured peripherals */
  10. MX_GPIO_Init();
  11. MX_I2C1_Init();
  12. lcd_init();

  13. /* USER CODE BEGIN 2 */
  14. uint8_t data1 = 0x17;
  15. i2cStatus1 = HAL_I2C_IsDeviceReady(&hi2c1, 0x5a, 3000, 1000);
复制代码
i2cStatus1 返回error。
然后我调试过程中发现,HAL_I2C_IsDeviceReady函数执行过程很诡异,经过函数内如下一段代码后(I2C_CR1_START = 0x100),CR1还是0x1,而没有变成0x101.但是DR变成了0x5A(DevAddress=0x5A)。这里我就很困惑了,为啥CR1经过了hi2c->Instance->CR1 |= I2C_CR1_START;语句值却没有变化呢?
  1. do
  2. {
  3.   /* Generate Start */
  4.   hi2c->Instance->CR1 |= I2C_CR1_START;

  5.   /* Wait until SB flag is set */
  6.   if(I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_SB, RESET, Timeout) != HAL_OK)
  7.   {
  8.     return HAL_TIMEOUT;
  9.   }

  10.   /* Send slave address */
  11.   hi2c->Instance->DR = I2C_7BIT_ADD_WRITE(DevAddress);
  12. ……
  13. //more code
复制代码
watch.png
reg.png

我的cubemx配置如下,请大家也帮我看看有没有啥问题,其中PA0/1/4/5/6是控制LCD的。
1.png
2.png
3.png
4.png
5.png
<
收藏 1 评论20 发布时间:2015-10-26 08:42

举报

20个回答
潇潇雨歇pku 回答时间:2015-10-26 08:46:41
补充一下:CR1最低位是PE位,初始化后是置1的,其他位都是0。所以CR1在do之前是0x1,。I2C_CR1_START = 0x100,所以经过那段代码后CR1应该是0x101才对。
可能有人怀疑 if(I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_SB, RESET, Timeout) != HAL_OK)改变了CR1的值,这个真没有,我把断点设在if前面,CR1执行过还是0x1.
是在无能为力了,请大家帮我看看我到底是哪里出错了
你好我好大家好! 回答时间:2015-10-26 09:03:07
foxglove 回答时间:2015-10-26 09:07:45
到底是哪里出错了
disheng4688 回答时间:2015-10-26 10:49:21
帮顶                  
dsjsjf 回答时间:2015-10-26 11:19:14
帮顶              
潇潇雨歇pku 回答时间:2015-10-26 11:19:52
多谢各位,自己也来顶一下
peter001 回答时间:2015-10-26 12:38:02
固件库有i2c 例子,对照一下
潇潇雨歇pku 回答时间:2015-10-26 15:00:15
peter001 发表于 2015-10-26 12:38
固件库有i2c 例子,对照一下

对比一下,函数组织略有不同,但实际是一样的。还有就是我用的是PB6/7,例子用的是PB6/9,其他就没有区别了。
我再试试把例子修改一下下到我的板子上看行不行。
金志峰 回答时间:2015-10-26 15:59:39
只玩过模拟i2c  等着楼主搞定之后出教程呀
123下一页

所属标签

相似问题

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