2014-01-14 192 views
2

我有一個STM32F0發現問題。 我正在使用I2C1(如主設備)在同一塊主板上向I2C2(從設備)發送啓動條件和地址。 我能夠產生信號的信號,但IC2(從)不能在第9個時鐘產生一個ACKSTM32如何設置從屬I2C端口

怎麼了? 這裏我對設置代碼:

void set_I2C(void){ 
    GPIO_InitTypeDef GPIO_InitStructure; 
    I2C_InitTypeDef I2C_InitStructure; 

    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); 
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE); 
    /* Configure the I2C clock source. The clock is derived from the HSI */ 
    RCC_I2CCLKConfig(RCC_I2C1CLK_SYSCLK); 


    GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_1); 
    GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_1); 


    //Configure 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; 
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; 
    GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; 
    GPIO_Init(GPIOB, &GPIO_InitStructure); 



    I2C_DeInit(I2C1); 
    I2C_Cmd(I2C1, DISABLE); 
    I2C_InitStructure.I2C_AnalogFilter = I2C_AnalogFilter_Enable; 
    I2C_InitStructure.I2C_DigitalFilter = 0x00; 
    I2C_InitStructure.I2C_OwnAddress1 = 0x40; 
    I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; 
    I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; 
    I2C_InitStructure.I2C_Timing =0xB0420F13; //100KHz   

      I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; 

    I2C_Init(I2C1, &I2C_InitStructure); 
    I2C_Cmd(I2C1, ENABLE); 


    //Set up of I2C2 
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2, ENABLE); 
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); 


    GPIO_PinAFConfig(GPIOB, GPIO_PinSource11, GPIO_AF_1); 
    GPIO_PinAFConfig(GPIOB, GPIO_PinSource10, GPIO_AF_1); 

    //Configure pins: SCL and SDA ------------------ 
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_10; 
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; 
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; 
    GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; 
    GPIO_Init(GPIOB, &GPIO_InitStructure); 

    I2C_DeInit(I2C2); 
    I2C_Cmd(I2C2, DISABLE); 
    I2C_InitStructure.I2C_AnalogFilter = I2C_AnalogFilter_Disable; 
    I2C_InitStructure.I2C_DigitalFilter = 0x00; 
    I2C_InitStructure.I2C_OwnAddress1 = 0x30; 

    I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; 
    I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; 

    I2C_InitStructure.I2C_Timing =0xB0420F13; 
    I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; 

    I2C_Init(I2C2, &I2C_InitStructure); 
    I2C_Cmd(I2C2, ENABLE); 



     I2C_ITConfig(I2C2, I2C_AcknowledgedAddress_7bit, ENABLE); 

    NVIC_InitTypeDef NVIC_InitStructure; 
/* Configure the I2C2 interrupt priority */ 
NVIC_InitStructure.NVIC_IRQChannel = I2C2_IRQn; 
NVIC_InitStructure.NVIC_IRQChannelPriority=1; 
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 
NVIC_Init(&NVIC_InitStructure); 

}

+0

那麼,有沒有人能幫助我嗎? 我無法在第9個時鐘產生確認。 – difedepe

回答