OpenEdv-开源电子网

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

stm32F407的硬件I2C稳定吗~

[复制链接]

4

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2016-2-19
在线时间
22 小时
发表于 2016-11-8 19:20:21 | 显示全部楼层 |阅读模式
之前就在疑问,为什么原子提供的I2C例子为什么只有模拟的,而不使用硬件的I2C,之后看了一个帖子说是硬件的I2C不稳定且不好用。不过该帖子是STM32F103的,而且两年时间过去了,不知道后来有没有改善。现在正在调试这个硬件I2C,配置好后不起作用,测量I2C1的时钟线,并没有看到时钟信号。配置如下所示:
    I2C_InitTypeDef I2C_InitStructure;
    I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
    I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
    I2C_InitStructure.I2C_OwnAddress1 = 0x30;
    I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
    I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
    I2C_InitStructure.I2C_ClockSpeed = 10000;
    I2C_Init(I2C1,&I2C_InitStructure);
   
    I2C_ITConfig(I2C1,I2C_IT_EVT | I2C_IT_BUF,ENABLE);
    I2C_Cmd(I2C1,ENABLE);
    I2C_AcknowledgeConfig(I2C1,ENABLE);

发送数据如下所示:
    I2C_GenerateSTART(I2C1,ENABLE);
    I2C_SendData(I2C1,0x77);
    ZY_Delay(5000);
    GPIO_ToggleBits(GPIOG,GPIO_Pin_12);
    GPIO_ToggleBits(GPIOE,GPIO_Pin_2);
    I2C_GenerateSTOP(I2C1,ENABLE);

现象为:GPIOG12和GPIOE2可正常闪烁,但是在PB6和PB7上没有任何信号

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

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2016-11-9 07:40:22 | 显示全部楼层
I2C功能,一般很少用硬件的。用硬件的代码复杂度并没有减少。用模拟的I2C程序写得好的话,速度还更快。你可能不相信,试试就知道了。
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2016-11-9 12:40:54 | 显示全部楼层
本帖最后由 八度空间 于 2016-11-9 12:42 编辑

建议还是用模拟的吧,时间耗不起的,有些bug不那么好弄,也可以尝试官方的CPAL库
楼主可以试下这个方法http://blog.csdn.net/mcu_hong/article/details/8149311
回复 支持 反对

使用道具 举报

7

主题

90

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
325
金钱
325
注册时间
2016-10-21
在线时间
43 小时
发表于 2016-11-9 13:00:59 来自手机 | 显示全部楼层
好像有点不稳定。用过F429接stmpe811 I2C,出现过软件卡在等待I2C复位上,硬件复位无效,只能断电重启。使用HAL库。
回复 支持 反对

使用道具 举报

6

主题

50

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
314
金钱
314
注册时间
2013-7-19
在线时间
129 小时
发表于 2016-11-9 13:16:38 | 显示全部楼层
使用DMA方式试过,挺好用的  中断的话就算了
回复 支持 反对

使用道具 举报

1

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1183
金钱
1183
注册时间
2015-5-28
在线时间
149 小时
发表于 2016-11-10 10:53:38 | 显示全部楼层
稳定不稳定不知道,总之是比较繁琐~原因听说是,由于IIC是NXP的专利,为了避免NXP的知识产权问题,所以这样设计的~
回复 支持 反对

使用道具 举报

106

主题

418

帖子

0

精华

高级会员

Rank: 4

积分
764
金钱
764
注册时间
2016-7-26
在线时间
123 小时
发表于 2016-11-21 21:26:47 | 显示全部楼层
八度空间 发表于 2016-11-9 12:40
建议还是用模拟的吧,时间耗不起的,有些bug不那么好弄,也可以尝试官方的CPAL库
楼主可以试下这个方法htt ...

我还是没看懂为什么不能用while,他说要读出来,那怎么用查询???
回复 支持 反对

使用道具 举报

106

主题

418

帖子

0

精华

高级会员

Rank: 4

积分
764
金钱
764
注册时间
2016-7-26
在线时间
123 小时
发表于 2016-11-21 21:27:53 | 显示全部楼层
queqiongtao 发表于 2016-11-9 13:16
使用DMA方式试过,挺好用的  中断的话就算了

请问@queqiongtao 是用的硬件???
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2016-11-22 12:36:17 | 显示全部楼层
慕名兰 发表于 2016-11-21 21:26
我还是没看懂为什么不能用while,他说要读出来,那怎么用查询???

可以尝试用DMA方式
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

181

主题

311

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1055
金钱
1055
注册时间
2012-8-26
在线时间
52 小时
发表于 2016-11-23 15:59:49 | 显示全部楼层
我F407与AT24C02用硬件I2C通讯,没出过任何问题 ,不过F103的用硬件,压根就没反应
为了雅典娜?为了爱与正义
回复 支持 反对

使用道具 举报

8

主题

47

帖子

1

精华

高级会员

Rank: 4

积分
675
金钱
675
注册时间
2014-9-17
在线时间
89 小时
发表于 2016-11-23 17:14:00 | 显示全部楼层
I2C硬件接口,中断优先级最高,在中断里对事件进行判断进行状态机切换,非常好用。测试到今天,没出现问题
当你的才华还撑不起你的野心时你就应该静下心来学习。当你的经济还撑不起你的梦想时,你就应该踏实的去工作。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-16 00:37

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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