新手入门
- 积分
- 14
- 金钱
- 14
- 注册时间
- 2016-3-28
- 在线时间
- 2 小时
|
大家好:
目前将STM32作为i2c从机,已经收到地址匹配,且进入了地址匹配中断,但是没有发出应答信号,可能是什么原因?
i2c初始化已经允许应答信号,如下是I2C初始化代码:
void I2C_CONFIGRATION(){
I2C_InitTypeDef I2C_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);
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);
/*********** I2C periphral configuration **********/
I2C_DeInit(I2C1);
I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; // fixed
I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2; // fixed
I2C_InitStructure.I2C_OwnAddress1 = 0x24; // user parameter
I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; // fixed
I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
I2C_InitStructure.I2C_ClockSpeed = I2C_Speed; // user parameter
I2C_AcknowledgeConfig(I2C1, ENABLE);
//I2C1->CR1 |= I2C_CR1_ACK;
I2C_Cmd(I2C1, ENABLE);
I2C_Init(I2C1, &I2C_InitStructure);
I2C_ITConfig(I2C1, I2C_IT_EVT | I2C_IT_BUF , ENABLE);
NVIC_InitStructure.NVIC_IRQChannel = I2C1_EV_IRQn ;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = I2C2_ER_IRQn;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
|
|