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

查看: 7704|回复: 2

STM32 I2C

[复制链接]

1

主题

0

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2009-3-23 12:08:25 | 显示全部楼层 |阅读模式
STM32 I2C
                                     
            
我用STM32F103CB跟Mega8做I2C通信,看了资料,STM32的I2C管脚可以支持5V,所以将STM32的SCL和SDA上拉到5V,跟MEGA8通信。MEGA8的程序测试过,应该是没有问题的。
                        以下是STM32的程序:
                        #define I2C1_HOST_ADDRESS7    0x01
                        #define I2C1_SLAVE_ADDRESS7   0x02
                        #define ClockSpeed            200000
                        
                        I2C_InitTypeDef  I2C_InitStructure;
                        
                        void I2C_Configuration(void)
                        {
                          /* Enable I2C1 ----------------------------------------------------*/
                          I2C_Cmd(I2C1, ENABLE);
                        
                          /* I2C1 configuration ------------------------------------------------------*/
                          I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
                          I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
                          I2C_InitStructure.I2C_OwnAddress1 = I2C1_HOST_ADDRESS7;
                          I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
                          I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
                          I2C_InitStructure.I2C_ClockSpeed = ClockSpeed;
                          I2C_Init(I2C1, &I2C_InitStructure);
                        
                          /* Send I2C1 START condition */
                          I2C_GenerateSTART(I2C1, ENABLE);
                        
                          /* Test on I2C1 EV5 and clear it */
                          while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
                        
                          /* Send I2C2 slave Address for write */
                          I2C_Send7bitAddress(I2C1, I2C1_SLAVE_ADDRESS7, I2C_Direction_Transmitter);
                        
                          /* Test on I2C1 EV6 and clear it */
                          while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
                        
                          /* Send I2C1 data */
                          I2C_SendData(I2C1, 0xaa);
                        
                          /* Test on I2C1 EV8 and clear it */
                          while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
                        
                          /* Send I2C1 STOP Condition */
                          I2C_GenerateSTOP(I2C1, ENABLE);
                        }
                        
                        RCC_APB1PeriphClockCmd( RCC_APB1Periph_I2C1, ENABLE );
                        
                        /* Configure I2C1 pins: SCL and SDA ----------------------------------------*/
                          GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6 | GPIO_Pin_7;
                          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
                          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
                          GPIO_Init(GPIOB, &GPIO_InitStructure);
                        
                        主机发送完START信号后,读取SR1和SR2寄存器的值,始终是0,而MEGA8接收不到ACK信号。郁闷了好几天了,高手帮忙解答一下吧~
            
            
            
回复

使用道具 举报

0

主题

11

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2009-7-7 22:36:40 | 显示全部楼层

RE:STM32 I2C

#define I2C1_SLAVE_ADDRESS7   0x02
的地址有问题,应该是
#define I2C1_SLAVE_ADDRESS7   0xA0+(0x02
回复 支持 反对

使用道具 举报

1

主题

13

回帖

0

蝴蝶豆

初级会员

最后登录
2018-8-1
发表于 2012-3-29 10:42:17 | 显示全部楼层

RE:STM32 I2C

想了解I2C1_HOST_ADDRESS7的地址是如何定义的?谢谢!
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版