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

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.
是在无能为力了,请大家帮我看看我到底是哪里出错了
@@@义 回答时间:2017-6-26 09:38:31
潇潇雨歇pku 发表于 2015-10-30 16:40
用cubeMX库也搞定了。对HAL库函数理解不够深入,所以使用错误。
配合示波器终于搞明白它的函数是什么意思了 ...

朋友你是怎么解决的呢。能帮我看看,我这到底是怎么回事么 。https://www.stmcu.org.cn/module/ ... read&tid=612369
潇潇雨歇pku 回答时间:2015-10-26 16:10:33
金志峰 发表于 2015-10-26 15:59
只玩过模拟i2c  等着楼主搞定之后出教程呀

我也是照着别人的教程搞的,现在出问题了,自己不知道该怎么办了。
刚才看到说stm32的i2c有问题,我准备也用模拟了,以后有空了再搞硬件的
你好我好大家好! 回答时间:2015-10-26 09:03:07
foxglove 回答时间:2015-10-26 09:07:45
到底是哪里出错了
disheng4688 回答时间:2015-10-26 10:49:21
帮顶                  
埃斯提爱慕 回答时间: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,其他就没有区别了。
我再试试把例子修改一下下到我的板子上看行不行。
jinzhifeng 回答时间:2015-10-26 15:59:39
只玩过模拟i2c  等着楼主搞定之后出教程呀
2958155267 回答时间:2015-10-26 21:33:23
stm32模拟i2c简单点
suoma 回答时间:2015-10-27 00:10:55
最好能看一下它的时钟
lijinxing11 回答时间:2015-10-27 05:56:51
     围观一下
潇潇雨歇pku 回答时间:2015-10-27 10:47:01
用模拟i2c,照着别人程序修改,很快搞定了。暂时就先模拟了
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版