Arm 如何正确初始化I2C stm32?
我想从ADXL345加速计获取数据,但似乎连接错误 SCL-PC6(带10k电阻器) SDA-PC7(带10k电阻器) SDO-GND CS-VCC GND-GND 3.3v-VCC 以下是我要初始化的代码:Arm 如何正确初始化I2C stm32?,arm,accelerometer,i2c,stm32,gpio,Arm,Accelerometer,I2c,Stm32,Gpio,我想从ADXL345加速计获取数据,但似乎连接错误 SCL-PC6(带10k电阻器) SDA-PC7(带10k电阻器) SDO-GND CS-VCC GND-GND 3.3v-VCC 以下是我要初始化的代码: void I2CG_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; I2C_InitTypeDef I2C_InitStructure; RCC_AHBPeriphClockCmd(RCC_APB2Perip
void I2CG_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
I2C_InitTypeDef I2C_InitStructure;
RCC_AHBPeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
RCC_AHBPeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
// I2CG clock enable
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2CG, ENABLE);
RCC_AHBPeriphClockCmd(RCC_APB1Periph_I2CG, ENABLE);
// GPIOB clock enable
// I2CG SCL and SDA configuration
GPIO_InitStructure.GPIO_Pin = SCL|SDA;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
// Enable I2CG reset state
RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2CG, ENABLE);
// Release I2CG from reset state
RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2CG, DISABLE);
I2C_DeInit(I2C1);
I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_16_9;
I2C_InitStructure.I2C_OwnAddress1 = 1;
I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
I2C_InitStructure.I2C_ClockSpeed = ClockSpeed;
I2C_Init(I2CG, &I2C_InitStructure);
I2C_Cmd(I2CG, ENABLE);
I2C_AcknowledgeConfig(I2CG, ENABLE);
}
在一个例子中,我看到
GPIO_PinAFConfig(GPIOC,SCLSource,GPIO_AF_I2CG);
GPIO_PinAFConfig(GPIOC,SDASource,GPIO_AF_I2CG);
但是我没有这个API
请帮帮我。我尝试了许多解决方案,也尝试通过SPI连接,但没有成功:(
请帮助了解I2C。有一些声称在这里使用I2C的人提供了STM32的示例代码和应用说明: 在你尝试未知的加速计之前,也许试着让串行EEPROM工作。一旦你确定微控制器端工作,你可以连接加速计,看看你得到了什么 SCL-PC6(带10k电阻器) SDA-PC7(带10k电阻器) SCL和SDA应直接连接。您应使用本方案中的上拉电阻器:
您的初始化代码看起来正常,因此可能是硬件接线错误?我遇到了与您相同的问题。已生成启动条件,但未设置I2Cx_SR1.SB位。 我认为我必须启用I2C备用功能,但我也必须禁用引脚中的所有其他功能。
在我的例子中,这是UART3函数与I2C冲突。我意识到这是一篇旧文章,但值得指出。你不应该使用APB标志来配置AHB总线。检查程序员手册RM0008(假设你使用的是stm32f10x设备)以获得适当的设置。谢谢,但这不是我需要的。不,我无法通过“当”(!I2C_CheckEvent(I2CG,I2C_EVENT(I2CG,I2C_EVENT(I2C_MASTER,I2C_MODE(I2CG,I2C_EVENT(I2C_MASTER,I2C_MODE,I2C_MODE(I2CG,I2C_EVENT(I2C_EVENT,I2C_MASTER,IU MODE(I2C选择))时)I2C_Send7bitAddress(I2CG,DEV_ADDROh,这个。我忘了,但我很确定我也遇到过。