[STM8] STM8S的I2C时钟问题?

[复制链接]
 楼主| wangzhihai1986 发表于 2011-11-15 16:47 | 显示全部楼层 |阅读模式
香主,我遇见一个问题,I2C时钟设置成100KHz,但用示波器上显示的是200KHZ,调试时CCR寄存器里的值是40,FREQ里是8,理论计算是100KHZ,但实际不是,为什么啊,求解......
香水城 发表于 2011-11-15 17:00 | 显示全部楼层
说说你是怎么计算的?
dfsa 发表于 2011-11-15 18:22 | 显示全部楼层
可能是计算错了
gudujiangren 发表于 2011-11-16 08:38 | 显示全部楼层
我想问个问题,lz分频了吗
 楼主| wangzhihai1986 发表于 2011-11-18 17:01 | 显示全部楼层
用的是官方的库函数,FREQ里是4时,理论应该是100KHZ的,示波器上显示是400KHZ,只有把FREQ里写入16时,示波器上测得的才正确,不知为什么。
        I2C_Init(100000, //100khz.
                         0xa0, //address.
                         I2C_DUTYCYCLE_2, //50% duty cycle.
                         I2C_ACK_CURR,
                         I2C_ADDMODE_7BIT,
                         16); //16MHz input clock.
这是直接调用库函数的。
香水城 发表于 2011-11-18 18:17 | 显示全部楼层
要看你板上的晶振频率是多少。
guanggaoren 发表于 2011-11-21 09:22 | 显示全部楼层
怎么分频的?
 楼主| wangzhihai1986 发表于 2011-11-22 09:21 | 显示全部楼层
晶振是16MHZ的,内部主时钟也是16MHZ
shuaibaobao 发表于 2011-11-26 15:57 | 显示全部楼层
计算有问题提吧。
mengjicheng 发表于 2012-11-28 14:42 | 显示全部楼层
能不能告诉怎样个寄算过程,一直对设置不是很理解
明月小厨 发表于 2012-12-2 00:29 | 显示全部楼层
I2C的SCL频率设定:相关的寄存器是二个8位的寄存器,拼在一起组合一个16位的寄存器(高低字节);
注:有的编译器要求高低字节分别写入的;我不知道是写的时候有要求还是读的时候有要求;
明月小厨 发表于 2012-12-2 00:33 | 显示全部楼层
本帖最后由 明月小厨 于 2012-12-2 00:51 编辑

D15:这个16位寄存器的最高位,F/S = 0;标准模式(低速)
D14:高速模式的占空比.随便设,0或1;
D14:=0
D13:=0
D12...D0;这里是关键点,设D12-D0 = n;则你的I2C_SCL的频率 = Fck/n;
Fck是I2C设备的频率,从主频分过来的;
Fck = 1MHZ ; (设 I2C_FREQR =1;)
然后 I2C_CCRL=10;

明月小厨 发表于 2012-12-2 00:59 | 显示全部楼层
香主,我遇见一个问题,I2C时钟设置成100KHz,但用示波器上显示的是200KHZ,调试时CCR寄存器里的值是40,FREQ里是8,理论计算是100KHZ,但实际不是,为什么啊,求解......
FREQ里是8;对应I2C时钟就是8MHZ;如果是1就是1MHZ,如果是2就是2MHZ......
CCR = 40;按上面的计算公式,8MHZ/40= 200KHZ;

你100KHZ是怎么计算出来的?:@:@:@:@
明月小厨 发表于 2012-12-2 01:32 | 显示全部楼层
如果我们知道主频是16MHZ,然后计算分频数,得到我们需要的频率;
可是 I2C_FEQR的低5位直接设你需要的频率值;如果我的主频不是16MHZ,而是12MHZ,这样设也有效吗?奇怪;
楼主调用的库函数我已经看过了,没有错.100KHZ也是你希望得到的结果,让函数内部帮你自动去设定.
但过程真的太复杂了.还是操作寄存器省事.
明月小厨 发表于 2012-12-2 01:53 | 显示全部楼层
100KHZ是你要的结果,这个不会有问题;另一个影响的参数是16(16MHZ);这是有可能出错的地方;
如果你是用HSI,相关的CLK_CKDIVR如果是1,就是16MHZ,如果是2,就是8MHZ;
此时系统主频是8MHZ的时候,但你却误以为是16MHZ,如果是样,你最后得到的结果应该是50KHZ才对,但你观察到的200KHZ是怎么回事?

还有一种解释就是你观察波形的时候,看的是半波(半个周期).
东海龙子 发表于 2013-9-21 23:34 | 显示全部楼层
你们说的什么库函数哪里有啊?我什么看不懂?我现在弄主I2C都弄不出来,谁有例子能否给我看下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:熟练掌握STM32F系列芯片,USB和以太网都可以做,要外包的可以联系我(QQ:594378180)。

21

主题

333

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部