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

查看: 7668|回复: 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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版