各位:
有没有用STM32L0X做I2C从机的,从主机读取数据,作从机时时钟主机产生的,那STM32L0X作为从机时钟还要配置吗?主机的时钟为31.25K,
/**
* Brief This function configures I2C1, slave.
* Param None
* Retval None
*/
__INLINE void Configure_I2C1_Slave(void)
{
/* Configure RCC for I2C1 */
/* (1) Enable the peripheral clock I2C1 */
/* (2) Use APBCLK for I2C CLK */
RCC->APB1ENR |= RCC_APB1ENR_I2C1EN; /* (1) */
RCC->CCIPR &= ~RCC_CCIPR_I2C1SEL; /* (2) */
/* Configure I2C1, slave */
/* (3) Timing register value is computed with the AN4235 xls file,
fast Mode @400kHz with I2CCLK = 16MHz, rise time = 100ns,
fall time = 10ns 0x00B1112E */
/* (4) Periph enable, address match interrupt enable */
/* (5) 7-bit address = 0x5A */
/* (6) Enable own address 1 */
I2C1->TIMINGR = (uint32_t)0x00B1112E; /* (3) */
I2C1->CR1 = I2C_CR1_PE | I2C_CR1_ADDRIE; /* (4) */
I2C1->OAR1 |= (uint32_t)(I2C1_OWN_ADDRESS << 1); /* (5) */
I2C1->OAR1 |= I2C_OAR1_OA1EN; /* (6) */
/* Configure IT */
/* (7) Set priority for I2C1_IRQn */
/* (8) Enable I2C1_IRQn */
NVIC_SetPriority(I2C1_IRQn, 0); /* (7) */
NVIC_EnableIRQ(I2C1_IRQn); /* (8) */
}
|