STM32的检测电脑硬件的软件I2C到底坑不坑

查看: 1281|回复: 19
STM32的硬件I2C 产生不了起始信号!!
主题帖子精华
新手上路, 积分 28, 距离下一级还需 22 积分
在线时间5 小时
我最近用I2C读取EEPROM的操作,用硬件I2C模拟,库函数。结果产生不了起始信号。具体如下
求解答。。。
(130.67 KB, 下载次数: 0)
09:22 上传
(184.45 KB, 下载次数: 0)
09:22 上传
(168.19 KB, 下载次数: 0)
09:22 上传
主题帖子精华
金牌会员, 积分 1043, 距离下一级还需 1957 积分
在线时间213 小时
用模拟IO吧
主题帖子精华
新手上路, 积分 28, 距离下一级还需 22 积分
在线时间5 小时
用模拟IO吧
感觉还是硬件方便,但是出问题,,还是软件靠谱
主题帖子精华
新手上路, 积分 28, 距离下一级还需 22 积分
在线时间5 小时
时钟和引脚已经配置好了
(154.18 KB, 下载次数: 1)
09:51 上传
主题帖子精华
高级会员, 积分 546, 距离下一级还需 454 积分
在线时间79 小时
好像听原子哥说起过硬件I2C有问题,不是很可靠
主题帖子精华
在线时间302 小时
好像听原子哥说起过硬件I2C有问题,不是很可靠
的确是有bug,103系列的做主机不行,貌似做从设备还好,我折腾的目前运行还行,从设备模式,没做主机,有些细节需要注意就是了
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
在线时间302 小时
时钟和引脚已经配置好了
将GPIO_SetBits这句去掉,外部有上拉就可以了,上拉电阻建议4.7K,具体阻值看信号完整性
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
高级会员, 积分 660, 距离下一级还需 340 积分
在线时间123 小时
楼主硬件模拟解决了吗????
主题帖子精华
高级会员, 积分 660, 距离下一级还需 340 积分
在线时间123 小时
的确是有bug,103系列的做主机不行,貌似做从设备还好,我折腾的目前运行还行,从设备模式,没做主机,有 ...
请问你写的程序STM32做主机能运行吗???能否分享一下!!!!!
主题帖子精华
在线时间302 小时
请问你写的程序STM32做主机能运行吗???能否分享一下!!!!!
稳定性不咋好
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
高级会员, 积分 660, 距离下一级还需 340 积分
在线时间123 小时
本帖最后由 慕名兰 于
15:17 编辑
稳定性不咋好
我遇到的问题很奇葩:在主函数单步调试(不进入任何函数)时,I2C是好的,但是全速运行时就卡在清除ADDR的while里面,结果发现是这样的:
在没进入清除ADDR函数前,ADDR自动的清零了,导致一直死循环。。。。之前学DMA的时候,也出现的类似的情况,有些位本来是要读或写才能清除,但是调试时就自动的清除了
主题帖子精华
高级会员, 积分 660, 距离下一级还需 340 积分
在线时间123 小时
将GPIO_SetBits这句去掉,外部有上拉就可以了,上拉电阻建议4.7K,具体阻值看信号完整性
请问”八度空间“是用的I2C1还是I2C2,我看很多人都用I2C1,I2C2不能用吗?
主题帖子精华
在线时间302 小时
请问”八度空间“是用的I2C1还是I2C2,我看很多人都用I2C1,I2C2不能用吗?
I2C1,做从设备
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
在线时间302 小时
我遇到的问题很奇葩:在主函数单步调试(不进入任何函数)时,I2C是好的,但是全速运行时就卡在清除ADDR ...
清除ADDR位是有条件的,你操作了硬件就会自动清零,详细看参考手册
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
中级会员, 积分 311, 距离下一级还需 189 积分
在线时间49 小时
STM32F1系列的单片机要用硬件IIC,就用HAL库,不要用标准库,用HAL库的硬件IIC是很稳定的,很好用的,如果是STM32F4系列的单片机,直接软件模拟吧,因为BUSY位有BUG
主题帖子精华
高级会员, 积分 660, 距离下一级还需 340 积分
在线时间123 小时
清除ADDR位是有条件的,你操作了硬件就会自动清零,详细看参考手册
我看数据手册是说读SR1后在读SR2后将清除这个位,我在看看从设备是否会产生应答。
主题帖子精华
高级会员, 积分 660, 距离下一级还需 340 积分
在线时间123 小时
清除ADDR位是有条件的,你操作了硬件就会自动清零,详细看参考手册
我看数据手册是说读SR1后在读SR2后将清除这个位,我在看看从设备是否会产生应答。
主题帖子精华
在线时间302 小时
我看数据手册是说读SR1后在读SR2后将清除这个位,我在看看从设备是否会产生应答。
那就是了,只要你读取了SR1,还没读取SR2是不会清的,两个都读取了就清零了,我测试的结果
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
中级会员, 积分 267, 距离下一级还需 233 积分
在线时间36 小时
请问楼主,问题解决了吗?
主题帖子精华
中级会员, 积分 495, 距离下一级还需 5 积分
在线时间65 小时
楼主怎么解决的?我最近也在用硬件读取MPU6050发现不好用,程序老卡住,所以就用了模拟iic。
Powered by查看: 6450|回复: 11
经过一个星期的努力,终于让STM32的硬件I2C跑起来了
主题帖子精华
新手上路, 积分 49, 距离下一级还需 1 积分
在线时间0 小时
下面是我用寄存器写的读写GT9系列IC的代码。在读数据上还不能连续读取,只能一个地址一个数据的读,请各位大哥指正。
//////////////////////////////////////////////////////i2c_hard.c
#include "i2c_hard.h"
void I2C_Init(void)
////////////////I2C GPIO重映像
&RCC-&APB2ENR |= 1&&0;&&& &&//使能AFIO时钟
&AFIO-&MAPR |= 1&&1;&&&&//控制I2C1的SCL和SDA复用功能在GPIO端口的映像 SCL/PB8,SDA/PB9
////////////////I2C GPIO配置
&RCC-&APB2ENR |= 1&&3;&&& &&//使能PORTB时钟
&GPIOB-&CRH &= 0xFFFFFF00;& &&//I2C1:PB8-&SCL, PB9-&SDL&
&GPIOB-&CRH |= 0x000000FF;& &&//复用开漏输出
&//GPIOB-&CRL &= 0x00FFFFFF;& &&//I2C1:PB6-&SCL, PB7-&SDL&
&//GPIOB-&CRL |= 0xFF000000;& &&//复用开漏输出
////////////////I2C 寄存器配置
&&RCC-&APB1ENR |= 1&&21;&& &&//使能外设I2C1时钟
&RCC-&APB1RSTR |= 1&&21;& &&//复位I2C1
&RCC-&APB1RSTR &= ~(1&&21);&&//复位结束I2C1
&I2C1-&CR2 |= 36;&&&&&&&&&&&&&&& //MHz ... MHz,其他禁用(此处为36MHZ)&
&I2C1-&CCR |= 0&&15;&&&&//I2C主模式& 0:标准模式的I2C&&& 1:快速模式的I2C
&I2C1-&CCR |= 90&&0;&&&&&&&&&& &//时钟控制分频系数 = PCLK1/2/f(f为想得到的频率,此处PCLK1=36MHZ,f=200KHZ)
&I2C1-&TRISE |= 37;&&&&//最大允许SCL上升时间为1000ns,故TRISE[5:0]中必须写入(1000ns/(1000/36)ns = 36+1)
&I2C1-&CR1 |= 1&&10;&&&&&&&&&&&& //打开ACK应答,在接收到一个字节后返回一个应答
&I2C1-&CR1 |= 1&&6;&&&&&&&&&&&&& //广播呼叫使能
&I2C1-&OAR1 |= 0&&15;&&&&&&&&&&& //寻址模式&& 1 响应10位地址& 0& 响应7位地址
&I2C1-&OAR1 |= 1&&14;&&&&&&&&&&& //必须始终由软件保持为 1
&I2C1-&OAR1 |= INTERFACE_ADDR&&1;//设置接口地址的 7~1位(接口地址设为0X30)
&I2C1-&CR2 |= 1&&9;&&&&&&&&&&&&& //事件中断使能
&I2C1-&CR2 |= 1&&8;&&&&&&&&&&&&& //出错中断使能
&I2C1-&CR1 |= 1&&0;&&&&&&&&&&&&& //开启I2C1&&&&&&&
void I2C_Start(void)& &&&&//I2C1产生起始条件
&&& I2C1-&CR1 |= 1&&8;&&&&&&&&&&&&&
void I2C_Stop(void)& &&&&//I2C1产生停止条件
&&& I2C1-&CR1 |= 1&&9;&&&&&&&&&&&&&&&
void I2C_End(void)&&&&&&&&&&&&&&&&& //关闭I2C&&
&I2C1-&CR1 &= ~(1&&0);&&&&&&&
void I2C_Write_U8(u8 data)& &&//I2C1写一个字节
&I2C1-&DR =&
u8 I2C_Read_U8(void)& &&&&//I2C1读一个字节
&while(!RXNE_STATUS);&&&& &&//接收到数据标志位
&return I2C1-&DR;&
u8 I2C_Write(u16 addr, u8* data, u16 length)
&u16 clear = 0;
&u8 addr_l=0, addr_h=0;
&u16 send_
&addr_h = (u8)(addr&&8);
&addr_l = (u8)(addr&0x00FF);
&I2C_Start();
&while(!SB_STATUS);
&I2C_Write_U8(WRITE_ADDR);
&while(!ADDR_STATUS);
&clear =&I2C1-&SR1;
&clear = I2C1-&SR2;
&I2C_Write_U8(addr_h);
&while(!BTF_STATUS);
&I2C_Write_U8(addr_l);
&for(send_loop=0;send_loop&send_loop++)
&&while(!BTF_STATUS);
&&I2C_Write_U8(*data);
&I2C_Stop();
&return 0;
u8* I2C_Read(u16 addr, u8* data, u16 length)
&u16 clear = 0;
&u8 addr_l=0, addr_h=0;
&u16 send_
&for(send_loop=0;send_loop&send_loop++)
&&addr_h = (u8)(addr&&8);
&&addr_l = (u8)(addr&0x00FF);
&&I2C_Start();
&&while(!SB_STATUS);
&&I2C_Write_U8(WRITE_ADDR);
&&while(!ADDR_STATUS);
&&clear = I2C1-&SR2;
&&I2C_Write_U8(addr_h);
&&while(!BTF_STATUS);
&&I2C_Write_U8(addr_l);
&&I2C_Start();
&&while(!SB_STATUS);
&&I2C_Write_U8(READ_ADDR);
&&while(!ADDR_STATUS);
&&clear = I2C1-&SR2;&
&&while(!BTF_STATUS);
&&clear = I2C1-&SR1;
&&*data = I2C_Read_U8();
&&I2C_Stop();
//////////////////////////////////////////////////////i2c_hard.h
#ifndef __I2C_HARD_H
#define __I2C_HARD_H
#include "sys.h"
#include "led.h"
#include "delay.h"
#define WRITE_ADDR 0x28&&&&&&& &&& //从设备(GT9)写数据地址
#define READ_ADDR 0x29&&&& &&& //从设备(GT9)读数据地址
#define INTERFACE_ADDR 0x30&&& &&& //自身地址
#define SB_STATUS (I2C1-&SR1 & 1&&0)& //起始位(主模式)
#define ADDR_STATUS (I2C1-&SR1 & 1&&1)//地址已被发送(主模式)
#define BTF_STATUS&(I2C1-&SR1 & 1&&2)//字节发送结束
#define RXNE_STATUS (I2C1-&SR1 & 1&&6)//数据寄存器非空(接收时)
void I2C_Init(void);
void I2C_Start(void);
void I2C_Stop(void);
void I2C_End(void);
void I2C_Write_U8(u8 data);
u8 I2C_Read_U8(void);
u8 I2C_Write(u16 addr, u8* data, u16 length);
u8* I2C_Read(u16 addr, u8* data, u16 length);
主题帖子精华
新手上路, 积分 49, 距离下一级还需 1 积分
在线时间0 小时
没有用中断和DMA,C文件中的一下两句忘记删除了:&
&I2C1-&CR2&|=&1&&9;&&&&&&&&&&&&&&//事件中断使能
&I2C1-&CR2&|=&1&&8;&&&&&&&&&&&&&&//出错中断使能
另外多谢好心人的帮忙
&@augustedward
&@login_FAE&
&@jermy_z&
主题帖子精华
初级会员, 积分 77, 距离下一级还需 123 积分
在线时间0 小时
主题帖子精华
金钱117604
在线时间909 小时
不错,谢谢分享.
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
主题帖子精华
在线时间302 小时
谢谢分享!!!
不能连续读取,怎么破,这样不实际吧,一个地址一个地址来,太慢了,呵呵,我直接一页一页来,速度马上起来了,呵呵
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
初级会员, 积分 61, 距离下一级还需 139 积分
在线时间0 小时
牛逼。学习了
主题帖子精华
初级会员, 积分 89, 距离下一级还需 111 积分
在线时间5 小时
感谢分享!!
主题帖子精华
初级会员, 积分 111, 距离下一级还需 89 积分
在线时间11 小时
楼主你好,我用了一下你的代码,发现每次都在&while(!SB_STATUS)这里卡住,这是为什么呢?
主题帖子精华
新手上路, 积分 44, 距离下一级还需 6 积分
在线时间1 小时
谢谢LZ,我们公司正在调GT911的电容屏,我们也是第一次调,LZ真是帮上了大忙,点赞,谢谢分享
主题帖子精华
在线时间614 小时
谢谢分享,顶一个
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
主题帖子精华
中级会员, 积分 218, 距离下一级还需 282 积分
在线时间34 小时
回复【5楼】八度空间:
---------------------------------
贴出来看看
主题帖子精华
初级会员, 积分 60, 距离下一级还需 140 积分
在线时间12 小时
请问,使用中断或DMA&&没有崩溃,吗??
Powered bySTM32 硬件I2C存在什么缺陷? - STM32 - 意法半导体STM32/STM8技术社区
后使用快捷导航没有帐号?
查看: 351|回复: 6
STM32 硬件I2C存在什么缺陷?
在线时间3 小时
主题帖子好友
初级会员, 积分 57, 距离下一级还需 143 积分
初级会员, 积分 57, 距离下一级还需 143 积分
我看野火的库函数开发手册里面&&感觉用I2C用的挺顺的呀
为什么张洋却说&&STM32的I2C有缺陷 不推荐用
请问下 各位在使用I2C的时候&&碰到过什么情况吗
我怎么都没感觉到I2C的缺陷
能否说下这个缺陷是什么
在线时间3 小时
主题帖子好友
初级会员, 积分 57, 距离下一级还需 143 积分
初级会员, 积分 57, 距离下一级还需 143 积分
不会都没人碰到I2C的问题把??
在线时间146 小时
主题帖子好友
金牌会员, 积分 2047, 距离下一级还需 2953 积分
金牌会员, 积分 2047, 距离下一级还需 2953 积分
其实硬件没有缺陷,是软件固件库程序有Bug,有些人为了赚钱乱写教程误人子弟很不好。
在线时间64 小时
主题帖子好友
高级会员, 积分 992, 距离下一级还需 8 积分
高级会员, 积分 992, 距离下一级还需 8 积分
我碰到过。优先级必须是要最高的不然会卡死
在线时间3 小时
主题帖子好友
初级会员, 积分 57, 距离下一级还需 143 积分
初级会员, 积分 57, 距离下一级还需 143 积分
其实硬件没有缺陷,是软件固件库程序有Bug,有些人为了赚钱乱写教程误人子弟很不好。 ...
这么说&&BUG出在固件库 也就是库函数的使用了?
在线时间3 小时
主题帖子好友
初级会员, 积分 57, 距离下一级还需 143 积分
初级会员, 积分 57, 距离下一级还需 143 积分
我碰到过。优先级必须是要最高的不然会卡死
卡死??是说程序就卡在那里&&不动了? 用的库函数方式吗?
在线时间38 小时
主题帖子好友
高级会员, 积分 546, 距离下一级还需 454 积分
高级会员, 积分 546, 距离下一级还需 454 积分
建议模拟吧,否则很多东西由硬件自动完成的,稍微出点问题,你都不知道问题出在哪,就知道程序死在那了。。。模拟的不会出现这种情况。
站长推荐 /2
Tel: 3-8064
备案号: 苏ICP备号-2
|||意法半导体STM32/STM8技术社区
Powered by21ic官方微信-->
后使用快捷导航没有帐号?
ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU
请完成以下验证码
查看: 3822|回复: 12
STM32F051 硬件I2c不怎么好玩。最好还是使用的模拟方式。
&&已结帖(5)
主题帖子积分
助理工程师, 积分 1381, 距离下一级还需 619 积分
助理工程师, 积分 1381, 距离下一级还需 619 积分
主题帖子积分
专家等级:结帖率:77%
主题帖子积分
助理工程师, 积分 1381, 距离下一级还需 619 积分
助理工程师, 积分 1381, 距离下一级还需 619 积分
咋解,有经验分享吗
满意回复+4
软件实现有很多现成的方案
看到过现成的方案的
成本就上去很多的
STM32F051 硬件I2c比较好用,比STM32F1/F2 硬件I2c 好用多了。
主题帖子积分
助理工程师, 积分 1381, 距离下一级还需 619 积分
助理工程师, 积分 1381, 距离下一级还需 619 积分
主题帖子积分
专家等级:结帖率:77%
主题帖子积分
助理工程师, 积分 1381, 距离下一级还需 619 积分
助理工程师, 积分 1381, 距离下一级还需 619 积分
主题帖子积分
资深工程师, 积分 11272, 距离下一级还需 8728 积分
资深工程师, 积分 11272, 距离下一级还需 8728 积分
主题帖子积分
专家等级:结帖率:75%
主题帖子积分
资深工程师, 积分 11272, 距离下一级还需 8728 积分
资深工程师, 积分 11272, 距离下一级还需 8728 积分
STM32F051 硬件I2c比较好用,比STM32F1/F2 硬件I2c 好用多了。
主题帖子积分
助理工程师, 积分 1381, 距离下一级还需 619 积分
助理工程师, 积分 1381, 距离下一级还需 619 积分
主题帖子积分
专家等级:结帖率:77%
主题帖子积分
助理工程师, 积分 1381, 距离下一级还需 619 积分
助理工程师, 积分 1381, 距离下一级还需 619 积分
有时间再试试。硬件i2c,花了两天时间没调试出来,改用模拟,只用了两个小时。有时间再研究硬件i2c.
主题帖子积分
资深技术员, 积分 464, 距离下一级还需 36 积分
资深技术员, 积分 464, 距离下一级还需 36 积分
主题帖子积分
专家等级:结帖率:55%
主题帖子积分
资深技术员, 积分 464, 距离下一级还需 36 积分
资深技术员, 积分 464, 距离下一级还需 36 积分
I2C硬件是不好玩,模拟简单多了
主题帖子积分
资深工程师, 积分 13137, 距离下一级还需 6863 积分
资深工程师, 积分 13137, 距离下一级还需 6863 积分
主题帖子积分
专家等级:结帖率:55%
主题帖子积分
资深工程师, 积分 13137, 距离下一级还需 6863 积分
资深工程师, 积分 13137, 距离下一级还需 6863 积分
12C确实不是什么好调的,要花一定的时间。软件模拟本来比硬件实现要简单多了。
好好学习,天天向上!
主题帖子积分
高级工程师, 积分 7950, 距离下一级还需 50 积分
高级工程师, 积分 7950, 距离下一级还需 50 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
高级工程师, 积分 7950, 距离下一级还需 50 积分
高级工程师, 积分 7950, 距离下一级还需 50 积分
软件实现有很多现成的方案& &用硬件& &前段时间& &看到过现成的方案的&&不过这样&&成本就上去很多的& &
主题帖子积分
高级工程师, 积分 7950, 距离下一级还需 50 积分
高级工程师, 积分 7950, 距离下一级还需 50 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
高级工程师, 积分 7950, 距离下一级还需 50 积分
高级工程师, 积分 7950, 距离下一级还需 50 积分
很多时候& &软件实现的功能比硬件实现起来&&方便很多& &当然&&这个需要看个人的意见& &
主题帖子积分
助理工程师, 积分 1381, 距离下一级还需 619 积分
助理工程师, 积分 1381, 距离下一级还需 619 积分
主题帖子积分
专家等级:结帖率:77%
主题帖子积分
助理工程师, 积分 1381, 距离下一级还需 619 积分
助理工程师, 积分 1381, 距离下一级还需 619 积分
有时候,硬件方便
主题帖子积分
助理工程师, 积分 1122, 距离下一级还需 878 积分
助理工程师, 积分 1122, 距离下一级还需 878 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
助理工程师, 积分 1122, 距离下一级还需 878 积分
助理工程师, 积分 1122, 距离下一级还需 878 积分
STM32F0的I2C已经改进很多了,挺好用的。
主题帖子积分
初级技术员, 积分 95, 距离下一级还需 5 积分
初级技术员, 积分 95, 距离下一级还需 5 积分
主题帖子积分
专家等级:结帖率:33%
主题帖子积分
初级技术员, 积分 95, 距离下一级还需 5 积分
初级技术员, 积分 95, 距离下一级还需 5 积分
STM32F0的I2C已经改进很多了,挺好用的。
你好,请问f0系列的硬件iic是否存在bug?想拿来当从机用。
主题帖子积分
助理工程师, 积分 1122, 距离下一级还需 878 积分
助理工程师, 积分 1122, 距离下一级还需 878 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
助理工程师, 积分 1122, 距离下一级还需 878 积分
助理工程师, 积分 1122, 距离下一级还需 878 积分
你好,请问f0系列的硬件iic是否存在bug?想拿来当从机用。
我没有发现bug
主题帖子积分
技术总监, 积分 24534, 距离下一级还需 25466 积分
技术总监, 积分 24534, 距离下一级还需 25466 积分
主题帖子积分
专家等级:结帖率:100%打赏:8.88受赏:31.98
主题帖子积分
技术总监, 积分 24534, 距离下一级还需 25466 积分
技术总监, 积分 24534, 距离下一级还需 25466 积分
其实单主机用模拟很省事也不费ROM,而I2C基本上对速度从来都没有需求。
欢快之小溪
发帖类勋章
技术奇才奖章
人才类勋章
时间类勋章
社区建设奖章
等级类勋章
时间类勋章
技术领袖奖章
人才类勋章
核心会员奖章
等级类勋章
坚毅之洋流
发帖类勋章
涓涓之细流
发帖类勋章
时间类勋章
时间类勋章
奔腾之江水
发帖类勋章
无冕之王奖章
等级类勋章
时间类勋章
精英会员奖章
等级类勋章关于STM32的I2C(IIC)问题的讨论 - STM32 - 意法半导体STM32/STM8技术社区
后使用快捷导航没有帐号?
查看: 2371|回复: 17
关于STM32的I2C(IIC)问题的讨论
在线时间627 小时
ST金币3413
主题帖子好友
本帖最后由 moyanming2013 于
16:58 编辑
此问题延伸于:
我发表了一些言论引起了激烈的讨论。这讨论是积极的好的,希望下述也能起到讨论和传播的效果。
为什么国内一股ST的硬件I2C不行的氛围,这些初始言论从何而来、从谁而来,又是如何被形成“共识”的?!
但,现在已经不重要了。为了能够摆脱这种氛围,或者说让那些没认真操作或者没实际操作ST硬件I2C的同学能够真正了解其原理而不至于把这种言论再传播下去,希望大家踊跃讨论,各抒己见。
1.I2C协议在日已经免除版税了!参考资料1。
但需要缴纳I2C从设备地址版税(意思就是说你如果是做I2C从设备的厂商只需要缴纳从设备地址版税)给NXP。
ST首个STM32产品是基于Cortex-M3的,而Cortex-M3首个开放IP的版本是r1p1(参考资料2),是在2006年发布的,接着在2008年发布了r2p0,当前广泛使用的是2010年发布的r2p1。如果你是通过正规途径购买的F1系列产品,基本都是2010年后基于r2p1生产的免版税的I2C协议实现(即使ST实现从设备,这些从设备版税对ST来说根本比不了砍了I2C带来的损失)。参考资料2.
所以,以后别说是ST与飞利浦或NXP由于版税或版权导致的I2C有问题这种不当言论了!
额外:国内洋垃圾横行,一些小厂为了减少成本,可能使用了一些早间2006或之前生产的ST产品(这种情况其实本来就小的很!),看了一些时间对不上版本号的勘误表给出了一些错误的结论。希望我们都认真一些!负责一些!
2.ST的I2C是否真的有问题?
首先,用它的同学不要妄下结论,大家水平都有限,后面的同学看了你说的结论会“一朝被蛇咬十年怕井绳”,因为我们做的产品都需要稳定运行。
我们来看下国外用户对STM32的I2C的问题吧:
2.1.arm mbed上面搜索“ST I2C”有24万个结果(大部分是相关资料等)(参考资料3),我们可以看其中列出的2个问题:
“Basic i2c issues with STM32F103RB target”,他的问题大致是说收到的数据是错误的,并没有I2C本身存在问题的描述。
“I2C2 on ST Nucleo F103RB.”,他的问题是用I2C2时不工作,其中有人提醒他:
I2C需要10K的上拉电阻!(国内用户也应该看看是否此配置正确?)
另一位说问问题的搞错了管脚(但该位的I2C1有问题,但I2C2没问题)
上面的2个问题都没有说明I2C本身有什么硬件问题!
2.2.stackoverflow上面搜索“ST I2C”只有28个结果(参考资料4),我们可以看其中列出的2个问题:
“STM32 how to set a slave I2C port”,他从I2C1发数据到从设备I2C2,但是I2C2没有回复ACK,其中有人回复他不要忘了加上拉电阻。
“Embedded software program block, I2C?”,他实现的IO比较多:串口、SPI、DMA等,知道自己的I2C仲裁可能存在问题,其中有人回复他的程序里面有些处理没有超时退出。该回复者提到了ST的I2C硬件有时有bug,但现在他的I2C操作可用。
上面都提到的上拉电阻,见下图红框处(参考资料1):
QQ截图11.jpg (34.32 KB, 下载次数: 0)
16:05 上传
2.3.国内也不是所有人都觉得ST的I2C的难用:
“关于STM32的I2C硬件DMA实现”提到:
“网上看到很多说STM32的I2C很难用,但我觉得还是理解上的问题,STM32的I2C确实很复杂,但只要基础牢靠,并没有想象中的那么困难。”
上述来源:
所以,当你遇到问题时,先要怀疑自己的理解能力、解决问题的能力,再说其它原因,更不要以讹传讹。只有面对自己的问题才能进步。
3.我自己的情况。
我用过NXP自己的硬件I2C(这可能比ST的I2C有点说服力,毕竟I2C是NXP(飞利浦)的原创),有串口中断、有定时器中断等。在调试该I2C时也遇到了问题,而且长时间(2个月)无法解决。我找到了NXP官方(其实还是飞利浦的资料)的关于I2C的技术细节,并实现了它(仍然是硬件I2C实现而不是模拟,当时搜索国内的解决方案,包括周立功方面都是给的模拟方案和建议改为模拟方案(我觉得周立功方面没作为),但我是没有放弃),最后是在进行I2C通信前关闭所有中断解决了此问题,并通过了长时间的测试仍然运行良好。但此前的功夫不是白费的,只有掌握和实现了I2C本身,才能够说其它方面有问题,比如中断。但反过来,即使中断改对了,也不一定能够解决硬件I2C的问题。再进一步妥协到用模拟I2C,那种被牵着鼻子走的感觉就如同买了个拖拉机还让用牛车一样。我想ST下的I2C也有类似的问题,就看是否真去解决!下面的资料是I2C的技术细节,有些能够在ST的关于I2C的介绍中找到,有些还需要参考原始技术细节比较容易理解。我发现I2C看起来简单,但是真正运行时很复杂,见上面2.3提到的,我建议大家在做I2C通信时都要彻底掌握I2C协议本身并结合自己的项目来处理(其实做什么项目都应该如此)。比如是否关闭所有中断和设置优先级。
比较难找的、至今通用的、追本溯源的、非常通俗易懂的、我对I2C研究压箱底的、飞利浦I2C原始细节用户手册《AN10216 I2C Manual》:
(4.12 MB, 下载次数: 160)
16:22 上传
点击文件名下载附件
你想知道的关于I2C所有的技术细节都在上面了!
下面是NXP更新的I2C用户手册(它更官方话了些):
(1.33 MB, 下载次数: 107)
16:28 上传
点击文件名下载附件
4.ST在国内关于I2C舆论时在干什么?
其实ST的硬件I2C有没有问题,各位应该有个大致判断了吧!
关于勘误表,我想说的是任何MCU都不是完美的,即使串口也有勘误。但勘误表不是自己的免死金牌!
我给一些其它ST官方的关于I2C的资料:
《STM32L4-I2C》见参考资料5.
《AN2824 STM32F10xxx I2C optimized examples》见参考资料6.
5.参考资料
在线时间144 小时
ST金币1389
主题帖子好友
金牌会员, 积分 2300, 距离下一级还需 2700 积分
金牌会员, 积分 2300, 距离下一级还需 2700 积分
支持& && && &
在线时间110 小时
ST金币1238
主题帖子好友
金牌会员, 积分 2157, 距离下一级还需 2843 积分
金牌会员, 积分 2157, 距离下一级还需 2843 积分
以前应用的时候是会出问题,ST支持都说自己的有问题,这个是事实的, 口碑估计就是那个时候开始的
在线时间81 小时
主题帖子好友
金牌会员, 积分 1372, 距离下一级还需 3628 积分
金牌会员, 积分 1372, 距离下一级还需 3628 积分
楼主研究透彻。顶起!
在线时间352 小时
ST金币1640
主题帖子好友
我用I2C访问EEPROM,当时是24C64,地址要由默认的8位改为16位地址。
用STM32F1的硬件I2C也没有问题。
不知道为什么有人会说硬件I2C有问题
在线时间205 小时
ST金币2261
主题帖子好友
金牌会员, 积分 3787, 距离下一级还需 1213 积分
金牌会员, 积分 3787, 距离下一级还需 1213 积分
这个才象研究的样子,我们就需要这样的研究,我支持楼主。
在线时间627 小时
ST金币3413
主题帖子好友
这个才象研究的样子,我们就需要这样的研究,我支持楼主。
不管如何,我说了自己认为合理的
在线时间627 小时
ST金币3413
主题帖子好友
我用I2C访问EEPROM,当时是24C64,地址要由默认的8位改为16位地址。
用STM32F1的硬件I2C也没有问题。
嗯,那种声音太刺耳,我们去噪一下。
在线时间627 小时
ST金币3413
主题帖子好友
以前应用的时候是会出问题,ST支持都说自己的有问题,这个是事实的, 口碑估计就是那个时候开始的 ...
ST自己的国内业务员太不负责任了,如果连“由于和NXP(或飞利浦)关于I2C的专利问题”都写入FAQ,那么就看出ST中国自己都搞不清楚吗?!
其实,ST的新网站也有问题()!
在线时间36 小时
主题帖子好友
高级会员, 积分 535, 距离下一级还需 465 积分
高级会员, 积分 535, 距离下一级还需 465 积分
从我接触的几个ST的支持来看水平真的不咋地
站长推荐 /2
Tel: 3-8064
备案号: 苏ICP备号-2
|||意法半导体STM32/STM8技术社区
Powered by

我要回帖

更多关于 不支持的硬件 的文章

 

随机推荐