打印
[STM8]

请问如何将stm8s i2c设定成快速模式

[复制链接]
2264|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
古代人|  楼主 | 2013-5-24 18:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
想要用stm32f205和stm8s使用i2c通讯,目前


1:STM8s=350k、stm32f205=350k
   STM8s     传值给 stm32f205 ok
   stm32f205 传值给 STM8s     错误

2:STM8s=380k、stm32f205=350k
   STM8s     传值给 stm32f205 ok
   stm32f205 传值给 STM8s     错误

3:STM8s=100k、stm32f205=100k
   STM8s     传值给 stm32f205 ok
   stm32f205 传值给 STM8s     ok

4:STM8s=200k、stm32f205=200k
   STM8s     传值给 stm32f205 ok
   stm32f205 传值给 STM8s     错误

5:STM8s=350k、stm32f205=100k
   STM8s     传值给 stm32f205 ok
   stm32f205 传值给 STM8s     ok

好像只要将stm32f205的速度超过100k,stm8s就收不到值

目前stm8s设定如下

void I2C_Config(void)                                                                       
{                                                                                          
                                                        
    Input_Clock = CLK_GetClockFreq()/1000000;  //震盪器使用8Mhz                                             
                                                                                                                                          
    I2C_DeInit();                                                                           
                                                                                                                                                      
    I2C_Init(400000, 0x6A, I2C_DUTYCYCLE_2, I2C_ACK_CURR, I2C_ADDMODE_7BIT, Input_Clock);   
                                                                                                                                                                                                                                 
    I2C_ITConfig((I2C_IT_EVT |I2C_IT_BUF), ENABLE);                                       
}                                                                                          

请问我是哪裡少设了?
沙发
古代人|  楼主 | 2013-5-24 19:48 | 只看该作者
使用示波器量測
STM8S設為350K時,CLOCK=2.66us,接近350k
所以好像已經在快速模式了?


以下是stm32f205設定方式
I2C_Cmd(I2Cx, DISABLE);                                                                       
                                                                                             
I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;                                                   
I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;                        
I2C_InitStructure.I2C_OwnAddress1 = 0x66;                                               
I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;                                                   
I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;         
I2C_InitStructure.I2C_ClockSpeed = 200000;                                             
                                                                                             
I2C_DeInit(I2Cx);                                                                             
I2C_Cmd(I2Cx, ENABLE);                                                               
I2C_Init(I2Cx, &I2C_InitStructure);                                             
                                                                                             
I2C_ITConfig(I2Cx, I2C_IT_EVT | I2C_IT_BUF, ENABLE);                                          
  I2C_AcknowledgeConfig(I2C1, ENABLE);                                 

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

14

帖子

0

粉丝